HTTPS双向认证机制保证服务器端与客户端能互相验证对方的身份。在银行与金融服务、物联网、企业内部服务或政府服务等涉及隐私信息,或只对特定客户端提供服务的场景中,您可以通过HTTPS双向认证机制保证服务的安全性。
HTTPS单向与双向认证的对比
使用HTTPS单向认证:客户端从服务器端下载服务器端的SSL/TLS证书进行认证,然后建立安全通信通道。服务器端无法认证客户端的身份。
使用HTTPS双向认证:客户端从服务器端下载服务器端的SSL/TLS证书进行认证,同时客户端还需要向服务器端提供自己的SSL/TLS证书进行认证。当双方都认证过对方的身份后,才能建立安全通信通道进行数据传输。通常情况下,服务器端持有根CA证书,而客户端的SSL/TLS证书基于此根CA证书签发,因此服务器端可以认证客户端的身份。使用HTTPS双向认证可以使的服务只对受信客户端开放,有效防止中间人攻击,提升了服务的安全性。
前提条件
已参见配置HTTPS证书以实现加密通信配置HTTPS证书。
已获取根CA证书。您可以从以下几个途径获取:
从阿里云数字证书中心购买证书。具体操作,请参见购买及启用私有CA。
(可选)参照本文中的(可选)步骤一:生成自签名根CA证书步骤生成自签名证书。
(可选)步骤一:生成自签名根CA证书
如果您还未获取根CA证书,请参照以下步骤生成证书。
执行以下命令,创建根CA证书私钥。
openssl genrsa -out ca.key 4096
执行以下命令,创建根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)的安全性。本示例未设置密码。
执行以下命令,创建根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
是私钥。
步骤二:上传证书
登录数字证书管理服务控制台,在左侧导航栏,单击证书应用仓库。
在证书应用仓库页面,单击创建仓库,在创建仓库面板,配置以下参数,然后单击确定。
配置项
说明
仓库名称
自定义仓库名称。
数据来源
选择上传CA证书,表示对通过第三方证书服务商购买并签发的私有证书进行管理。
在证书应用仓库页面,单击上一步创建的目标证书仓库,然后在证书管理页面,单击上传证书。
在CA信息面板,参考下表配置,上传根CA证书文件,然后单击确认并启用。
配置项
说明
名称
为要上传的私有证书自定义名称。
证书文件
填写私有证书文件内容,或者单击该文本框下的上传,选择证书文件。
单击证书右侧的详情,记录证书的Identifier。
步骤三:使用根CA生成客户端证书
执行以下命令,生成客户端证书密钥。
openssl genrsa -out client.key 4096
执行以下命令,生成客户端证书请求文件。
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)的安全性。本示例未设置密码。
执行以下命令,生成客户端证书。
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
ca.crt
与ca.key
对应根CA证书文件与私钥。完成上述操作后,执行
ls
命令,即可在当前目录中看到生成的客户端证书。client.crt client.csr client.key
client.crt
是通过根CA签发的客户端证书文件,client.csr
是证书请求文件,client.key
是客户端私钥。
步骤四:开启双向认证并测试
为HTTPS监听开启双向认证。
执行以下命令编辑AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替换AlbConfig的名称
在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: #...
测试双向认证。
执行以下命令,查看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
记录下
HOSTS
与ADDRESS
部分的值,以便后续步骤使用。执行以下命令,使用本文中生成的客户端证书与私钥访问服务。其中的
demo.alb.ingress.top
与alb-********.alb.aliyuncs.com
请替换为在上一步中得到的值。curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com --cert client.crt --key client.key
预期输出如下,则表明双向认证配置成功:
old
(可选)步骤五:关闭双向认证
执行以下命令编辑AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替换AlbConfig的名称
在caEnabled字段中填入
false
,即可关闭双向认证。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: #... spec: config: #... listeners: - port: 443 protocol: HTTPS caEnabled: false # 修改为false caCertificates: - CertificateId: 0e40dda998174723af39d37fcaf***** certificates: #...
相关文档
如果您需要在监听上使用HTTP/3协议,请参见使用QUIC监听兼容HTTP/3协议。
如果您的Web服务经常面临恶意入侵或需要更高的安全防护,您可以使用ALB WAF增强版实例,请参见使用ALB WAF增强版实例保护服务。