当您在处理一些关键业务时,HTTPS双向认证通过对通信双方做认证,为您的业务提供更高的安全性。本文指导您如何使用ALB部署HTTPS双向认证。
背景信息
HTTPS单向认证:客户端需要认证服务器端,而服务器端不需要认证客户端。客户端从服务器端下载服务器端公钥证书进行验证,然后建立安全通信通道。
HTTPS双向认证:客户端需要从服务器端下载服务器的公钥证书进行验证,同时还需要把客户端的公钥证书上传到服务器端进行验证,双方都通过认证,才能建立安全通信通道进行数据传输。因此双向认证可以为业务提供更高的安全性。
使用限制
仅标准版和WAF增强版的ALB实例支持双向认证,基础版ALB实例不支持双向认证。
前提条件
您已创建了标准版或WAF增强版的ALB实例。具体操作,请参见创建应用型负载均衡。
说明基础版的ALB实例不支持双向认证。
您已创建专有网络VPC1,具体操作,请参见创建和管理专有网络。
您已在VPC1中创建2台ECS实例。ECS01和ECS02实例作为ALB实例的后端服务器,且ECS01和ECS02实例中部署了应用服务。
关于创建ECS实例,请参见自定义购买实例。
本文ECS01和ECS02部署测试应用示例如下:
您已创建了后端服务器组RS,并添加了ECS01和ECS02作为后端服务器。具体操作,请参见创建和管理服务器组。
您已在证书中心购买并启用子CA证书,且私有子CA的证书剩余数量不为0;或已上传自签名根CA或自签名子根CA证书至证书中心。具体操作,请参见购买及启用私有CA和管理证书应用仓库中的证书。
配置步骤
服务端需要完成购买服务器证书的操作,客户端(用户)需要完成准备客户端证书、导出客户端证书、安装客户端证书的操作。
步骤一:购买服务器证书
您可以从阿里云数字证书管理服务控制台购买、上传服务器证书或者在其他服务商处购买服务器证书。您可以通过浏览器检查服务器发送的证书是否是由自己信赖的中心签发的。
本文以从阿里云数字证书管理服务控制台购买服务器证书为例。关于如何购买服务器证书,请参见购买SSL证书和上传SSL证书。
购买SSL证书时需要绑定域名,请确保您拥有真实可用的域名。
步骤二:准备客户端证书
本文为您介绍两种获取CA证书的方式。您可以通过证书中心购买CA证书并申请客户端证书,也可以上传自签CA证书至证书中心。
方式一:购买客户端证书
登录数字证书管理服务控制台。
在左侧导航栏,单击私有证书。
在私有证书页面,单击私有CA页签,找到目标根CA证书。
单击目标根CA证书前的图标,找到目标私有子CA,在操作列单击申请证书。
在申请证书面板,完成以下证书信息配置,然后单击确认申请。
此处仅列出和本文强相关的配置项。关于申请证书的更多操作,请参见管理私有证书。
参数
说明
证书类型
选择私有证书的证书类型。本文选择客户端证书。
姓名
私有证书主体的通用名称。
本文填写已创建的ALB实例的域名。
有效期
私有证书的有效期。该有效期不能超过您购买的PCA服务的时长。
本文默认30天。
提交证书申请后,证书会立即签发。您可以在目标私有子CA操作列单击证书列表,在证书列表页面查看已签发的证书信息。
方式二:上传自签CA证书
远程登录ECS01,执行以下命令,生成自签名根CA证书。
ALB支持自签名根CA或自签名子CA证书进行双向认证,本文以自签名根CA证书为例为您介绍。
执行以下命令,创建根CA证书私钥。
openssl genrsa -out root.key 4096
执行以下命令,创建根CA证书请求文件。
openssl req -new -out root.csr -key root.key
后续参数请自行填写,示例如下:
说明注意CA证书Common Name需要保证唯一性,不要与服务端证书或者客户端证书的Common Name相同。
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证书。
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
运行结果如下图所示:
执行
ls
命令,可查看到生成的根CA证书root.crt
和根CA证书私钥root.key
。
登录数字证书管理服务控制台。
在左侧导航栏,单击证书应用仓库。
在证书应用仓库页面,单击创建仓库。
在创建仓库面板,配置以下参数,然后单击确定。
配置项
说明
仓库名称
自定义仓库名称。
数据来源
本文选择上传CA证书,表示对通过第三方证书服务商购买并签发的私有证书进行管理。
在证书应用仓库页面,单击目标证书仓库。
在证书管理页面,单击上传证书。
在CA信息面板,参考下表配置,单击确认并启用。
配置项
说明
名称
为要上传的私有证书设置一个名称。
CA文件
本文选择上传根CA证书
root.crt
文件。
步骤三:导出客户端证书
方式一:导出通过控制台购买的客户端证书
如果您已通过控制台购买了客户端证书,并需要通过该客户端证书进行双向认证,请执行以下操作导出客户端证书。
登录数字证书管理服务控制台。
在左侧导航栏,单击私有证书。
在私有证书页面,单击私有CA页签,找到目标根CA证书。
单击目标根CA证书前的图标,找到目标子CA证书,在操作列单击证书列表。
在证书列表页面,找到目标客户端证书,在操作列单击下载,证书格式选择浏览器可以识别的PFX格式。下载的证书文件中,包括
.pfx
后缀的客户端证书文件以及.txt
后缀的客户端私钥加密密码。
方式二:导出通过自签证书生成的客户端证书
如果您已上传自签CA证书至证书中心,并需要自签CA证书生成的客户端证书进行双向认证,请执行以下操作生成客户端证书。
远程登录ECS01,执行以下步骤,生成客户端证书。具体操作,请参见ECS远程连接操作指南。
执行以下命令,生成客户端证书密钥。
执行以下命令,生成客户端证书请求文件。
执行以下命令,生成客户端证书。
执行以下命令,将生成的客户端证书
client.crt
转换为浏览器可以识别的PKCS12文件。按照提示输入设置的客户端私钥加密密码。执行
ls
命令,可查看到生成的client.p12
客户端证书文件。
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 root.crt -CAkey root.key -CAcreateserial -days 3650
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
步骤四:安装客户端证书
将生成的客户端证书安装到客户端。
以Windows系统为例,双击客户端证书,根据系统证书导入向导提示完成客户端证书安装。
步骤五:配置HTTPS双向认证监听
在顶部菜单栏,选择ALB实例所属的地域。
在实例页面,找到目标ALB实例,单击实例ID。
在监听页签,单击创建监听,完成以下配置,然后单击下一步。
此处仅列出和本文强相关的配置项,其他未列出的配置项使用默认值。
参数
说明
选择监听协议
选择监听的协议类型。
本文选择HTTPS。
监听端口
输入用来接收请求并向后端服务器进行请求转发的监听端口,本文输入443。
在配置SSL证书配置向导,选择步骤一购买的服务器证书。
单击修改展开高级配置,开启高级配置中的启用双向认证。
选择CA证书来源为阿里云签发,在选择默认CA证书下拉框中选择步骤二:准备客户端证书购买的CA证书。
选择CA证书来源为非阿里云签发,在选择默认CA证书下拉框中选择步骤二:准备客户端证书上传的自签CA证书。
选择TLS安全策略,然后单击下一步。
在选择服务器组配置向导,选择服务器类型及服务器类型下的后端服务器组RS,查看后端服务器ECS01和ECS02的信息,然后单击下一步。
在配置审核配置向导,确认配置信息,然后单击提交。
步骤六:配置域名解析
在顶部菜单栏,选择ALB实例所属的地域。
选择已创建的ALB实例,复制其对应的DNS名称。
完成以下步骤添加CNAME解析记录。
登录域名解析控制台。
在域名解析页面单击添加域名。
在添加域名对话框中输入您的域名,然后单击确认。
重要这里添加的域名为服务器证书绑定的域名。
您的域名需已完成TXT记录验证。
在目标域名的操作列单击解析设置。
在解析设置页面单击添加记录。
在添加记录面板配置以下信息完成CNAME解析配置,然后单击确认。
配置
说明
记录类型
在下拉列表中选择CNAME。
主机记录
您的域名的前缀。
解析请求来源
选择默认。
记录值
输入域名对应的CNAME地址,即您复制的ALB实例的DNS名称。
TTL
全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。
说明新增CNAME记录实时生效,修改CNAME记录取决于本地DNS缓存的解析记录的TTL到期时间,默认为10分钟。
添加时如遇添加冲突,请换一个解析域名。更多信息请参见解析记录冲突规则。
步骤七:测试HTTPS双向认证
在顶部菜单栏,选择ALB实例所属的地域。
在实例页面,单击目标实例ID,然后单击监听页签,查看健康检查状态。
当健康检查状态列为正常时,表示后端服务器可以正常接收处理ALB的HTTPS监听转发的请求。
在浏览器中,输入
https://domain:port
,在弹出的对话框中选择用于验证客户端身份的证书。刷新浏览器,您可以观察到客户端的请求在ECS01和ECS02服务器之间的转换。