HTTPS监听通过SSL证书实现加密访问和身份认证。本文介绍在CLB中使用证书的完整流程,包括证书选型与格式准备、创建证书、绑定到HTTPS监听,以及后续的更换与到期续期。
证书选型与准备
认证方式
CLB支持单向认证和双向认证两种模式:
-
单向认证:CLB只需要配置服务器证书。由客户端验证服务器身份。
-
双向认证:CLB需要同时配置服务器证书、CA证书。服务器和客户端互相验证身份。
大多数面向公网的网站只需使用单向认证。仅当您需要校验客户端身份(例如企业内部系统、API调用方鉴权)时,才需要配置双向认证。
证书来源
CLB支持两种来源的证书:
-
阿里云数字证书管理服务:直接选择在阿里云数字证书管理服务中已购买的证书,此方式便于统一管理,并可享受证书到期提醒和一键续期服务。仅支持服务器证书,暂不支持客户端CA证书。
-
第三方签发的证书:上传由其他服务商签发或您自签名的证书,此方式需要您手动上传证书的公钥和私钥文件。支持服务器证书及客户端CA证书。
客户端CA证书只能通过上传证书内容的方式添加,不能从阿里云数字证书管理服务中选择。如果您需要自建CA并签发客户端证书,请参见使用OpenSSL生成CA证书。
证书格式要求
CLB只支持PEM格式的证书。在创建证书前,确保您的证书、证书链和私钥符合以下格式要求。其它格式的证书需要先转换为PEM格式,请参见转换证书格式。
-
支持的证书类型:国际标准证书(RSA)。
-
支持的公钥算法:RSA 1024、RSA 2048、RSA 4096。
-
不支持上传包含
BEGIN DH PARAMETERS字段的PEM文件。HTTPS监听使用的ECDHE算法簇已支持前向保密,无需上传DHE算法簇所需的安全增强参数文件。
公钥证书的格式要求因签发机构而异,请根据您的证书来源查看对应要求:
Root CA机构颁发的证书
如果是通过Root CA机构颁发的证书,您拿到的证书是唯一的一份,不需要额外的证书,配置的站点即可被浏览器等访问设备认为可信。
证书格式必须符合如下要求:
-
以
-----BEGIN CERTIFICATE-----, -----END CERTIFICATE-----开头和结尾。 -
每行64个字符,最后一行长度可以不足64个字符。
-
证书内容不能包含空格。
中级机构颁发的证书
如果是通过中级CA机构颁发的证书,您拿到的证书文件包含多份证书,需要将服务器证书与中级证书合并在一起上传。
证书链格式必须符合如下要求:
-
服务器证书放第一位,中级证书放第二位,中间不能有空行。
-
证书内容不能包含空格。
-
证书之间不能有空行,并且每行64字节。更多信息,请参见RFC1421。
-
符合证书的格式要求。一般情况下,中级机构在颁发证书时会有对应说明,证书要符合证书机构的格式要求。
中级机构颁发的证书链示例如下:
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
RSA私钥格式要求
在上传服务器证书时,您也需要上传证书的私钥。
RSA私钥格式必须符合如下要求:
-
以
-----BEGIN RSA PRIVATE KEY-----, -----END RSA PRIVATE KEY-----开头和结尾,请将这些内容一并上传。 -
字串之间不能有空行,每行64字符,最后一行长度可以不足64字符。更多信息,请参见RFC1421。
如果您的私钥是加密的,例如私钥的开头和结尾是-----BEGIN PRIVATE KEY-----, -----END PRIVATE KEY-----或-----BEGIN ENCRYPTED PRIVATE KEY-----, -----END ENCRYPTED PRIVATE KEY-----,或者私钥中包含Proc-Type: 4,ENCRYPTED,需要先运行以下命令进行转换:
openssl rsa -in old_server_key.pem -out new_server_key.pem
在部分高版本openssl中,openssl rsa默认输出PKCS#8,这将导致转换失败。请使用openssl rsa -in old_server_key.pem -out new_server_key.pem -traditional进行转换。
转换证书格式
如果您的证书不是PEM格式,请使用OpenSSL转换为PEM格式后再上传。
DER转换为PEM
DER格式通常使用在Java平台中,证书文件后缀一般为.der、.cer或者.crt。
-
运行以下命令进行证书转换:
openssl x509 -inform der -in certificate.cer -out certificate.pem -
运行以下命令进行私钥转换:
openssl rsa -inform DER -outform PEM -in privatekey.der -out privatekey.pem
P7B转换为PEM
P7B格式通常使用在Windows Server和Tomcat中。
运行以下命令进行证书转换:
openssl pkcs7 -print_certs -in incertificate.p7b -out outcertificate.cer
PFX转换为PEM
PFX格式通常使用在Windows Server中。
-
运行以下命令提取证书:
openssl pkcs12 -in certname.pfx -nokeys -out cert.pem -
运行以下命令提取私钥:
openssl pkcs12 -in certname.pfx -nocerts -out key.pem -nodes
多域名场景下的证书匹配逻辑
一个HTTPS监听只能配置一个默认证书。如果需要在同一个HTTPS监听上为多个域名分别使用不同的证书,需要通过扩展域名功能实现。
客户端访问时,CLB通过SNI(Server Name Indication)识别请求的域名:优先使用该域名所配置扩展域名上的证书;如果找不到匹配的证书,则使用监听配置的默认证书。
当一个监听使用多张泛域名(通配符)证书时,只有最先配置的那张泛域名证书会自动匹配其名下的所有子域名。之后配置的泛域名证书不会自动匹配,需要为每一个具体的子域名单独添加扩展域名,并指定使用对应的泛域名证书。
例如,您先配置了*.example.com证书,之后又配置了*.test.com证书,则两者的匹配行为不同:
|
客户端访问的域名 |
能否自动匹配到对应证书 |
需要的操作 |
|
|
能。自动匹配 |
无需额外配置 |
|
|
不能。默认不会自动匹配 |
需为 |
使用扩展域名时请注意:
-
仅性能保障型CLB实例支持SNI,即支持配置扩展域名。
-
添加的扩展域名与所选服务器证书中的域名必须一致。
-
扩展域名需要和转发策略配合使用才能生效,且转发策略中配置的域名要与扩展域名一致。
-
一个HTTPS监听默认最多添加3个扩展域名,最大可提升至10个。
扩展域名的配置方法与完整说明,请参见CLB扩展域名。
使用限制
创建证书
控制台
-
完成准备工作:
-
使用阿里云签发的证书:确保已在SSL证书控制台购买或上传所需的服务器证书。
-
使用第三方签发的证书:准备好PEM格式的服务器证书公钥和私钥文件;配置双向认证时,还需准备PEM格式的CA证书公钥文件。
-
-
前往CLB控制台,在左侧导航栏选择,单击创建证书。
-
在创建证书面板,根据证书来源完成配置,然后单击创建。
-
选择阿里云签发证书,从证书列表中选择所需的SSL证书,并选择证书部署地域。
-
选择上传非阿里云签发证书,完成以下配置:
-
证书类型:选择本次要上传的证书类型,页面会根据所选类型显示对应的配置项。
-
选择服务器证书时,上传公钥证书和私钥,并选择证书部署地域。
-
选择CA证书时,上传客户端CA公钥证书(用于双向认证中校验客户端身份),并选择证书部署地域。
-
上传的证书内容均兼容NGINX格式。您可以单击查看样例参考正确格式。
-
-
API
-
调用UploadServerCertificate上传服务器证书。使用阿里云签发的证书时,传入
AliCloudCertificateId指定证书;上传第三方证书时,通过ServerCertificate和PrivateKey传入证书内容和私钥。 -
调用UploadCACertificate上传客户端CA证书,通过
CACertificate传入证书内容。
将证书绑定到HTTPS监听
证书创建完成后,需要绑定到HTTPS监听才会生效。证书在添加HTTPS监听时选择,以下仅列出与证书相关的配置项,完整的监听配置流程请参见添加HTTPS监听。
HTTPS监听在CLB上完成解密,转发到后端服务器时使用HTTP协议而非HTTPS。因此后端服务器需以HTTP协议提供服务,并确保健康检查、后端端口等配置与HTTP协议匹配(例如后端端口通常为80)。
控制台
-
在SSL证书配置向导,选择已创建的服务器证书。
-
可选:单击高级配置右侧的编辑,按需配置双向认证和TLS安全策略。
-
打开启用双向认证开关,选择已上传的CA证书。如果您使用自建CA签发客户端证书,请参见使用OpenSSL生成CA证书。
-
选择TLS安全策略。仅性能保障型实例支持选择TLS安全策略,各策略支持的TLS协议版本与加密套件请参见TLS安全策略。
-
-
按向导提示完成后端服务器、健康检查等配置并提交,监听创建成功后证书即生效。
API
-
调用CreateLoadBalancerHTTPSListener创建HTTPS监听时绑定证书,通过
ServerCertificateId指定服务器证书;配置双向认证时,通过CACertificateId指定CA证书。 -
调用SetLoadBalancerHTTPSListenerAttribute修改已有HTTPS监听绑定的证书。
更换证书
证书即将到期、需要更换签发机构或证书配置有误时,您需要更换证书。CLB提供两种更换方式,请根据影响范围选择。无论使用哪种方式,更换完成后都建议验证证书是否生效。
|
对比项 |
方式一:替换监听证书 |
方式二:通过证书管理替换证书 |
|
影响范围 |
仅当前HTTPS监听的默认证书 |
所有关联该证书的监听和扩展域名 |
|
适用场景 |
只需更换某一个监听的证书,或同时需要调整双向认证、TLS安全策略 |
同一张证书被多个监听或扩展域名使用,需要一次性全部更换 |
|
前提条件 |
无 |
该证书至少已关联一个监听或扩展域名 |
更换证书时,CLB会更新监听的证书配置,过程中可能出现短暂的HTTPS连接中断(约数秒,表现为SSL连接错误),随后自动恢复,建议在业务低峰期执行。如果更换后出现异常,可将监听证书改回原证书进行回滚。
方式一:替换监听证书
控制台
-
前往CLB控制台,单击目标实例ID,在监听页签找到目标HTTPS监听,在操作列单击管理证书。
-
在管理证书面板的选择服务器证书(默认证书)下拉框中选择新的服务器证书;如需同时调整双向认证或TLS安全策略,可在高级配置中修改,然后单击确定。
此方式仅更换监听的默认证书,不会更换扩展域名上的证书。如果该监听配置了扩展域名,请另行更新扩展域名的证书,或改用下面的方式一次性替换证书的所有关联对象。
API
-
调用UploadServerCertificate上传新证书,获取新的证书ID。
-
调用SetLoadBalancerHTTPSListenerAttribute,传入新的
ServerCertificateId更新HTTPS监听的证书。 -
如果该监听配置了扩展域名,还需针对每个扩展域名调用SetDomainExtensionAttribute分别更新其证书。
仅更新监听证书不会同时更新扩展域名上的证书。如果漏掉扩展域名,通过对应域名访问时仍会使用旧证书。
方式二:通过证书管理替换证书
通过证书管理替换证书后,所有关联该证书的监听或扩展域名上的证书也将自动替换。
至少关联了一个监听或者扩展域名的证书才能被替换。
-
前往CLB控制台,在左侧导航栏选择。
-
在证书管理页面,找到需要替换的目标证书,在操作单击替换证书。在替换服务器证书页面完成配置后,单击替换证书。
-
选择创建一个证书并替换。
-
选择阿里云签发证书,在证书列表选择新的证书。
-
选择上传非阿里云签发证书,粘贴新证书的公钥和私钥内容。
-
-
选择使用已有证书替换,在已有证书列表中选择用来替换的服务器证书。
-
-
单击去证书列表查看,在证书管理页面可确认关联的监听和扩展域名已更新新证书。
验证证书是否生效
-
通过浏览器访问站点,查看证书详情中的有效期。建议使用无痕模式,避免缓存影响判断。
-
如果配置了扩展域名,需要对每个域名分别验证,确认各域名返回的都是预期的证书。
证书到期与续期
证书到期后,客户端访问您的站点会提示证书已过期或不安全,因此需要在到期前完成更换。
使用阿里云数字证书管理服务签发的证书时,可享受证书到期提醒和一键续期服务,建议在该服务中及时关注到期通知。
在证书到期前,请先获取新证书(在阿里云数字证书管理服务中续费或重新签发证书,或向第三方签发机构申请新证书),再根据前述章节在CLB中完成证书的更换与验证。
在数字证书管理服务中续费或重新签发证书后,CLB监听上使用的证书不会自动更新,仍需在CLB中执行更换证书操作。
更多信息
配额
|
配额名称 |
描述 |
默认值 |
是否支持申请 |
|
slb_quota_certs_num |
每个地域可上传的服务器证书数量 |
100个 |
|
|
slb_quota_ca_certs_num |
每个地域可上传的客户端CA证书数量 |
100个 |