全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:使用HTTPS双向认证提高服务的安全性

更新时间:Jul 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 []:

    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:
          #...

相关文档