全部產品
Search
文件中心

Container Compute Service:使用HTTPS雙向認證提高服務的安全性

更新時間:Dec 11, 2024

HTTPS雙向認證機制保證伺服器端與用戶端能互相驗證對方的身份。在銀行與金融服務、物聯網、企業內部服務或政府服務等涉及大量隱私資訊的情境中,您可以通過HTTPS雙向認證機制保證資訊安全。

HTTPS單向與雙向認證的對比

  • 使用HTTPS單向認證:用戶端從伺服器端下載伺服器端的SSL/TLS認證進行認證,然後建立安全通訊通道。伺服器端無法認證用戶端的身份。

  • 使用HTTPS雙向認證:用戶端從伺服器端下載伺服器端的SSL/TLS認證進行認證,同時用戶端還需要向伺服器端提供自己的SSL/TLS認證進行認證。當雙方都認證過對方的身份後,才能建立安全通訊通道進行資料轉送。通常情況下,伺服器端持有根CA認證,而用戶端的SSL/TLS認證基於此根CA認證簽發,因此伺服器端可以認證用戶端的身份。使用HTTPS雙向認證可以使服務只對受信任的用戶端開放,可以有效防止中間人攻擊,提升了服務的安全性。

前提條件

(可選)步驟一:產生自簽根CA認證

如果您還未擷取根CA認證,請參照以下步驟產生認證並上傳至阿里雲數位憑證中心。

  1. 執行以下命令,建立根CA認證私密金鑰。

    openssl genrsa -out ca.key 4096
  2. 執行以下命令,建立根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

    (選填)可選的公司名稱。本樣本未設定。

  3. 執行以下命令,建立根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認證。

    重要

    私密金鑰屬于敏感資訊,請不要輕易泄露。

  4. 登入數位憑證管理服務控制台,在左側導覽列,單擊認證應用倉庫

  5. 認證應用倉庫頁面,單擊建立倉庫,在建立倉庫面板,配置以下參數,然後單擊確定

    配置項

    說明

    倉庫名稱

    自訂倉庫名稱。

    資料來源

    本文選擇上傳認證,表示對通過第三方認證服務商購買並簽發的私人認證進行管理。

  6. 認證應用倉庫頁面,單擊上一步建立的目標認證倉庫,然後在認證管理頁面,單擊上傳認證

  7. CA資訊面板,參考下表配置,上傳步驟3建立的CA認證,然後單擊確認並啟用

    配置項

    說明

    名稱

    為要上傳的私人認證自訂名稱。

    認證檔案

    填寫私人認證檔案內容的PEM編碼。

    您可以使用文本編輯工具開啟PEM或者CRT格式的私人認證檔案,複製其中的內容並粘貼到該文字框,或者單擊該文字框下的上傳,並選擇儲存在本機電腦的私人認證檔案,將檔案內容上傳到文字框。

    認證私密金鑰

    填寫私人認證私密金鑰內容的PEM編碼。

步驟二:產生用戶端認證

用戶端認證您可以在控制台購買,也可以通過自簽的CA來簽發用戶端認證。

本文介紹如何通過步驟一的自簽CA認證簽發用戶端認證,並在建立監聽後,使用自簽用戶端認證和伺服器完成雙向認證。

  1. 執行以下命令,產生用戶端認證密鑰。

    openssl genrsa -out client.key 4096
  2. 執行以下命令,產生用戶端認證請求檔案。

    openssl req -new -out client.csr -key client.key
  3. 執行以下命令,產生用戶端認證。

    openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650

    CA和CAkey指向步驟一建立的根憑證。

  4. 完成上述操作後,執行ls命令,即可在目前的目錄中看到產生的用戶端認證。

    client.crt client.csr client.key

步驟三:使用Albconfig建立雙向認證監聽

  1. 步驟一中建立的伺服器憑證Certificates,填寫到Albconfig的Certificates欄位,作為伺服器的預設認證。

    1. 登入數位憑證管理服務控制台,在左側導覽列,單擊SSL認證

    2. SSL認證頁面,在目標認證的操作欄單擊image.png,然後選擇詳情

    3. 認證詳情面板,即可查看認證的Certificates。

  2. 步驟一中建立的根憑證Identifier,填寫到Albconfig的CaCertificates對應的CertificateId處。

    1. 登入數位憑證管理服務控制台,在左側導覽列,單擊認證應用倉庫

    2. 認證應用倉庫頁面,單擊目標認證倉庫,然後在認證管理頁面,單擊詳情

    3. 認證詳情面板,即可查看認證的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

步驟四:測試雙向認證

  1. 拷貝以下內容到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
  2. 執行以下命令,部署測試服務。

    kubectl apply -f coffee.yaml

    預期輸出:

    deployment.apps/coffee created
    service/coffee-svc created
    ingress.networking.k8s.io/alb-ingress created
  3. 通過步驟二產生的用戶端認證去訪問服務。

    1. 登入應用型負載平衡ALB控制台,在頂部功能表列處,選擇已建立的ALB執行個體所在的地區。

    2. 執行個體頁面,單擊目標執行個體。

    3. 執行個體詳情頁面的可用性區域地區,擷取ALB交換器的Elastic IP Address,以備後續使用。

    4. 將Elastic IP Address和需要訪問的網域名稱進行Host綁定,在Hosts檔案中添加綁定資訊。

      123.XX.XX.XX alb.ingress.alibaba.com
    5. Host綁定完成後,可以通過網域名稱直接存取服務。

       # 需將alb.ingress.alibaba.com替換為您自己的網域名稱,且client.crt和client.key需要提供完整的檔案路徑。
      curl https://alb.ingress.alibaba.com/ --cert client.crt --key client.key

      執行該命令後,您會看到伺服器的響應資料(一個HTML頁面)。

相關文檔