HTTPS雙向認證機制保證伺服器端與用戶端能互相驗證對方的身份。在銀行與金融服務、物聯網、企業內部服務或政府服務等涉及大量隱私資訊的情境中,您可以通過HTTPS雙向認證機制保證資訊安全。
HTTPS單向與雙向認證的對比
使用HTTPS單向認證:用戶端從伺服器端下載伺服器端的SSL/TLS認證進行認證,然後建立安全通訊通道。伺服器端無法認證用戶端的身份。
使用HTTPS雙向認證:用戶端從伺服器端下載伺服器端的SSL/TLS認證進行認證,同時用戶端還需要向伺服器端提供自己的SSL/TLS認證進行認證。當雙方都認證過對方的身份後,才能建立安全通訊通道進行資料轉送。通常情況下,伺服器端持有根CA認證,而用戶端的SSL/TLS認證基於此根CA認證簽發,因此伺服器端可以認證用戶端的身份。使用HTTPS雙向認證可以使服務只對受信任的用戶端開放,可以有效防止中間人攻擊,提升了服務的安全性。
前提條件
已參見配置HTTPS認證以實現加密通訊配置HTTPS認證。
已擷取根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 []: An optional company name []:
CA認證的相關參數說明如下所示。
參數
說明
Country Name
(必填)國家代碼,通常是兩個字母,比如cn代表中國。
State or Province Name
(必填)省份/自治區資訊。
Locality Name
(必填)城市名稱。
Organization Name
(必填)組織名稱,如公司名稱。
Organizational Unit Name
(必填)組織單位名稱。
Common Name
(選填)常用名稱。
Email Address
(選填)電子郵件地址,可用於聯絡認證的管理員。
A challenge password
(選填)可設定密碼來增加認證請求(CSR)的安全性。本樣本未設定密碼。
An optional company name
(選填)可選的公司名稱。本樣本未設定。
執行以下命令,建立根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.csr檔案是您的CA認證請求檔案,ca.key是您的私密金鑰。步驟7中,您將會上傳ca.key和ca.crt檔案用來設定自簽的根CA認證。
重要私密金鑰屬于敏感資訊,請不要輕易泄露。
登入數位憑證管理服務控制台,在左側導覽列,單擊認證應用倉庫。
在認證應用倉庫頁面,單擊建立倉庫,在建立倉庫面板,配置以下參數,然後單擊確定。
配置項
說明
倉庫名稱
自訂倉庫名稱。
資料來源
本文選擇上傳認證,表示對通過第三方認證服務商購買並簽發的私人認證進行管理。
在認證應用倉庫頁面,單擊上一步建立的目標認證倉庫,然後在認證管理頁面,單擊上傳認證。
在CA資訊面板,參考下表配置,上傳步驟3建立的CA認證,然後單擊確認並啟用。
配置項
說明
名稱
為要上傳的私人認證自訂名稱。
認證檔案
填寫私人認證檔案內容的PEM編碼。
您可以使用文本編輯工具開啟PEM或者CRT格式的私人認證檔案,複製其中的內容並粘貼到該文字框,或者單擊該文字框下的上傳,並選擇儲存在本機電腦的私人認證檔案,將檔案內容上傳到文字框。
認證私密金鑰
填寫私人認證私密金鑰內容的PEM編碼。
步驟二:產生用戶端認證
用戶端認證您可以在控制台購買,也可以通過自簽的CA來簽發用戶端認證。
本文介紹如何通過步驟一的自簽CA認證簽發用戶端認證,並在建立監聽後,使用自簽用戶端認證和伺服器完成雙向認證。
執行以下命令,產生用戶端認證密鑰。
openssl genrsa -out client.key 4096
執行以下命令,產生用戶端認證請求檔案。
openssl req -new -out client.csr -key client.key
執行以下命令,產生用戶端認證。
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
CA和CAkey指向步驟一建立的根憑證。
完成上述操作後,執行
ls
命令,即可在目前的目錄中看到產生的用戶端認證。client.crt client.csr client.key
步驟三:使用Albconfig建立雙向認證監聽
將步驟一中建立的伺服器憑證Certificates,填寫到Albconfig的Certificates欄位,作為伺服器的預設認證。
登入數位憑證管理服務控制台,在左側導覽列,單擊SSL認證。
在SSL認證頁面,在目標認證的操作欄單擊,然後選擇詳情。
在認證詳情面板,即可查看認證的Certificates。
將步驟一中建立的根憑證Identifier,填寫到Albconfig的CaCertificates對應的CertificateId處。
登入數位憑證管理服務控制台,在左側導覽列,單擊認證應用倉庫。
在認證應用倉庫頁面,單擊目標認證倉庫,然後在認證管理頁面,單擊詳情。
在認證詳情面板,即可查看認證的Identifier。
Albconfig的配置樣本如下:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
name: alb-test
addressType: Intranet
# 您需要至少指定兩個不同可用性區域交換器ID,指定的交換器必須在ALB當前所支援的可用性區域內,且與叢集處於同一VPC。
zoneMappings:
- vSwitchId: vsw-2zednnurkug2xl4******
- vSwitchId: vsw-2zeusdspvojoumx******
listeners:
- port: 443
protocol: HTTPS
caEnabled: true
caCertificates:
- CertificateId: 0e40dda998174723af39d37fcaf*****
certificates:
- CertificateId: 108*****-cn-hangzhou
IsDefault: true
步驟四:測試雙向認證
拷貝以下內容到coffee.yaml檔案,用於通過Ingress部署一個測試服務,並掛載到步驟三建立的監聽上。
apiVersion: apps/v1 kind: Deployment metadata: name: coffee spec: replicas: 2 selector: matchLabels: app: coffee template: metadata: labels: app: coffee spec: containers: - name: coffee image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: coffee-svc spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: coffee type: NodePort --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/listen-ports: | [{"HTTPS": 443}] name: alb-ingress spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com # 該host需要做網域名稱解析。 http: paths: - path: / pathType: Prefix backend: service: name: coffee-svc port: number: 80
執行以下命令,部署測試服務。
kubectl apply -f coffee.yaml
預期輸出:
deployment.apps/coffee created service/coffee-svc created ingress.networking.k8s.io/alb-ingress created
通過步驟二產生的用戶端認證去訪問服務。
登入應用型負載平衡ALB控制台,在頂部功能表列處,選擇已建立的ALB執行個體所在的地區。
在執行個體頁面,單擊目標執行個體。
在執行個體詳情頁面的可用性區域地區,擷取ALB交換器的Elastic IP Address,以備後續使用。
將Elastic IP Address和需要訪問的網域名稱進行Host綁定,在Hosts檔案中添加綁定資訊。
123.XX.XX.XX alb.ingress.alibaba.com
Host綁定完成後,可以通過網域名稱直接存取服務。
# 需將alb.ingress.alibaba.com替換為您自己的網域名稱,且client.crt和client.key需要提供完整的檔案路徑。 curl https://alb.ingress.alibaba.com/ --cert client.crt --key client.key
執行該命令後,您會看到伺服器的響應資料(一個HTML頁面)。
相關文檔
關於更多使用ALB部署HTTPS雙向認證功能,請參見使用HTTPS雙向認證提高服務的安全性。
如果在使用ALB過程中遇到相關報錯或問題,請優先查閱文檔解決。詳細資料,請參見ALB Ingress異常問題排查、ALB Ingress FAQ。