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中國

    Linux中國

    捐贈 Let&apos;s Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...