全部產品
Search
文件中心

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

更新時間:Jun 19, 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 []:

    CA認證的相關參數說明如下所示。

    參數

    是否必填

    說明

    Country Name

    國家代碼,通常是兩個字母,比如cn代表中國。

    State or Province Name

    省份或自治區資訊。

    Locality Name

    城市名稱。

    Organization Name

    組織名稱,如公司名稱。

    Organizational Unit Name

    組織單位名稱。

    Common Name

    常用名稱。

    Email Address

    電子郵件地址,可用於聯絡認證的管理員。

    A challenge password

    可設定密碼來增加認證請求(CSR)的安全性。本樣本未設定密碼。

  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認證檔案,ca.csr是認證請求檔案,ca.key是私密金鑰。

步驟二:上傳認證

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

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

    配置項

    說明

    倉庫名稱

    自訂倉庫名稱。

    資料來源

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

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

  4. CA資訊面板,參考下表配置,上傳根CA認證檔案,然後單擊確認並啟用

    配置項

    說明

    名稱

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

    認證檔案

    填寫私人認證檔案內容,或者單擊該文字框下的上傳,選擇認證檔案。

  5. 單擊認證右側的詳情,記錄認證的Identifier。

步驟三:使用根CA產生用戶端認證

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

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

    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)的安全性。本樣本未設定密碼。

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

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

    ca.crtca.key對應根CA認證檔案與私密金鑰。

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

    client.crt client.csr client.key

    client.crt是通過根CA簽發的用戶端認證檔案,client.csr是認證請求檔案,client.key是用戶端私密金鑰。

步驟四:開啟雙向認證並測試

  1. 為HTTPS監聽開啟雙向認證。

    1. 執行以下命令編輯AlbConfig。

      kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
    2. 在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:
            #...
  2. 測試雙向認證。

    1. 執行以下命令,查看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

      記錄下HOSTSADDRESS部分的值,以便後續步驟使用。

    2. 執行以下命令,使用本文中產生的用戶端認證與私密金鑰訪問服務。其中的demo.alb.ingress.topalb-********.alb.aliyuncs.com請替換為在上一步中得到的值。

      curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com --cert client.crt --key client.key

      預期輸出如下,則表明雙向認證配置成功:

      old

(可選)步驟五:關閉雙向認證

  1. 執行以下命令編輯AlbConfig。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
  2. 在caEnabled欄位中填入false,即可關閉雙向認證。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: #...
    spec:
      config:
        #...
      listeners:
      - port: 443
        protocol: HTTPS
        caEnabled: false # 修改為false
        caCertificates:
        - CertificateId: 0e40dda998174723af39d37fcaf*****
        certificates:
          #...

相關文檔