当您在处理一些关键业务时,HTTPS双向认证通过对通信双方做认证,为您的业务提供更高的安全性。本文指导您如何使用ALB部署HTTPS双向认证。

背景信息

  • HTTPS单向认证:客户端需要认证服务器端,而服务器端不需要认证客户端。客户端从服务器端下载服务器端公钥证书进行验证,然后建立安全通信通道。
  • HTTPS双向认证:客户端需要从服务器端下载服务器的公钥证书进行验证,同时还需要把客户端的公钥证书上传到服务器端进行验证,双方都通过认证,才能建立安全通信通道进行数据传输。因此双向认证可以为业务提供更高的安全性。

使用限制

仅标准版和WAF增强版的ALB实例支持双向认证,基础版ALB实例不支持双向认证。

前提条件

配置步骤

配置步骤
说明 服务端需要完成购买服务器证书的操作,客户端(用户)需要完成准备客户端证书、导出客户端证书、安装客户端证书的操作。

步骤一:购买服务器证书

您可以从阿里云数字证书管理服务控制台购买、上传服务器证书或者在其他服务商处购买服务器证书。您可以通过浏览器检查服务器发送的证书是否是由自己信赖的中心签发的。

本文以从阿里云数字证书管理服务控制台购买服务器证书为例。关于如何购买服务器证书,请参见购买SSL证书上传SSL证书
说明 购买SSL证书时需要绑定域名,请确保您拥有真实可用的域名。

步骤二:准备客户端证书

本文为您介绍两种获取CA证书的方式。您可以通过证书中心购买CA证书并申请客户端证书,也可以上传自签CA证书至证书中心。

方式一:购买客户端证书

  1. 登录数字证书管理服务控制台
  2. 在左侧导航栏,单击私有证书
  3. 私有证书页面,单击私有CA页签,找到目标根CA证书。
  4. 单击目标根CA证书前的icon图标,找到目标私有子CA,在操作列单击申请证书
  5. 申请证书面板,完成以下证书信息配置,然后单击确认申请
    此处仅列出和本文强相关的配置项。关于申请证书的更多操作,请参见管理私有证书
    参数说明
    证书类型选择私有证书的证书类型。本文选择客户端证书
    公用名(CN)私有证书主体的通用名称。客户端证书支持填写用户邮箱地址或URL。

    本文填写已创建的ALB实例的域名。

    有效期限私有证书的有效期。该有效期不能超过您购买的PCA服务的时长。

    本文默认显示30天。

    提交证书申请后,证书会立即签发。您可以在目标私有CA操作列单击证书列表,在证书列表页面查看已签发的证书信息。

方式二:上传自签CA证书

  1. 远程登录ECS01,执行以下命令,生成自签名根CA证书。
    ALB支持自签名根CA或自签名子根CA证书进行双向认证,本文以自签名根CA证书为例为您介绍。
    1. 执行以下命令,创建根CA证书私钥。
      openssl genrsa -out root.key 4096
    2. 执行以下命令,创建根CA证书请求文件。
      openssl req -new -out root.csr -key root.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 []:
    3. 执行以下命令,创建根CA证书。
      openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
      运行结果如下图所示:创建根证书
    4. 执行以下命令,创建一个存放根CA证书的文件目录。
      mkdir -p /root/ca
    5. 执行以下命令,将根CA证书复制到目标文件目录下。
      cp root.crt /root/ca
      cp root.key /root/ca
    6. 执行以下命令查看生成的根CA证书root.crt和根CA证书私钥root.key
      cd /root/ca
      ls
      运行结果如下图所示:客户端证书
  2. 在本地打开命令行窗口,执行以下命令导出步骤1生成的根CA证书文件至本地文件夹。本文以Windows客户端为例。
    scp root@IPaddress:/root/ca/root.crt  /C:/Users/test    //IPaddress是生成根CA证书的服务器的IP地址
    scp root@IPaddress:/root/ca/root.key  /C:/Users/test    //IPaddress是生成根CA证书的服务器的IP地址
    根据提示输入生成根CA证书的服务器的密码。
  3. 登录数字证书管理服务控制台
  4. 在左侧导航栏,单击证书应用仓库
  5. 证书应用仓库页面,单击创建仓库
  6. 创建仓库面板,配置以下参数,然后单击确定
    配置项说明
    仓库名称自定义仓库名称。
    数据来源本文选择上传证书,表示对通过第三方证书服务商购买并签发的私有证书进行管理。
  7. 证书应用仓库页面,单击目标证书仓库。
  8. 证书管理页面,单击上传证书
  9. CA信息面板,参考下表配置,单击确认并启用
    配置项说明
    名称为要上传的私有证书设置一个名称。
    证书文件填写私有证书文件内容的PEM编码。

    您可以使用文本编辑工具打开PEM或者CRT格式的私有证书文件,复制其中的内容并粘贴到该文本框,或者单击该文本框下的上传,并选择存储在本地计算机的私有证书文件,将文件内容上传到文本框。

    本文选择上传步骤2导出的根CA证书root.crt文件。

    证书私钥填写私有证书私钥内容的PEM编码。

    本文选择上传步骤2导出的根CA证书密钥root.key文件。

