HTTPS雙向認證機制保證伺服器端與用戶端能互相驗證對方的身份。在銀行與金融服務、物聯網、企業內部服務或政府服務等涉及隱私資訊,或只對特定用戶端提供服務的情境中,您可以通過HTTPS雙向認證機制保證服務的安全性。
HTTPS單向與雙向認證的對比
使用HTTPS單向認證:用戶端從伺服器端下載伺服器端的SSL/TLS認證進行認證,然後建立安全通訊通道。伺服器端無法認證用戶端的身份。
使用HTTPS雙向認證:用戶端從伺服器端下載伺服器端的SSL/TLS認證進行認證,同時用戶端還需要向伺服器端提供自己的SSL/TLS認證進行認證。當雙方都認證過對方的身份後,才能建立安全通訊通道進行資料轉送。通常情況下,伺服器端持有根CA認證,而用戶端的SSL/TLS認證基於此根CA認證簽發,因此伺服器端可以認證用戶端的身份。使用HTTPS雙向認證可以使的服務只對受信用戶端開放,有效防止中間人攻擊,提升了服務的安全性。
前提條件
已參見配置HTTPS認證以實現加密通訊配置HTTPS認證。
已擷取根CA認證。您可以從以下幾個途徑擷取:
從阿里雲數位憑證中心購買認證。具體操作,請參見購買及啟用私人CA。
(可選)參照本文中的(可選)步驟一:產生自簽名根CA認證步驟產生自我簽署憑證。
(可選)步驟一:產生自簽名根CA認證
如果您還未擷取根CA認證,請參照以下步驟產生認證。
執行以下命令,建立根CA認證私密金鑰。
openssl genrsa -out ca.key 4096
執行以下命令,建立根CA認證請求檔案。
openssl req -new -out ca.csr -key ca.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 []:
CA認證的相關參數說明如下所示。
參數
是否必填
說明
Country Name
是
國家代碼,通常是兩個字母,比如cn代表中國。
State or Province Name
是
省份或自治區資訊。
Locality Name
是
城市名稱。
Organization Name
是
組織名稱,如公司名稱。
Organizational Unit Name
是
組織單位名稱。
Common Name
否
常用名稱。
Email Address
否
電子郵件地址,可用於聯絡認證的管理員。
A challenge password
否
可設定密碼來增加認證請求(CSR)的安全性。本樣本未設定密碼。
執行以下命令,建立根CA認證。
openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -CAcreateserial -days 3650
完成上述操作後,執行
ls
命令,即可在目前的目錄中看到根憑證私密金鑰和認證。ca.crt ca.csr ca.key
ca.crt
是根CA認證檔案,ca.csr
是認證請求檔案,ca.key
是私密金鑰。
步驟二:上傳認證
登入數位憑證管理服務控制台,在左側導覽列,單擊認證應用倉庫。
在認證應用倉庫頁面,單擊建立倉庫,在建立倉庫面板,配置以下參數,然後單擊確定。
配置項
說明
倉庫名稱
自訂倉庫名稱。
資料來源
選擇上傳CA認證,表示對通過第三方認證服務商購買並簽發的私人認證進行管理。
在認證應用倉庫頁面,單擊上一步建立的目標認證倉庫,然後在認證管理頁面,單擊上傳認證。
在CA資訊面板,參考下表配置,上傳根CA認證檔案,然後單擊確認並啟用。
配置項
說明
名稱
為要上傳的私人認證自訂名稱。
認證檔案
填寫私人認證檔案內容,或者單擊該文字框下的上傳,選擇認證檔案。
單擊認證右側的詳情,記錄認證的Identifier。
步驟三:使用根CA產生用戶端認證
執行以下命令,產生用戶端認證密鑰。
openssl genrsa -out client.key 4096
執行以下命令,產生用戶端認證請求檔案。
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) []:root Email Address []:a.alibaba.com A challenge password []:
CA認證的相關參數說明如下所示。
參數
是否必填
說明
Country Name
是
國家代碼,通常是兩個字母,比如cn代表中國。
State or Province Name
是
省份或自治區資訊。
Locality Name
是
城市名稱。
Organization Name
是
組織名稱,如公司名稱。
Organizational Unit Name
是
組織單位名稱。
Common Name
否
常用名稱。
Email Address
否
電子郵件地址,可用於聯絡認證的管理員。
A challenge password
否
可設定密碼來增加認證請求(CSR)的安全性。本樣本未設定密碼。
執行以下命令,產生用戶端認證。
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
ca.crt
與ca.key
對應根CA認證檔案與私密金鑰。完成上述操作後,執行
ls
命令,即可在目前的目錄中看到產生的用戶端認證。client.crt client.csr client.key
client.crt
是通過根CA簽發的用戶端認證檔案,client.csr
是認證請求檔案,client.key
是用戶端私密金鑰。
步驟四:開啟雙向認證並測試
為HTTPS監聽開啟雙向認證。
執行以下命令編輯AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
在HTTPS監聽中添加
caEnabled
欄位,填入true
,然後添加caCertifates.CertificateId
欄位,並填入在步驟二中擷取的CA根憑證的Identifier。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: #... spec: config: #... listeners: - port: 443 protocol: HTTPS caEnabled: true # 添加caEnabled欄位並填入true caCertificates: - CertificateId: 0e40dda998174723af39d37fcaf***** # 之前步驟中擷取的根CA認證的Identifier certificates: #...
測試雙向認證。
執行以下命令,查看Ingress資訊。
kubectl get ingress
預期輸出:
NAME CLASS HOSTS ADDRESS PORTS AGE https-ingress https-ingressclass demo.alb.ingress.top alb-********.alb.aliyuncs.com 80, 443 83m
記錄下
HOSTS
與ADDRESS
部分的值,以便後續步驟使用。執行以下命令,使用本文中產生的用戶端認證與私密金鑰訪問服務。其中的
demo.alb.ingress.top
與alb-********.alb.aliyuncs.com
請替換為在上一步中得到的值。curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com --cert client.crt --key client.key
預期輸出如下,則表明雙向認證配置成功:
old
(可選)步驟五:關閉雙向認證
執行以下命令編輯AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
在caEnabled欄位中填入
false
,即可關閉雙向認證。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: #... spec: config: #... listeners: - port: 443 protocol: HTTPS caEnabled: false # 修改為false caCertificates: - CertificateId: 0e40dda998174723af39d37fcaf***** certificates: #...
相關文檔
如果您需要在監聽上使用HTTP/3協議,請參見使用QUIC監聽相容HTTP/3協議。
如果您的Web服務經常面臨惡意入侵或需要更高的安全防護,您可以使用ALB WAF增強版執行個體,請參見使用ALB WAF增強版執行個體保護服務。