Linux中國

RHCE 系列(八):在 Apache 上使用網路安全服務(NSS)實現 HTTPS

RHCE 系列:第八部分 - 使用網路安全服務(NSS)為 Apache 通過 TLS 實現 HTTPS

為了在客戶端和伺服器之間提供更安全的連接,作為 HTTP 和 SSL( Secure Sockets Layer 安全套接層 )或者最近稱為 TLS( Transport Layer Security 傳輸層安全 )的組合,產生了 HTTPS 協議。

由於一些嚴重的安全漏洞,SSL 已經被更健壯的 TLS 替代。由於這個原因,在這篇文章中我們會解析如何通過 TLS 實現你 web 伺服器和客戶端之間的安全連接。

這裡假設你已經安裝並配置好了 Apache web 伺服器。如果還沒有,在進入下一步之前請閱讀下面站點中的文章。

安裝 OpenSSL 和一些工具包

首先,確保正在運行 Apache 並且允許 http 和 https 通過防火牆:

# systemctl start http
# systemctl enable http
# firewall-cmd --permanent –-add-service=http
# firewall-cmd --permanent –-add-service=https

然後安裝一些必需的軟體包:

# yum update && yum install openssl mod_nss crypto-utils

重要:請注意如果你想使用 OpenSSL 庫而不是 NSS Network Security Service 網路安全服務 )實現 TLS,你可以在上面的命令中用 mod_ssl 替換 mod_nss(使用哪一個取決於你,但在這篇文章中我們會使用 NSS,因為它更加安全,比如說,它支持最新的加密標準,比如 PKCS #11)。

如果你使用 mod_nss,首先要卸載 mod_ssl,反之如此。

# yum remove mod_ssl

配置 NSS(網路安全服務)

安裝完 mod_nss 之後,會創建默認的配置文件 /etc/httpd/conf.d/nss.conf。你應該確保所有 Listen 和 VirualHost 指令都指向 443 號埠(HTTPS 默認埠):

nss.conf – 配置文件

Listen 443
VirtualHost _default_:443

然後重啟 Apache 並檢查是否載入了 mod_nss 模塊:

# apachectl restart
# httpd -M | grep nss

在 Apache 中檢查 mod_nss 模塊

檢查 Apache 是否載入 mod_nss 模塊

下一步,在 /etc/httpd/conf.d/nss.conf 配置文件中做以下更改:

1、 指定 NSS 資料庫目錄。你可以使用默認的目錄或者新建一個。本文中我們使用默認的:

NSSCertificateDatabase /etc/httpd/alias

2、 通過保存密碼到資料庫目錄中的 /etc/httpd/nss-db-password.conf 文件來避免每次系統啟動時要手動輸入密碼:

NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf

其中 /etc/httpd/nss-db-password.conf 只包含以下一行,其中 mypassword 是後面你為 NSS 資料庫設置的密碼:

internal:mypassword

另外,要設置該文件的許可權和屬主為 0640 和 root:apache:

# chmod 640 /etc/httpd/nss-db-password.conf
# chgrp apache /etc/httpd/nss-db-password.conf

3、 由於 POODLE SSLv3 漏洞,紅帽建議停用 SSL 和 TLSv1.0 之前所有版本的 TLS(更多信息可以查看這裡)。

確保 NSSProtocol 指令的每個實例都類似下面一樣(如果你沒有託管其它虛擬主機,很可能只有一條):

NSSProtocol TLSv1.0,TLSv1.1

4、 由於這是一個自簽名證書,Apache 會拒絕重啟,並不會識別為有效發行人。由於這個原因,對於這種特殊情況我們還需要添加:

NSSEnforceValidCerts off

5、 雖然並不是嚴格要求,為 NSS 資料庫設置一個密碼同樣很重要:

# certutil -W -d /etc/httpd/alias

為 NSS 資料庫設置密碼

為 NSS 資料庫設置密碼

創建一個 Apache SSL 自簽名證書

下一步,我們會創建一個自簽名證書來讓我們的客戶機可以識別伺服器(請注意這個方法對於生產環境並不是最好的選擇;對於生產環境你應該考慮購買第三方可信證書機構驗證的證書,例如 DigiCert)。

我們用 genkey 命令為 box1 創建有效期為 365 天的 NSS 兼容證書。完成這一步後:

# genkey --nss --days 365 box1

選擇 Next:

創建 Apache SSL 密鑰

創建 Apache SSL 密鑰

你可以使用默認的密鑰大小(2048),然後再次選擇 Next:

選擇 Apache SSL 密鑰大小

選擇 Apache SSL 密鑰大小

等待系統生成隨機比特:

生成隨機密鑰比特

生成隨機密鑰比特

為了加快速度,會提示你在控制台輸入隨機字元,正如下面的截圖所示。請注意當沒有從鍵盤接收到輸入時進度條是如何停止的。然後,會讓你選擇:

  1. 是否發送驗證簽名請求(CSR)到一個驗證機構(CA):選擇 No,因為這是一個自簽名證書。
  2. 為證書輸入信息。

最後,會提示你輸入之前給 NSS 證書設置的密碼:

# genkey --nss --days 365 box1

Apache NSS 證書密碼

Apache NSS 證書密碼

需要的話,你可以用以下命令列出現有的證書:

# certutil –L –d /etc/httpd/alias

列出 Apache NSS 證書

列出 Apache NSS 證書

然後通過名字刪除(如果你真的需要刪除的,用你自己的證書名稱替換 box1):

# certutil -d /etc/httpd/alias -D -n "box1"

如果你需要繼續進行的話,請繼續閱讀。

測試 Apache SSL HTTPS 連接

最後,是時候測試到我們伺服器的安全連接了。當你用瀏覽器打開 https://<web 伺服器 IP 或主機名>,你會看到著名的信息 「This connection is untrusted」:

檢查 Apache SSL 連接

檢查 Apache SSL 連接

在上面的情況中,你可以點擊 添加例外 Add Exception 然後 確認安全例外 Confirm Security Exception - 但先不要這麼做。讓我們首先來看看證書看它的信息是否和我們之前輸入的相符(如截圖所示)。

要做到這點,點擊上面的 視圖 View... -> 詳情 Details 選項卡,當你從列表中選擇發行人你應該看到這個:

確認 Apache SSL 證書詳情

確認 Apache SSL 證書詳情

現在你可以繼續,確認例外(限於此次或永久),然後會通過 https 把你帶到你 web 伺服器的 DocumentRoot 目錄,在這裡你可以使用你瀏覽器自帶的開發者工具檢查連接詳情:

在火狐瀏覽器中,你可以通過在屏幕中右擊,然後從上下文菜單中選擇 檢查元素 Inspect Element 啟動開發者工具,尤其要看「 網路 Network 」選項卡:

檢查 Apache HTTPS 連接

檢查 Apache HTTPS 連接

請注意這和之前顯示的在驗證過程中輸入的信息一致。還有一種方式通過使用命令行工具測試連接:

左圖(測試 SSLv3):

# openssl s_client -connect localhost:443 -ssl3

右圖(測試 TLS):

# openssl s_client -connect localhost:443 -tls1

測試 Apache SSL 和 TLS 連接

測試 Apache SSL 和 TLS 連接

參考上面的截圖了解更詳細信息。

總結

我想你已經知道,使用 HTTPS 會增加會在你站點中輸入個人信息的訪客的信任(從用戶名和密碼到任何商業/銀行賬戶信息)。

在那種情況下,你會希望獲得由可信驗證機構簽名的證書,正如我們之前解釋的(步驟和設置需要啟用例外的證書的步驟相同,發送 CSR 到 CA 然後獲得返回的簽名證書);否則,就像我們的例子中一樣使用自簽名證書即可。

要獲取更多關於使用 NSS 的詳情,可以參考關於 mod-nss 的在線幫助。如果你有任何疑問或評論,請告訴我們。

via: http://www.tecmint.com/create-apache-https-self-signed-certificate-using-nss/

作者:Gabriel Cánepa 譯者:ictlyh 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國