對於一些安全性要求較高的情境,例如金融交易、醫學、銀行、線上支付等,傳統的單向認證(僅驗證服務端身份)無法滿足安全需求,伺服器預設信任所有串連到它的用戶端,可能導致中間人攻擊、未授權訪問等安全風險。您可以使用DDoS高防的HTTPS雙向認證功能,為業務提供更高的安全性。雙向認證要求用戶端和服務端在建立串連之前,雙方都需要驗證對方的身份,雙方都通過認證後,才能建立安全通訊通道進行資料轉送。本文介紹如何配置雙向認證。
功能介紹
為什麼要用雙向認證
大部分互連網Web應用,使用者用戶端來源廣泛且無需限制,實現HTTPS加密通訊時僅需要使用單向認證(即用戶端在訪問應用前驗證服務端身份),從而保證使用者串連到的是正確的伺服器。
對於安全性更高的情境或應用,在需要驗證服務端身份的同時,還需要驗證用戶端身份,此時可以使用雙向認證功能,從而保證僅獲得授權的用戶端訪問接入,降低中間人攻擊、未授權訪問等安全風險。
單向認證與雙向認證對比
對比項 | 單向認證 | 雙向認證 |
涉及的認證檔案 | 服務端認證: | |
握手過程 | | |
應用情境
對於安全性要求較高的業務情境,例如金融交易、醫學、銀行、物聯網、線上支付等,在驗證服務端身份的同時,系統也需要驗證用戶端的身份。
若無用戶端身份認證需求,則無需使用雙向認證。
情境樣本
某政府電子政務服務平台,在接入DDoS高防防禦DDoS攻擊時,為了避免攻擊者偽造政務平台網域名稱或通過釣魚網站誘導使用者訪問導致資訊泄露,惡意使用者通過自動化工具爬取政務公開介面等,建議在接入DDoS高防時配置HTTPS雙向認證。
步驟一:建立CA認證並產生用戶端認證
方式一:使用阿里雲簽發的CA認證產生用戶端認證
您可以參考申請簽發私人認證來申請用戶端認證。
購買及啟用私人CA。
說明 私人CA中一個根CA下可以包含多個子CA,只有子CA可用於簽發私人認證(包括服務端認證、用戶端認證)。
使用私人子CA申請用戶端認證。
登入數位憑證管理服務控制台,在左側導覽列,選擇。
在私有CA頁簽,定位到目標子CA,在操作列,單擊申請證書。

在申請證書面板完成認證資訊配置,單擊確認申請。
在本文情境中,認證類型選擇客戶端證書,姓名請填寫該用戶端使用者的唯一標識,其他參數配置可保持預設或根據實際需要進行修改。
提交認證申請後,私人CA認證會立即簽發。簽發後,您可以單擊子CA操作列下的證書列表,查看已簽發的認證資訊。
匯出用戶端認證。
在私有CA頁簽,定位到目標子CA,在操作列,單擊證書列表。
在證書列表頁面,定位到目標私人認證,在操作列,單擊下載。
在認證下載對話方塊,選擇需要下載的認證格式,單擊確認並下載(勾選包含信任鏈結,下載後的認證中將包含完整憑證鏈結)。
本文情境中,認證格式選擇瀏覽器可以識別的PFX格式。
如下圖所示,下載的認證檔案中,包括.pfx尾碼的用戶端認證檔案以及.txt尾碼的用戶端私密金鑰加密密碼。

方式二:使用非阿里雲簽發的CA認證產生用戶端認證
支援自簽名根CA或自簽名子CA認證進行雙向認證,本文以自簽名根CA認證為例為您介紹。
使用OPENSSL產生自簽名根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認證產生用戶端認證。
執行以下命令,產生用戶端認證密鑰。
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用戶端認證檔案。
您可以將用戶端認證檔案下載到本地進行儲存,便於後續發送至用戶端使用。
上傳自簽名根CA認證至阿里雲數位憑證管理服務。
登入數位憑證管理服務控制台。
在左側導覽列,選擇。
在認證應用倉庫頁面,單擊建立倉庫,在建立倉庫面板,配置資料來源為上傳CA認證,然後單擊確定。

在認證應用倉庫頁面,單擊已建立的認證倉庫。
在認證管理頁面,單擊上傳認證,在CA資訊面板,上傳根CA認證檔案root.crt,單擊確認並啟用。
步驟二:將網域名稱接入DDoS高防並開啟雙向認證
登入DDoS高防控制台的網域名稱接入頁面。
在頂部功能表列左上方處,根據DDoS高防產品選擇地區。
DDoS高防(中國內地):選擇中國內地地區。
DDoS高防(非中國內地):選擇非中國內地地區。
在網域名稱接入頁面,單擊添加網站,根據指引完成網域名稱接入。
本文僅描述雙向認證如何開啟,其他配置項,請參見添加網站配置。
在HTTPS協議相關的配置地區,勾選启用双向认证,根據認證來源選擇CA認證。
配置完成後,請複製DDoS高防的CNAME地址。
步驟三:佈建網域名解析
實際業務情境中,建議您使用自有網域名稱,通過CNAME解析的方式將自有網域名稱指向DDoS高防的CNAME地址。
以網域名稱DNS託管在阿里雲Alibaba Cloud DNS為例介紹,當您使用其他DNS服務商的網域名稱解析服務時僅供參考。
登入阿里雲Alibaba Cloud DNS控制台。
在權威網域名稱解析頁面,定位到目標網域名稱,單擊操作列下的解析設定。
在解析設定頁面,定位到要修改的解析記錄,單擊操作列下的修改。
說明 如果要操作的解析記錄不在記錄列表中,您可以單擊添加記錄。
本文情境中,記錄類型配置為CNAME,記錄值配置為DDoS高防的CNAME地址,其他配置項可保持預設值或根據實際情況修改。
單擊確認,等待修改後的解析設定生效。
步驟四:測試HTTPS雙向認證
本文Windows用戶端使用Chrome瀏覽器為例進行測試。
將步驟一中建立的用戶端認證安裝到用戶端。
雙擊已下載的用戶端認證檔案,根據系統認證匯入嚮導提示完成用戶端認證安裝。
在瀏覽器中,輸入https://<自有網域名稱>,在彈出的對話方塊中選擇用於驗證用戶端身份的認證。
重新整理瀏覽器,觀察用戶端是否能正常訪問網域名稱。