對於一些安全性要求較高的情境,例如金融交易、醫學、銀行、線上支付等,傳統的單向認證(僅驗證服務端身份)無法滿足安全需求,伺服器預設信任所有串連到它的用戶端,可能導致中間人攻擊、未授權訪問等安全風險。您可以使用ALB的HTTPS雙向認證功能,為業務提供更高的安全性。雙向認證要求用戶端和服務端在建立串連之前,雙方都需要驗證對方的身份,雙方都通過認證後,才能建立安全通訊通道進行資料轉送。
功能介紹
為什麼要用雙向認證
大部分互連網Web應用,使用者用戶端來源廣泛且無需限制,實現HTTPS加密通訊時僅需要使用單向認證(即用戶端在訪問應用前驗證服務端身份),從而保證使用者串連到的是正確的伺服器。
對於安全性更高的情境或應用,在需要驗證服務端身份的同時,還需要驗證用戶端身份,此時可以使用雙向認證功能,從而保證僅獲得授權的用戶端訪問接入,降低中間人攻擊、未授權訪問等安全風險。
什麼情境下使用雙向認證
對於安全性要求較高的業務情境,例如金融交易、醫學、銀行、線上支付等,在驗證服務端身份的同時,系統也需要驗證用戶端的身份。
若無用戶端身份認證需求,則無需使用雙向認證。
ALB雙向認證功能使用限制
僅標準版和WAF增強版的ALB執行個體支援雙向認證,基礎版ALB執行個體不支援雙向認證。
僅HTTPS監聽支援雙向認證,QUIC監聽及HTTP監聽均不支援雙向認證。
情境樣本
某企業部署了一套面向客戶的線上交易平台,初期僅採用HTTPS單向認證,但發現部分未經授權的裝置嘗試訪問系統,存在資料泄露和交易篡改風險。此外,隨著業務規模的增長,平台還面臨流量高峰時效能壓力增大的問題。
為解決以上問題,企業決定部署阿里雲ALB並啟用雙向認證。
通過ALB的負載平衡能力,平台能夠高效分發用戶端請求至後端伺服器,確保在高並發情境下依然保持穩定的效能和快速的響應速度。
通過在ALB中啟用雙向認證,可確保所有訪問平台的用戶端必須提供有效用戶端認證才能建立串連,有效阻止未經授權的裝置接入系統,大幅降低資料泄露和交易篡改的風險。
前提條件
本文以從阿里雲數位憑證管理服務控制台購買伺服器憑證為例。
說明購買SSL認證時需要綁定網域名稱,請確保您擁有真實可用的網域名稱。
您已在認證中心購買及啟用子CA認證,且私人子CA的認證剩餘數量不為0;或已上傳自簽名根CA或自簽名子根CA認證至認證中心。
您已建立專用網路VPC1,並在VPC1中建立ECS執行個體2台,且ECS01和ECS02執行個體中部署了應用服務。
本文以Alibaba Cloud Linux 3作業系統為例,使用Nginx配置HTTPS服務。
您已建立ALB執行個體(標準版或WAF增強版)。
您已建立伺服器組,並添加了ECS01和ECS02作為後端伺服器。
如需ALB與後端服務使用HTTPS協議通訊,請在建立伺服器組時選擇後端協議為HTTPS,並確保後端伺服器已部署HTTPS服務。
操作步驟
步驟一:配置用戶端認證
用戶端(使用者)需要完成準備用戶端認證、匯出用戶端認證操作。
本文為您介紹兩種擷取CA認證的方式。您可以通過認證中心購買CA認證並申請用戶端認證,也可以上傳自簽CA認證至認證中心。
1.準備用戶端認證
方式一:申請用戶端認證
您可以參考申請簽發私人認證來申請用戶端認證。
登入數位憑證管理服務控制台。
在左側導覽列,選擇,在PCA認證管理頁面,選擇PCA服務所在地區。
在私有CA頁簽,定位到目標子CA,在操作列,單擊申請證書。

在申請證書面板,參考下表完成認證資訊配置,單擊確認申請。
本文情境中,申請用戶端認證時,憑證類型選擇客戶端證書,並輸入姓名(用於標識該用戶端使用者的唯一標識),申請用戶端認證其他參數配置可保持預設或根據實際需要進行修改。

提交認證申請後,私人CA認證會立即簽發。簽發後,您可以單擊子CA操作列下的證書列表,查看已簽發的認證資訊。
方式二:上傳自簽CA認證
遠程登入ECS01,執行以下命令,產生自簽名根CA認證。
ALB支援自簽名根CA或自簽名子CA認證進行雙向認證,本文以自簽名根CA認證為例為您介紹。
執行以下命令,建立根CA認證私密金鑰。
openssl genrsa -out root.key 4096執行以下命令,建立根CA認證請求檔案。
openssl req -new -out root.csr -key root.key後續參數請自行填寫,樣本如下:
說明注意CA認證Common Name需要保證唯一性,不要與服務端認證或者用戶端認證的Common Name相同。
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****@example.com A challenge password []: An optional company name []:執行以下命令,建立根CA認證。
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650運行結果如下圖所示:

執行
ls命令,可查看到產生的根CA認證root.crt和根CA認證私密金鑰root.key。您可以將這些根CA認證檔案下載到本地進行儲存,便於後續上傳至阿里雲認證中心。
上傳自簽名根CA認證至阿里雲認證中心。
登入數位憑證管理服務控制台。
在左側導覽列,選擇。
在認證應用倉庫頁面,單擊建立倉庫,在建立倉庫面板,配置資料來源為上傳CA認證,然後單擊確定。