步骤三:导出客户端证书

方式一:导出通过控制台购买的客户端证书

如果您已通过控制台购买了客户端证书,并需要通过该客户端证书进行双向认证,请执行以下操作导出客户端证书。

  1. 登录数字证书管理服务控制台
  2. 在左侧导航栏,单击私有证书
  3. 私有证书页面,单击私有CA页签,找到目标根CA证书。
  4. 单击目标根CA证书前的icon图标,找到目标子CA证书,在操作列单击证书列表
  5. 证书列表页面,找到目标客户端证书,在操作列单击详情,然后在证书详情面板,选中查看私钥内容
  6. 请输入密码文本框中,设置私钥加密密码,并单击导出
    导出成功后,证书详情面板下方会显示该私有证书的证书内容、证书链内容、私钥内容。
    说明 在导出证书的过程中,您输入的私钥加密密码会被用于加密证书私钥,后续安装私有证书时,需要您使用此处设置的密码对私钥解密,请保存好此密码。
  7. 在本地新建2个TXT文件,分别将证书内容、私钥内容复制粘贴进去,并将证书内容的文件保存为.crt格式,将私钥内容的文件保存为.key格式。重命名客户端证书为client.crt,客户端私钥为client.key
  8. 将客户端证书转换为浏览器可以识别的PKCS12文件。
    1. 远程登录ECS01,具体操作,请参见ECS远程连接操作指南
    2. 执行以下命令创建一个存放客户端证书的文件目录。
      mkdir -p /root/ca/users
    3. 步骤7生成的客户端证书client.crt和私钥client.key上传到users目录下。
    4. 执行以下命令将客户端证书转化为PKCS12文件。
      openssl pkcs12 -export -clcerts -in /root/ca/users/client.crt -inkey /root/ca/users/client.key -out /root/ca/users/client.p12
    5. 按照提示输入步骤6设置的客户端私钥加密密码。
    6. 输入用于导出证书的密码。此密码为客户端证书的保护密码,在安装客户端证书时需要输入该密码。
      运行结果如下图所示:P12
  9. 执行以下命令查看生成的客户端证书。
    cd /root/ca/users
    ls
    运行结果如下图所示:客户端证书
  10. 在本地打开命令行窗口,执行以下命令导出步骤三中生成的客户端证书。
    scp root@IPaddress:/root/ca/users/client.p12 ./          //IPaddress是生成客户端证书的服务器的IP地址
    根据提示输入生成根CA证书的服务器的密码。

方式二:导出通过自签证书生成的客户端证书

如果您已上传自签CA证书至证书中心,并需要自签CA证书生成的客户端证书进行双向认证,请执行以下操作生成客户端证书。

  1. 远程登录ECS01,执行以下步骤,生成客户端证书。具体操作,请参见ECS远程连接操作指南
    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 root.crt -CAkey root.key -CAcreateserial -days 3650
    4. 执行以下命令,将生成的客户端证书client.crt转换为浏览器可以识别的PKCS12文件。
      openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
    5. 按照提示输入设置的客户端私钥加密密码。
    6. 执行以下命令,将根CA证书复制到目标文件的目录下。
      cp client.p12 /root/ca
    7. 执行以下命令查看生成的客户端证书。
      cd /root/ca
      ls
      运行结果如下图所示:客户端证书02
  2. 在本地打开命令行窗口,执行以下命令导出步骤1生成的根CA证书文件至本地文件夹。本文以Windows客户端为例。
    scp root@IPaddress:/root/ca/client.p12  /C:/Users/test    //IPaddress是生成根CA证书的服务器的IP地址
    根据提示输入生成根CA证书的服务器的密码。

步骤四:安装客户端证书

将生成的客户端证书安装到客户端。本文以Microsoft Edge浏览器为例。

