網絡型負載均衡NLB(Network Load Balancer )支持大規模SSL卸載功能,您可以在流量入口部署NLB并配置SSL證書和CA證書,TCPSSL雙向認證通過對通信雙方做認證,為您的業務提供更高的安全性。
背景信息
單向認證:客戶端需要認證服務器端,而服務器端不需要認證客戶端。客戶端從服務器端請求服務器端公鑰證書進行驗證,然后建立安全通信通道。
雙向認證:客戶端需要從服務器端請求服務器的公鑰證書進行驗證,同時還需要把客戶端的公鑰證書上傳至服務器端進行驗證,雙方都通過認證,才能建立安全通信通道進行數據傳輸。因此雙向認證可以為業務提供更高的安全性。
前提條件
您已經創建NLB實例。具體操作,請參見創建和管理NLB實例。
您已創建3臺ECS實例。具體操作,請參見自定義購買實例。
ECS01和ECS02實例作為NLB實例的后端服務器,且ECS01和ECS02中部署了2個不同的應用服務。
yum install -y nginx systemctl start nginx.service cd /usr/share/nginx/html/ echo "Hello World ! This is ECS01." > index.html
yum install -y nginx systemctl start nginx.service cd /usr/share/nginx/html/ echo "Hello World ! This is ECS02." > index.html
ECS03實例用于生成自簽的服務器證書和客戶端證書,且ECS03已通過OpenSSL官網下載并安裝了OpenSSL工具(1.1.1及以上版本)。您也可以使用已有的Linux服務器自簽證書,這種情況下無需創建ECS03實例。
您已創建后端協議為TCP的NLB服務器組,且該服務器組添加了后端服務器ECS01和ECS02。本文以ECS01和ECS02的后端端口均設置為80為例。
配置步驟
本文分別提供了兩種獲取服務器證書和CA證書的方式,即證書中心購買和自簽證書。您可以根據需要選擇使用,例如NLB實例支持同時選擇從阿里云購買的服務器證書與自簽的CA證書。
步驟一:準備CA證書
本文為您介紹兩種獲取CA證書的方式。您可以通過證書中心購買CA證書并申請客戶端證書和服務端證書,也可以上傳自簽CA證書至證書中心。
方式一:購買CA證書
登錄數字證書管理服務控制臺。
在左側導航欄,單擊私有證書。
在私有證書頁面,單擊私有CA頁簽,找到目標根CA證書。
關于如何購買目標根CA證書,請參見購買及啟用私有CA。
單擊目標根CA證書前的圖標,找到目標私有子CA,在操作列單擊申請證書。
在申請證書面板,完成以下證書信息配置,然后單擊確認申請。
此處僅列出和本文強相關的配置項。更多信息,請參見管理私有證書。
參數
說明
證書類型
選擇私有證書的證書類型。本文選擇客戶端證書。
公用名(CN)
私有證書主體的通用名稱。客戶端證書支持填寫用戶郵箱地址或URL。
本文填寫已創建的NLB實例的域名。
有效期
私有證書的有效期。該有效期不能超過您購買的PCA服務的時長。
本文默認顯示30天。
提交證書申請后,證書會立即簽發。您可以在目標私有CA操作列單擊證書列表,在證書列表頁面查看已簽發的證書信息,在操作列單擊詳情,在詳情頁。
方式二:上傳自簽CA證書
遠程登錄ECS03,執行以下命令,生成自簽名根CA證書。關于如何登錄ECS,請參見ECS遠程連接操作指南。
NLB支持自簽名根CA或自簽名子根CA證書進行雙向認證,本文以自簽名根CA證書為例為您介紹。
執行以下命令,創建根CA證書私鑰。
sudo openssl genrsa -out root.key 4096
執行以下命令,創建根CA證書請求文件。
sudo openssl req -new -out root.csr -key root.key
后續參數請自行填寫,示例如下:
Country Name (2 letter code) [XX]:cn State or Province Name (full name) []:bj Locality Name (eg, city) [Default City]:bj Organization Name (eg, company) [Default Company Ltd]:alibaba Organizational Unit Name (eg, section) []:test Common Name (eg, your name or your servers hostname) []:root Email Address []:a.alibaba.com A challenge password []: An optional company name []:
重要生成根證書時,除Common Name外,其余參數的值需與生成服務器證書和客戶端證書時參數的值保持一致。建議根證書的Common Name設置為root。
執行以下命令,創建根CA證書。
sudo openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
運行結果如下圖所示:
執行以下命令,創建一個存放根CA證書的文件目錄。
sudo mkdir -p /root/ca
執行以下命令,將根CA證書復制到目標文件目錄下。
sudo cp root.crt /root/ca sudo cp root.key /root/ca
執行以下命令查看生成的根CA證書
root.crt
和根CA證書私鑰root.key
。sudo cd /root/ca ls
運行結果如下圖所示:
在本地打開命令行窗口,執行以下命令導出生成的根CA證書文件至本地文件夾。本文以Windows客戶端為例。
scp root@IPaddress:/root/ca/root.crt /C:/Users/test //IPaddress是生成根CA證書的服務器的IP地址 scp root@IPaddress:/root/ca/root.key /C:/Users/test //IPaddress是生成根CA證書的服務器的IP地址
根據提示輸入生成根CA證書的服務器的密碼。
登錄數字證書管理服務控制臺。
在左側導航欄,單擊證書應用倉庫。
在證書應用倉庫頁面,單擊創建倉庫。
在創建倉庫面板,配置以下參數,然后單擊確定。
配置項
說明
倉庫名稱
自定義倉庫名稱。
數據來源
本文選擇上傳CA證書,表示對通過第三方證書服務商購買并簽發的私有CA證書進行管理。
在證書應用倉庫頁面,單擊目標證書倉庫。
在證書管理頁面,單擊上傳證書。
在CA信息面板,參考下表配置,單擊確認并啟用。
步驟二:準備服務器證書
您可以通過瀏覽器檢查服務器發送的證書是否是由自己信賴的中心簽發的。本文為您介紹兩種獲取服務器證書的方式。您可以通過證書中心購買服務器證書,也可以上傳自簽服務器證書至證書中心。
方式一:購買服務器證書
您可以從阿里云數字證書管理服務控制臺購買服務器證書或者向其他服務商處購買。關于如何購買服務器證書,請參見購買SSL證書。
方式二:自簽服務器證書
遠程登錄ECS03,執行以下命令,生成自簽名服務器證書。生成自簽名服務器證書時,請確保ECS03已保存CA證書,本文中CA證書文件為
root.crt
和root.key
。執行以下命令,生成服務器端證書私鑰。
sudo openssl genrsa -out server.key 4096
執行以下命令,生成服務器證書請求文件。
sudo openssl req -new -out server.csr -key server.key
后續參數請自行填寫,示例如下:
Country Name (2 letter code) [XX]:cn State or Province Name (full name) []:bj Locality Name (eg, city) [Default City]:bj Organization Name (eg, company) [Default Company Ltd]:alibaba Organizational Unit Name (eg, section) []:test Common Name (eg, your name or your servers hostname) []:www.example.com Email Address []:a.alibaba.com A challenge password []: An optional company name []:
重要生成服務器證書時,Common Name需輸入服務器證書綁定的域名,請確保該域名真實可用。其余參數與生成根證書和客戶端證書時參數的值保持一致。
本文NLB實例通過DNS解析的自定義域名
www.example.com
對外提供服務,Common Name輸入DNS解析的自定義域名www.example.com
。執行以下命令,生成服務器端公鑰證書。
sudo openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650
運行結果如下圖所示:
執行以下命令,創建一個存放服務器證書的文件目錄。
sudo mkdir -p /root/ssl
執行以下命令,將服務器證書復制到目標文件目錄下。
sudo cp server.crt /root/ssl sudo cp server.key /root/ssl
執行以下命令查看生成的服務器證書
server.crt
和服務器證書私鑰server.key
。sudo cd /root/ssl ls
運行結果如下圖所示:
以Windows客戶端為例說明。打開Windows客戶端的命令行窗口,執行以下命令導出步驟1生成的服務器證書文件至本地文件夾。
scp root@IPaddress:/root/ssl/server.crt /C:/Users/test //IPaddress是生成根CA證書的服務器的IP地址 scp root@IPaddress:/root/ssl/server.key /C:/Users/test //IPaddress是生成根CA證書的服務器的IP地址
登錄數字證書管理服務控制臺。
在左側導航欄,單擊SSL 證書。
在SSL證書頁面的上傳證書頁簽,單擊上傳證書。
在上傳證書面板,完成以下參數的配置,單擊確定。
更多信息,請參見上傳和共享SSL證書。
參數
說明
證書標準
本文選擇國際標準。
證書名稱
為要上傳的證書設置一個名稱。
證書文件
填寫證書文件內容的PEM編碼。
您可以使用文本編輯工具打開PEM或者CRT格式的證書文件,復制其中的內容并粘貼到該文本框,或者單擊該文本框下的上傳,并選擇存儲在本地計算機的證書文件,將文件內容上傳到文本框。
本文選擇上傳導出的服務器證書
server.crt
文件。證書私鑰
填寫證書私鑰內容的PEM編碼。
您可以使用文本編輯工具打開KEY格式的證書私鑰文件,復制其中的內容并粘貼到該文本框,或者單擊該文本框下的上傳并選擇存儲在本地計算機的證書私鑰文件,將文件內容上傳到文本框。
本文選擇上傳導出的服務器證書私鑰
server.key
文件。證書鏈
證書鏈編碼。本文不做配置。
步驟三:準備客戶端證書
您可以根據實際情況選擇以下一種方式準備客戶端證書。
方式一:導出通過控制臺購買的客戶端證書
登錄數字證書管理服務控制臺。
在左側導航欄,單擊私有證書。
在私有證書頁面,單擊私有CA頁簽,找到目標根CA證書。
關于如何購買目標根CA證書,請參見購買及啟用私有CA。
單擊目標根CA證書前的圖標,找到目標子CA證書,在操作列單擊證書列表。
在證書列表頁面,定位到目標私有證書,在操作列,單擊下載。
說明如果您申請的是合規CA證書,且私鑰算法為SM2,密鑰容器為USBKey,則該私有證書不支持下載。
在證書下載對話框,選擇需要下載的證書格式,單擊確認并下載。本文選擇CRT格式,下載完成后,客戶端證書為
client.crt
,客戶端私鑰為client.key
。將客戶端證書轉換為瀏覽器可以識別的PKCS12文件。
遠程登錄ECS03,具體操作,請參見ECS遠程連接操作指南。
執行以下命令創建一個存放客戶端證書的文件目錄。
sudo mkdir -p /root/ca/users
將生成的客戶端證書
client.crt
和私鑰client.key
上傳到users目錄下。執行以下命令將客戶端證書轉化為PKCS12文件。
sudo openssl pkcs12 -export -clcerts -in /root/ca/users/client.crt -inkey /root/ca/users/client.key -out /root/ca/users/client.p12
按照提示設置客戶端私鑰加密密碼。
輸入用于導出證書的密碼。此密碼為客戶端證書的保護密碼,在安裝客戶端證書時需要輸入該密碼。
運行結果如下圖所示:
執行以下命令查看生成的客戶端證書。
sudo cd /root/ca/users ls
運行結果如下圖所示:
以Windows客戶端為例說明。在本地打開命令行窗口,執行以下命令導出生成的客戶端證書。
scp root@IPaddress:/root/ca/users/client.p12 ./ //IPaddress是生成客戶端證書的服務器的IP地址
方式二:導出通過自簽證書生成的客戶端證書
如果您已上傳自簽CA證書至證書中心,并需要自簽CA證書生成的客戶端證書進行雙向認證,請執行以下操作生成客戶端證書。
遠程登錄ECS03,執行以下步驟,生成客戶端證書。關于如何登錄ECS,請參見ECS遠程連接操作指南。
執行以下命令,生成客戶端證書密鑰。
sudo openssl genrsa -out client.key 4096
執行以下命令,生成客戶端證書請求文件。
sudo openssl req -new -out client.csr -key client.key
后續參數請自行填寫,示例如下:
Country Name (2 letter code) [XX]:cn State or Province Name (full name) []:bj Locality Name (eg, city) [Default City]:bj Organization Name (eg, company) [Default Company Ltd]:alibaba Organizational Unit Name (eg, section) []:test Common Name (eg, your name or your servers hostname) []:XX.XX.XX.XX //XX.XX.XX.XX替換為客戶端IP地址 Email Address []:a.alibaba.com A challenge password []: An optional company name []:
重要生成客戶端證書時,除Common Name外,其余參數的值需與生成根證書和服務器證書時參數的值保持一致。建議客戶端證書的Common Name設置為客戶端IP。
執行以下命令,生成客戶端證書。
sudo openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650
執行以下命令,將生成的客戶端證書
client.crt
轉換為瀏覽器可以識別的PKCS12文件。sudo openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
按照提示輸入設置的客戶端私鑰加密密碼。
執行以下命令,將根CA證書復制到目標文件的目錄下。
sudo cp client.p12 /root/ca
執行以下命令查看生成的客戶端證書。
sudo cd /root/ca ls
運行結果如下圖所示:
以Windows客戶端為例說明。在本地打開命令行窗口,執行以下命令導出客戶端證書至本地文件夾。
scp root@IPaddress:/root/ca/client.p12 /C:/Users/test //IPaddress是生成根CA證書的服務器的IP地址
根據提示輸入生成根CA證書的服務器的密碼。
步驟四:安裝客戶端證書
將生成的客戶端證書安裝至客戶端,本文以Windows客戶端和Linux客戶端為例進行說明。
Windows客戶端
在Microsoft Edge瀏覽器中導入下載的客戶端證書。
打開Microsoft Edge瀏覽器,選擇 。
在左側導航欄,單擊隱私、搜索和服務頁簽,然后在安全性模塊找到并單擊管理證書,導入下載的PKCS12文件。在導入證書時需要輸入步驟三:導出客戶端證書導出證書的密碼。
Linux客戶端
使用ECS03服務器生成客戶端證書后,ECS03服務器的目錄中已存在該客戶端證書。如需在其他Linux客戶端驗證NLB雙向認證,請先執行以下步驟,將雙向認證相關證書復制至該Linux客戶端目錄下。
登錄一臺Linux客戶端。執行以下命令,將客戶端證書、服務器證書和根證書復制至某個目錄下。
創建文件夾。
sudo mkdir /root/ca
修改目錄權限。
sudo chmod 700 /root/ca
分別執行以下命令,復制證書文件至當前Linux客戶端目錄下。
以下路徑僅供參考,請以實際操作路徑為準。
sudo scp home@IPaddress:/root/ca/client.crt /root/ca //IPaddress是生成客戶端證書的服務器的IP地址 sudo scp home@IPaddress:/root/ca/root.crt /root/ca //IPaddress是生成根證書的服務器的IP地址 sudo scp home@IPaddress:/root/ca/root.key /root/ca //IPaddress是生成根證書的服務器的IP地址 sudo scp home@IPaddress:/root/ssl/server.crt /root/ca //IPaddress是生成服務器證書的服務器的IP地址 sudo scp home@IPaddress:/root/ssl/server.crt /root/ca //IPaddress是生成服務器證書的服務器的IP地址
步驟五:配置TCPSSL監聽的雙向認證
- 登錄網絡型負載均衡NLB控制臺。
在頂部菜單欄,選擇NLB實例的所屬地域。
在實例頁面,找到目標實例,在操作列單擊創建監聽。
在配置監聽配置向導,完成以下參數的配置,然后單擊下一步。
此處僅列出和本文強相關的配置項,其他未列出的配置項使用默認值。更多信息,請參見添加TCPSSL監聽。
配置
說明
選擇監聽協議
選擇一種監聽協議。本文選擇TCPSSL。
監聽端口
輸入用來接收請求并向后端服務器進行請求轉發的監聽端口。本文輸入443。
在配置SSL證書配置向導,在選擇服務器證書下拉框中選擇步驟二:準備服務器證書購買或上傳的服務器證書。
開啟高級配置中的啟用雙向認證開關,根據實際情況選擇CA證書來源。
選擇CA證書來源為阿里云簽發,在選擇默認CA證書下拉框中選擇步驟一:準備CA證書購買的CA證書。
選擇CA證書來源為非阿里云簽發,在選擇默認CA證書下拉框中選擇步驟一:準備CA證書上傳的自簽CA證書。
選擇TLS安全策略,然后單擊下一步。
在選擇服務器組配置向導,選擇已創建的服務器組,查看后端服務器ECS01和ECS02的信息,本文端口號均設置為80,然后單擊下一步。
在配置審核配置向導,確認配置信息,單擊提交。
步驟六:驗證TCPSSL雙向認證
Windows客戶端
返回NLB實例頁面,單擊目標NLB實例ID,然后單擊監聽頁簽,查看TCPSSL監聽的健康檢查狀態。
當健康檢查狀態列為正常時,表示后端服務器可以正常接收處理NLB的TCPSSL監聽轉發的請求。
在瀏覽器中輸入
https://服務器證書綁定的域名
命令,例如https://www.example.com
,在彈出的對話框中選中用于驗證客戶端身份的證書,單擊確定。
由于瀏覽器緩存問題,驗證四層負載均衡時,建議您每次使用無痕瀏覽器訪問DNS域名,可以觀察到請求已分發至兩臺ECS。
Linux客戶端
登錄已保存了根證書、服務器證書和客戶端證書的Linux客戶端,執行以下命令驗證NLB雙向認證。
sudo curl --cert /root/ca/client.crt --key /root/ca/client.key --cacert /root/ca/root.crt www.example.com
www.example.com
為NLB實例服務器證書綁定的域名。
收到如下所示的回復報文,則表示客戶端和服務端已完成雙向認證,并將請求分發至兩臺ECS。