在認證應用倉庫頁面,單擊已建立的認證倉庫。
在認證管理頁面,單擊上傳認證,在CA資訊面板,上傳根CA認證檔案
root.crt,單擊確認並啟用。
2.匯出用戶端認證
方式一:匯出通過控制台購買的用戶端認證
如果您已通過控制台購買了用戶端認證,並需要通過該用戶端認證進行雙向認證,請執行以下操作匯出用戶端認證。
在私有CA頁簽,定位到目標子CA,在操作列,單擊證書列表。

在證書列表頁面,定位到目標私人認證,在操作列,單擊下載。
在認證下載對話方塊,選擇需要下載的認證格式,單擊確認並下載(勾選包含信任鏈結,下載後的認證中將包含完整憑證鏈結)。
本文情境中,認證格式選擇瀏覽器可以識別的PFX格式。

如下圖所示,下載的認證檔案中,包括
.pfx尾碼的用戶端認證檔案以及.txt尾碼的用戶端私密金鑰加密密碼。
方式二:匯出通過自簽認證產生的用戶端認證
如果您已上傳自簽CA認證至認證中心,並需要自簽CA認證產生的用戶端認證進行雙向認證,請執行以下操作產生用戶端認證。
遠程登入ECS01,執行以下步驟,產生用戶端認證。
執行以下命令,產生用戶端認證密鑰。
openssl genrsa -out client.key 4096執行以下命令,產生用戶端認證請求檔案。
openssl req -new -out client.csr -key client.key後續參數請自行填寫,樣本如下:
說明注意CA認證Common Name需要保證唯一性,不要與服務端認證、根憑證和其他用戶端認證的Common Name相同。
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) []:client-alb-user Email Address []:username@example.com A challenge password []: An optional company name []:執行以下命令,產生用戶端認證。
openssl x509 -req -in client.csr -out client.crt -CA root.crt -CAkey root.key -CAcreateserial -days 3650運行結果如下圖所示:

執行以下命令,將產生的用戶端認證
client.crt轉換為瀏覽器可以識別的PKCS12檔案。按照提示輸入設定的用戶端私密金鑰加密密碼。openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12執行
ls命令,可查看到產生的client.p12用戶端認證檔案。您可以將用戶端認證檔案下載到本地進行儲存,便於後續發送至用戶端使用。
步驟二:配置HTTPS雙向認證監聽
在應用型負載平衡ALB控制台頂部功能表列選擇ALB執行個體所屬地區,在執行個體頁面,找到目標ALB執行個體,單擊執行個體ID。
在執行個體詳情頁,選擇監聽頁簽,單擊建立監聽,完成以下配置,然後單擊下一步。
本文情境中,選擇監聽協議為HTTPS,監聽連接埠為443,HTTPS監聽其他參數配置可保持預設值或根據實際情況修改。

在設定SSL憑證設定精靈,選擇已購買的伺服器憑證;然後開啟啟用雙向認證,選擇CA認證來源及對應認證;最後選擇TLS安全性原則,單擊下一步。
選擇CA認證來源為阿里雲簽發,在選擇預設CA認證下拉框中選擇步驟一:配置用戶端認證中申請的CA認證。
選擇CA認證來源為非阿里雲簽發,在選擇預設CA認證下拉框中選擇步驟一:配置用戶端認證上傳的自簽CA認證。
圖示以選擇阿里雲簽發CA認證為例,請根據實際情況配置。

在選擇伺服器組設定精靈,選擇伺服器類型及伺服器類型下的後端伺服器組RS,查看後端伺服器ECS01和ECS02的資訊,然後單擊下一步。
在設定審核設定精靈,確認配置資訊,然後單擊提交。
步驟三:佈建網域名解析
實際業務情境中,建議您使用自有網域名稱,通過CNAME解析的方式將自有網域名稱指向ALB執行個體網域名稱。
在應用型負載平衡ALB控制台的左側導覽列,選擇,在執行個體頁面,複製已建立的ALB執行個體的DNS名稱。
執行以下步驟添加CNAME解析記錄。
在網域名稱解析頁面,找到目標自有網域名稱,在操作列單擊解析設定。
說明對於非阿里雲註冊網域名稱,需先添加網域名稱到雲解析控制台,才可以進行網域名稱解析設定。
在解析設定頁面,單擊添加記錄,配置CNAME記錄,然後單擊確定。
本文情境中,記錄類型配置為CNAME,記錄值配置為ALB執行個體的DNS名稱,解析記錄其他參數配置可保持預設值或根據實際情況修改。

步驟四:測試HTTPS雙向認證
本文Windows用戶端使用Chrome瀏覽器為例進行測試。
將已匯出的用戶端認證安裝到用戶端。
雙擊已下載的用戶端認證檔案,根據系統認證匯入嚮導提示完成用戶端認證安裝。
在瀏覽器中,輸入
https://<自有網域名稱>,在彈出的對話方塊中選擇用於驗證用戶端身份的認證。
重新整理瀏覽器,您可以觀察到用戶端的請求在ECS01和ECS02伺服器之間的轉換。


相關文檔
控制台操作文檔
ALB相關資訊:
認證相關資訊:
API文檔
您可以調用以下API,將CaEnabled參數配置為true,以開啟雙向認證。