從早期瀏覽器加密外掛到現代根據 SSL/TLS 協定的加密機制,網站安全技術經歷了顯著的發展。如今,SSL/TLS 已成為網站安全的重要根本,其結合對稱式和非對稱式加密,在保障資料傳輸安全性的同時兼顧效能。不同型別的證書,如網域驗證(DV)和延伸驗證(EV),提供不同等級的身份驗證和安全性,滿足不同網站的需求。Let’s Encrypt 的出現降低了網站加密的門檻,但也帶來了新的安全挑戰。理解這些技術的演進和應用,對於構建安全的網站至關重要。
網站加密技術的演進與證書型別解析
在網際網路早期,安全加密技術的發展仍處於初期階段。一個名為 Fortify 的澳洲公司曾推出一款強加密外掛,供使用者安裝於 Netscape 瀏覽器上,使其能夠使用 128 位元加密。然而,由於當時美國法律限制,網站營運者仍無法在伺服器上使用強加密技術。如今,Fortify 的網站仍然存在,但該外掛已無實際用途。
SSL/TLS 工作原理
SSL/TLS 加密連線結合了對稱式與非對稱式加密機制。在實際資料傳輸過程中,為了確保效能,採用對稱式加密;而對稱式加密所需的私鑰則透過非對稱式加密機制進行安全交換。具體步驟如下:
- 首先,建立非對稱式加密連線,使用公開金鑰交換機制。
- 成功建立非對稱式連線後,雙方安全地交換用於對稱式加密的私鑰。
- 之後,所有資料傳輸均採用對稱式加密,以確保高效能的資料傳輸。
商業證書機構與證書型別
要在網站上實作 SSL/TLS,需要安裝安全證書。該證書具有兩個主要功能:
- 包含用於建立非對稱金鑰交換的公開金鑰。
- 可選地驗證網站身份,即進行身份驗證。
市面上有許多證書機構(CA),如 Thawte、Symantec、GoDaddy 和 Let’s Encrypt 等,提供不同等級的證書。以下以 GoDaddy 為例,說明不同證書型別的區別:
- 網域驗證(DV):價格最低,僅驗證網域所有權,適用於只需加密的場合。
- 延伸驗證(EV):最高等級的證書,需經過嚴格身份驗證,曾經在瀏覽器中顯示綠色高保證欄,但現已取消。
延伸驗證證書的有效性
儘管 EV 證書經過嚴格驗證,但其價值仍被質疑。例如,曾有安全研究人員成功為合法公司註冊偽造的 EV 證書。此外,錯誤資訊也可能透過 EV 證書驗證。因此,部分瀏覽器已不再特別標示 EV 證書。
Let’s Encrypt 的影響
Let’s Encrypt 為一非營利組織,旨在推廣網站加密。其特點是免費且自動化取得證書,無需繁瑣的手動操作。然而,這也帶來了潛在的安全問題:惡意使用者可輕易取得證書並建立看似合法的子網域,從而進行網路網路釣魚攻擊。
SSL/TLS 加密技術實作
在探討 SSL/TLS 加密技術之前,瞭解憑證供應商的重要性是至關重要的。選擇合適的憑證供應商需要進行充分的研究,因為即使是大品牌供應商也可能出現問題。幾年前,Google 從 Chrome 的受信任憑證授權單位列表中移除 Symantec,就是因為 Symantec 多次違反行業最佳實踐。
現在,讓我們來看看如何使用 OpenSSL 套件實作 SSL/TLS 加密。
建立金鑰、憑證簽署請求和憑證
無論使用哪種較新的 Linux 發行版,此過程都是相同的。OpenSSL 可能有點難以學習,因為它有很多子命令,每個子命令都有自己的選項和引數。
使用 RSA 金鑰建立自簽憑證
自簽憑證在只需要加密或用於測試目的時非常有用。自簽憑證不涉及身份驗證,因此絕不能在需要使用者信任的伺服器上使用。
假設需要測試新的網站設定,並且不想使用真正的金鑰和憑證。可以使用以下命令建立金鑰和自簽憑證:
openssl req -newkey rsa:2048 -nodes -keyout donnie-domain.key-x509 -days 365 -out donnie-domain.crt
內容解密:
openssl:使用 OpenSSL 並以正常使用者許可權執行。req:管理憑證簽署請求(CSR)的子命令。-newkey rsa:2048:建立一個 2048 位的 RSA 金鑰對。-nodes:不加密私鑰。-keyout donnie-domain.key-x509:建立私鑰並命名為donnie-domain.key-x509,用於自簽憑證。-days 365:憑證的有效期為一年。-out donnie-domain.crt:建立憑證並命名為donnie-domain.crt。
執行此命令後,需要輸入有關業務和伺服器的資訊。建立金鑰和憑證後,需要將它們移動到適當的位置並組態 Web 伺服器以找到它們。
加密私鑰
加密私鑰是一個可選步驟。如果加密私鑰,每次重新啟動 Web 伺服器時都需要輸入私鑰密碼。
openssl rsa -aes256 -in donnie-domain.key-x509 -out donnie-domain-encrypted.key-x509
內容解密:
rsa -aes256:使用 AES256 加密演算法加密 RSA 金鑰。-in donnie-domain.key-x509:輸入未加密的私鑰。-out donnie-domain-encrypted.key-x509:輸出加密後的私鑰。
使用橢圓曲線金鑰建立自簽憑證
RSA 金鑰有其缺點。可以使用橢圓曲線金鑰建立自簽憑證:
openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key.x509
內容解密:
ec:<(openssl ecparam -name secp384r1):使用secp384r1名稱曲線演算法建立一個 384 位的橢圓曲線金鑰。
建立 RSA 金鑰和憑證簽署請求
通常,不會為導向公眾的伺服器使用自簽憑證。需要從商業 CA 取得憑證,以驗證伺服器擁有者的身份。
openssl req --out CSR.csr -new -newkey rsa:2048 -nodes -keyout server-privatekey.key
內容解密:
--out CSR.csr:建立 CSR 並命名為CSR.csr。-new:新的請求。-newkey rsa:2048:建立一個 2048 位的 RSA 金鑰對。-nodes:不加密私鑰。-keyout server-privatekey.key:建立私鑰並命名為server-privatekey.key。
這些步驟展示瞭如何使用 OpenSSL 建立和管理 SSL/TLS 加密所需的金鑰和憑證。正確組態和管理這些元件對於確保 Web 伺服器的安全至關重要。
建立數位憑證與私鑰:技術深度解析
在現代網路安全中,數位憑證與私鑰扮演著至關重要的角色。本文將探討如何使用 OpenSSL 工具建立 RSA 與 EC(橢圓曲線)私鑰及憑證簽署請求(CSR),並介紹如何設定私有憑證授權中心(CA)。
建立 RSA 私鑰與 CSR
RSA 演算法曾經是網路加密的主流選擇,但隨著技術的發展,EC 演算法因其更高的安全性和效率逐漸受到青睞。儘管如此,瞭解 RSA 的使用仍然十分重要。
RSA 私鑰與 CSR 生成
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
內容解密:
req:指示 OpenSSL 生成憑證簽署請求。-new:表示建立新的 CSR。-newkey rsa:2048:生成新的 RSA 私鑰,長度為 2048 位元。-nodes:不對私鑰進行加密,方便使用但降低了安全性。-keyout server.key:指定私鑰輸出的檔案名稱。-out server.csr:指定 CSR 輸出的檔案名稱。
過程中會提示輸入組織資訊和 challenge password。Challenge password 是一個分享秘密,用於日後可能的憑證重新安裝。
建立 EC 私鑰與 CSR
相較於 RSA,EC 提供了更好的安全性和效能。建立 EC 私鑰和 CSR 需要兩個步驟:
Step 1: 生成 EC 私鑰
openssl genpkey -algorithm EC -out eckey.pem -pkeyopt ec_paramgen_curve:P-384 -pkeyopt ec_param_enc:named_curve
內容解密:
genpkey:OpenSSL 生成私鑰的指令。-algorithm EC:指定使用 EC 演算法。-out eckey.pem:輸出私鑰到eckey.pem檔案。-pkeyopt ec_paramgen_curve:P-384:選擇 P-384 曲線,生成 384 位元的 EC 金鑰,提供與 2048 位元 RSA 相當的安全性。-pkeyopt ec_param_enc:named_curve:使用命名曲線編碼。
Step 2: 生成 CSR
openssl req -new -key eckey.pem -out eckey.csr
內容解密:
使用先前生成的 EC 私鑰 eckey.pem 簽署新的 CSR,並輸出到 eckey.csr。
建立內部使用的私有 CA
對於組織內部使用,購買商業憑證可能不切實際或成本過高。建立私有 CA 成為一個可行的替代方案。
Dogtag PKI 簡介
Dogtag PKI 提供了一個更為友好的介面來管理私有 CA,相較於直接使用 OpenSSL,其設定和使用都更加簡便。
設定 Dogtag CA 的前置作業
- 設定 FQDN:確保伺服器具有完全合格的網域名稱(FQDN)。
- DNS 設定:在本地 DNS 伺服器中建立 Dogtag 伺服器的記錄,或在其
/etc/hosts檔案中新增相應條目。
在 AlmaLinux 9 或 Ubuntu 22.04 上安裝 Dogtag 憑證系統
在開始之前,請先準備好兩個 Linux 虛擬機器(VM),其中一個將用於安裝 Dogtag 伺服器,另一個則用於透過桌面環境存取 Dogtag 的網頁介面。
步驟1:設定伺服器虛擬機器的 FQDN
首先,在伺服器虛擬機器上設定一個完整的網域名稱(FQDN)。以 donnie-ca.local 為例,您可以使用以下指令:
sudo hostnamectl set-hostname donnie-ca.local
步驟2:編輯 /etc/hosts 檔案
接下來,編輯 /etc/hosts 檔案,新增一行包含您的虛擬機器 IP 位址和 FQDN 的記錄。例如:
192.168.0.53 donnie-ca.local
步驟3:增加檔案描述符限制
為了避免在執行 Directory Server 安裝程式時出現警告訊息,需要增加系統允許開啟的檔案描述符數量。編輯 /etc/security/limits.conf 檔案,在檔案末尾新增以下兩行:
root hard nofile 4096
root soft nofile 4096
步驟4:重新啟動虛擬機器
重新啟動虛擬機器,以使新的主機名稱和檔案描述符限制生效。
sudo shutdown -r now
步驟5:安裝 LDAP 伺服器和 Dogtag 軟體套件
Dogtag 將其憑證和使用者資訊儲存在 LDAP 資料函式庫中。因此,需要安裝 LDAP 伺服器軟體套件和 Dogtag 軟體套件。
在 AlmaLinux 9 上:
sudo dnf install 389-ds-base pki-ca
在 Ubuntu 22.04 上:
sudo apt install 389-ds-base dogtag-pki
步驟6:建立 LDAP Directory Server (DS) 例項
建立一個名為 instance.inf 的檔案於 root 使用者的家目錄中:
sudo vim /root/instance.inf
檔案內容如下所示,請根據您的需求修改 root_password 和 suffix:
# /root/instance.inf
[general]
config_version = 2
[slapd]
root_password = TurkeyLips
[backend-userroot]
sample_entries = yes
suffix = dc=donnie-ca,dc=local
使用 dscreate 工具根據 instance.inf 檔案建立 Directory Server 例項:
sudo dscreate from-file /root/instance.inf
步驟7:建立憑證授權中心(CA)
執行以下指令以建立 CA:
sudo pkispawn
依照提示進行設定,大部分選項可直接接受預設值。當詢問是否開始安裝時,輸入 Yes。在 Directory Server 部分,輸入之前建立 DS 例項時所使用的密碼。
建立完成後,確保 Dogtag 服務能夠自動啟動:
sudo systemctl enable pki-tomcatd.target
sudo shutdown -r now
步驟8:清理與安全措施
安裝完成後,可以刪除包含密碼的 instance.inf 檔案:
sudo shred -u -z /root/instance.inf
步驟9:開啟防火牆埠
需要在防火牆上開啟 8443/tcp 埠,以便能夠存取 Dogtag 的網頁介面。
在 AlmaLinux 上:
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --reload
在 Ubuntu 上(假設使用 Uncomplicated Firewall):
sudo ufw allow 8443/tcp
存取 Dogtag 網頁介面
- 在另一個具備桌面環境的 Linux 虛擬機器上,編輯
/etc/hosts檔案,新增與伺服器虛擬機器相同的 FQDN 對應記錄。 - 開啟 Firefox 瀏覽器並導航至 Dogtag 控制台,網址格式為
https://您的FQDN:8443。 - 由於使用的是自我簽署憑證,您將收到憑證無效的警告。暫時新增例外規則以繼續。
使用者憑證請求流程
- 使用者使用
openssl建立金鑰和憑證簽署請求(CSR)。 - 使用者在 Dogtag 的 SSL End User Services 頁面提交 CSR 以請求憑證。
- 管理員在 Agent Services 頁面審核並核發憑證。
圖表翻譯:
此圖示說明瞭使用者請求憑證的流程,包括建立 CSR、提交請求以及管理員核發憑證的步驟。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 網站加密技術演進與證書實作
package "安全架構" {
package "網路安全" {
component [防火牆] as firewall
component [WAF] as waf
component [DDoS 防護] as ddos
}
package "身份認證" {
component [OAuth 2.0] as oauth
component [JWT Token] as jwt
component [MFA] as mfa
}
package "資料安全" {
component [加密傳輸 TLS] as tls
component [資料加密] as encrypt
component [金鑰管理] as kms
}
package "監控審計" {
component [日誌收集] as log
component [威脅偵測] as threat
component [合規審計] as audit
}
}
firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成
@enduml
圖表翻譯: 此圖示顯示了使用者如何請求憑證的流程,從建立 CSR 到取得核發的憑證。
將 CA 新增至作業系統與瀏覽器信任儲存區
為了避免使用者收到關於網站使用不受信任憑證的警告,需要將私有的 CA 憑證匯出並匯入至瀏覽器的信任儲存區。
- 從 Dogtag 伺服器匯出 CA 憑證。
- 將匯出的憑證匯入至使用者的瀏覽器信任儲存區中。
如此一來,使用者在存取使用由該 CA 核發的憑證的網站時,便不會再收到關於憑證不受信任的警告訊息。
加強Apache SSL/TLS設定的安全
在安裝網頁伺服器時,預設的設定並不夠安全,因此需要進行強化。其中一個方法是停用較弱的SSL/TLS加密演算法。雖然這裡以Apache為例,但這些原則也適用於其他網頁伺服器。
OpenSSL與Apache網頁伺服器
在1990年代,Netscape的工程師發明瞭SSL協定。第一個發行的版本是SSL版本2(SSLv2),後來由於安全性問題而被SSLv3取代。接著,微軟堅持將下一版本重新命名為傳輸層安全性(TLS)版本1(TLSv1)。目前的版本是TLSv1.3,大多數Linux發行版都支援這個版本。
在Ubuntu上強化Apache SSL/TLS
步驟1:安裝Apache和mod_ssl
首先,在Ubuntu 22.04虛擬機器上安裝Apache:
sudo apt install apache2
這也會安裝mod_ssl套件,其中包含SSL/TLS實作所需的函式庫和設定檔。
步驟2:啟用預設SSL網站和SSL模組
執行以下命令以啟用預設SSL網站和SSL模組:
sudo a2ensite default-ssl.conf
sudo a2enmod ssl
sudo systemctl restart apache2
步驟3:設定掃描器虛擬機器
在第二個Ubuntu虛擬機器上安裝sslscan套件:
sudo apt install sslscan
然後,使用以下命令掃描安裝了Apache的Ubuntu虛擬機器的SSL/TLS設定:
sslscan 192.168.0.3
檢查支援的演算法和協定版本。
步驟4:修改SSL/TLS設定
編輯/etc/apache2/mods-enabled/ssl.conf檔案,將以下行:
SSLProtocol all -SSLv3
修改為:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
然而,根據前文,應修改為停用舊版協定,但務必確認正確的設定。重新啟動Apache服務以套用變更:
sudo systemctl restart apache2
再次掃描虛擬機器以驗證變更。
在RHEL 9/AlmaLinux 9上強化Apache SSL/TLS
步驟1:安裝Apache和mod_ssl
在AlmaLinux 9虛擬機器上安裝Apache和mod_ssl:
sudo dnf install httpd mod_ssl
sudo systemctl enable --now httpd
步驟2:開啟防火牆的443埠
執行以下命令以開啟防火牆的443埠:
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
步驟3:掃描Apache虛擬機器的SSL/TLS設定
從掃描器虛擬機器掃描Apache虛擬機器的SSL/TLS設定:
sslscan 192.168.0.160
步驟4:檢視系統範圍的加密設定
在Apache虛擬機器上,檢視系統範圍的加密設定的狀態:
sudo update-crypto-policies --show
內容解密:
上述程式展示瞭如何強化Apache網頁伺服器的SSL/TLS設定,包括停用舊版協定和使用sslscan工具進行掃描。透過這些步驟,可以顯著提升網頁伺服器的安全性。