在Microsoft Edge浏览器中导入下载的客户端证书。
  1. 打开Microsoft Edge浏览器,选择... > 设置
  2. 在左侧导航栏,单击隐私、搜索和服务页签,然后在安全模块找到管理证书,导入下载的客户端证书。在导入证书时需要输入步骤8导出证书的密码。安装证书

步骤五:配置HTTPS双向认证监听

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例所属的地域。本文选择华东1(杭州)。
  3. 实例页面,找到目标ALB实例,单击实例ID。
  4. 监听页签,单击创建监听,完成以下配置,然后单击下一步
    此处仅列出和本文强相关的配置项,其他未列出的配置项使用默认值。更多信息,请参见添加HTTPS监听
    参数说明
    选择负载均衡协议选择监听的协议类型。

    本文选择HTTPS

    监听端口输入用来接收请求并向后端服务器进行请求转发的监听端口,本文输入443

    通常HTTP协议使用80端口,HTTPS协议使用443端口。

    监听名称输入自定义监听名称。
    高级配置单击修改展开高级配置。
    说明 本文保持默认配置。
    启用HTTP 2.0选择是否开启HTTP 2.0。本文保持默认值,即开启HTTP 2.0。
  5. 配置SSL证书配置向导,选择步骤一购买的服务器证书。
  6. 单击修改展开高级配置,开启高级配置中的启用双向认证
    • 选择CA证书来源为阿里云签发,在选择默认CA证书下拉框中选择步骤二:准备客户端证书购买的CA证书。

      如果没有可选的CA证书,您可以在下拉框中单击购买CA证书创建新证书。更多信息,请参见购买及启用私有CA

    • 选择CA证书来源为非阿里云签发,在选择默认CA证书下拉框中选择步骤二:准备客户端证书上传的自签CA证书。

      如果没有可选的自签名CA证书,您可以在下拉框中单击上传自签CA证书,在证书仓库页面,创建数据来源为上传证书的仓库,然后通过证书应用仓库上传自签名根CA或自签名子根CA证书。更多信息,请参见上传三方私有证书

  7. 单击修改展开高级配置,然后打开启用双向认证的开关,并根据需要选择证书来源。
    本文选择证书来源为阿里云签发,在选择默认CA证书下拉框中选择步骤二购买的子CA证书。
  8. 选择TLS安全策略,然后单击下一步
  9. 选择服务器组配置向导,选择服务器类型服务器类型下的后端服务器组RS,查看后端服务器ECS01和ECS02的信息,然后单击下一步
  10. 配置审核配置向导,确认配置信息,然后单击提交

步骤六:配置域名解析

步骤一中购买的服务器证书的域名通过CNAME域名解析的方式解析到ALB实例的公网服务域名上。
  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例所属的地域。本文选择华东1(杭州)。
  3. 选择已创建的标准版的ALB实例,复制其对应的DNS名称。
  4. 完成以下步骤添加CNAME解析记录。
    1. 登录域名解析控制台
    2. 域名解析页面单击添加域名
    3. 添加域名对话框中输入您的域名,然后单击确定
      重要
      • 这里添加的域名为服务器证书绑定的域名。
      • 您的域名需已完成TXT记录验证。
    4. 在目标域名的操作列单击解析设置
    5. 解析设置页面单击添加记录
    6. 添加记录面板配置以下信息完成CNAME解析配置,然后单击确认
      配置说明
      记录类型在下拉列表中选择CNAME
      主机记录您的域名的前缀。
      解析线路选择默认。
      记录值输入域名对应的CNAME地址,即您复制的ALB实例的DNS名称。
      TTL全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。
      说明
      • 新增CNAME记录实时生效,修改CNAME记录取决于本地DNS缓存的解析记录的TTL到期时间,一般默认为10分钟。
      • 添加时如遇添加冲突,请换一个解析域名。更多信息,请参见解析记录互斥规则

步骤七:测试HTTPS双向认证

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例所属的地域。本文选择华东1(杭州)。
  3. 实例页面,单击目标实例ID,然后单击监听页签,查看健康检查状态。
    健康检查状态列为正常时,表示后端服务器可以正常接收处理ALB的HTTPS监听转发的请求。
  4. 在浏览器中,输入服务器证书绑定的域名,在弹出的对话框中选中用于验证客户端身份的证书,单击确定客户端认证
  5. 刷新浏览器,您可以观察到客户端的请求在ECS01和ECS02服务器之间的转换。
    ECS01
    ECS02