CY24蚂蚁集团网站新根证书升级说明
1. 背景介绍
蚂蚁集团网站使用HTTPS来保证通信安全,软件或系统在调用蚂蚁集团提供的系统服务或API过程中会使用数字证书权威认证机构(CA)的根证书来校验蚂蚁集团网站服务器身份的真实性。
由于Mozilla更新了其根证书信任策略,即对于全球所有CA的可信根证书生成后最少15年更换一次,超过时间的可信根将会逐步被Mozilla停止信任。DigiCert 将逐步停用(G1)旧根体系颁发 TLS/SSL 证书,并开始使用(G2)新根体系颁发 TLS/SSL 证书。
蚂蚁集团网站服务器证书当前通过权威电子认证机构DigiCert签发,根CA为“DigiCert Global Root CA”,蚂蚁集团计划于2024年8月起逐步启用的新服务器证书,由权威电子认证机构DigiCert签发,根CA为“DigiCert Global Root G2”。
为了提升兼容性,在部署新证书时,我们将在服务上增加部署DigiCert Global Root CA根对DigiCert Global Root G2的根交叉认证证书,以保证2024年平滑升级。因此,当前客户端信任根证书库中只要包含DigiCert Global Root G2或DigiCert Global Root CA中任意一个即可(Baltimore CyberTrust Root将不再支持) 。大部分新版操作系统和较新执行环境的默认信任根证书库都已内置上述两个根CA证书,大部分系统无需做特别的配置即可兼容新服务器证书, 如果系统未及时升级请按照文档进行检查处理。
2026年后,客户端信任根证书库必须包含DigiCert Global Root G2。 我们强烈建议检查客户端根证书库是否包含 DigiCert Global Root G2。
2. 新、旧根证书信息
下表列出了DigiCert的3个根证书的基本信息、在常见OS和执行环境默认配置下的兼容性情况:
表1 新老服务器根CA证书的信息
根证书名称 | 根证书文件 | 序列号 | 有效期 | Mozilla不再信任时间 | Windows | Mac | Java | Android | IOS | Firefox | 备注 |
DigiCert Global Root G2 | 33af1e6a711a9a0bb2864b11d09fae5 | 2013年8月1日-2038年1月15日 | 2029年4月15日 | XP SP3+ | OS X 10.10+ | 1.8.0_131 + | 5.0+ | iOS 7.0+ | 32+ | 这是新证书的根CA,如果出现不能兼容新证书的场景,添加这个根证书到执行环境的信任库。 | |
DigiCert Global Root CA | 83be056904246b1a1756ac95991c74a | 2006年11月10日-2031年11月10日 | 2026年4月15日 | XP SP3+ | OS X 10.6+ | 1.4.2_17+ | 1.1+ | iOS 4.0+ | 2.0+ | 这是新证书的兼容性根。 | |
Baltimore CyberTrust Root | 20000b9 | 2000年5月13日-2025年5月13日 | 2025年4月15日 | XP+ | 1.4.2+ | 2.0+ | iOS 5+ | 1.0+ | 未来不再支持 |
注:
- macOS: 根据目前能从Apple官网查到“macOS中可用的受信任根证书列表”。
- Linux:Linux系统信任根证书的保存位置因发行版(Distribution)不同有所差异,大部分Linux发行版使用目录"/etc/ssl/certs/"或文件"/etc/pki/tls/certs/ca-bundle.crt"来包含系统信任根证书库。
- 数据主要来源于DigiCert官方发布的兼容性列表:Compatibility of DigiCert Trusted Root Certificates
3. 需要您做什么
需要您确认贵司业务系统中与蚂蚁集团网站系统交互的系统或组件可兼容新服务器证书,并:
- 如果验证结果为可兼容,贵司不需要做其他任何事情。
- 如果不能兼容,您需要对贵司系统进行必要的修正。
建议您按照“如何验证”章节的方法尽快完成验证。
如果验证结果为不兼容,贵司需要修改相关的系统实现或配置,最晚应于2024年8月7日前修正,否则贵司业务系统与蚂蚁集团网站/服务之间将不能正常进行HTTPS通讯,将影响业务正常运行。
在验证和修正过程中遇到问题,您可以通过文档下方的联系方式,联系蚂蚁集团技术支持服务获取支持。
4. 如何验证
您可通过蚂蚁集团提供的测试域名来验证贵司系统是否可兼容新的服务器证书。强烈建议您在生产环境同样去进行测试,来确保您的生产环境同样支持新证书。
如果贵司系统可正常获得蚂蚁集团系统的响应,说明是兼容的。
如果贵司系统不能正常获得蚂蚁集团系统的响应,很有可能是不兼容的。
如果验证结果为不兼容,您需要:
- 查看贵司系统所使用的TLS/SSL库的使用文档,确保新服务器证书的根CA包含在执行环境的信任根证书库中。我们总结了常见环境可能的修正方法于本文档第6章,您可参考。
- 完成上述步骤后,重新验证。
只包含 DigiCert Global Root G2 的验证环境
为了帮助验证您的环境是否已经支持 DigiCert Global Root G2 根证书 (而不是通过DigiCert Global Root CA 实现兼容),我们准备的独立域名用于验证您的环境,新域名测试只包含DigiCert Global Root G2 根证书。
域名 | 公网IP | 启用时间 |
47.235.24.194 47.235.24.195 47.235.21.35 47.235.21.45 | 2024年6月15日 |
注:
- 如果您的IDC出口有白名单设置,请确保测试域名对应的公网IP在您的白名单列表中
- 生产验证环境可以使用同样的域名进行测试,该域名仅支持网络连通性测试,不支持业务接口的功能测试
- 应使贵司系统同时兼容新老两套服务器证书
5. 常见问题
Q1:什么是服务器证书?
A:服务器证书通常又称为“SSL证书”、“域名证书”、"SSL Certificate"、"Server Certificate"、"SSL Web Server Certificates"、"TLS/SSL server certificate"。通常由权威机构颁发的证书,用于对网站进行身份鉴定,并使客户端与网站之间通过TLS/SSL协议建立起安全传输通道,HTTPS协议是最常见的基于TLS/SSL的应用层协议之一。
Q2:什么是根证书?
A:根证书用于标识权威机构的身份,是权威机构用自己的身份私钥对自己的身份公钥签发的数字证书。根证书需要经不易被篡改的通道分发;浏览器、操作系统、TLS/SSL开发库通常随软件发行包预置其信任的权威机构的根证书。
Q3:如何确认是否可兼容新证书?
A:建议按照第4章介绍的方法进行验证;如果您对TLS/SSL技术和应用非常精通,也可仅通过检查相关的系统代码和配置,来判断是否可兼容新证书。
Q4:请问应在何时安装新的根CA证书?
A:必须在2024年8月7日之前完成,因为自8月7日起,我们将在生产正式环境小量灰度应用新证书,以检验合作伙伴系统的准备情况。
Q5:修正过程中有哪些注意事项?
A:必须以新增安装根CA证书的方式(即应该同时兼容老证书和新证书),且必须在2024年8月7日前完成。因为我们将以灰度方式逐步启用新证书,在灰度期间,生产正式环境中将有一部分服务器使用的是新证书,一部分服务器使用的是老证书。
Q6:本次升级涉及的网站/域名有哪些?
A:本次服务器证书升级以证书为操作控制粒度,通过X.509 V3的Subject Alternative Name(SAN,中文名:主题备用名称)扩展使一个证书可适用于多个域名。本次升级包含三个证书,证书主题通用名(Subject CommonName)分别为:"*.alipay.com"、"render.alipay.com"、"*.alipayobjects.com"。您可以通过下述方法来协助确认:
可以使用openssl命令行工具,快速确认某个域名是否在本次升级范围,命令行格式为:
openssl s_client -connect real_domain_name:443 -servername real_domain_name -showcerts
以域名“www.alipay.com”为例:如下为运行结果截图,可以看到证书的主题CN与上述三个中的第一个相同,说明"www.alipay.com"域名在本次升级范围。
Q7:请问应在何时完成对应验证?如果无法按时完成验证会有什么影响?
A:最迟应在2024年8月7日完成验证。如果贵司系统的实现方式已能兼容新的服务器证书,那么,不会影响贵司的业务;如果贵司系统的实现方式不能兼容新的服务器证书,那么会导致贵司系统与蚂蚁集团相关系统不能正常交互,影响业务顺利进行。
Q8:请问应在何时完成对应修改?
A:如果您的系统经验证是不能兼任新证书的,最迟应在2024年8月7日完成修改。
6. 参考修正方法
6.1 JAVA
6.1.1 不兼容的现象
如果验证时不能正常获得蚂蚁集团系统的响应,并在您的系统中出现如下错误信息,说明不兼容新的证书。
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed...
6.1.2 修正方案
如果您的系统程序是使用Java程序开发,您使用的信任根证书(trustStore)库可能是如下两种情况之一: 一种是使用jre发行包中的cacerts,另一种是使用自主管理的trustStore。
使用jre发行包中的cacerts
cacerts文件是Java环境默认使用的信任根证书库,位于%JAVA_HOME%/lib/security/目录下,cacerts文件本质是一个JKS (Java KeyStore),可使用Java发行包中自带的keytool工具来查看和修改,默认密码为“changeit”,keytool命令行工具在%JAVA_HOME%/bin目录下。 说明:蚂蚁集团所提供Java语言版SDK为这种方式。 如表1所列,正常情况下JDK 1.6.05及以上版本的cacerts应已经包含了DigiCert Global Root CA,JDK 1.8.0 131+及以上版本的cacerts应已经包含了DigiCert Global Root G2。 如果系统实际验证结果为不通过,可以通过如下方法检查执行环境中的cacerts是否包含蚂蚁集团新服务器证书的根CA(表1中前2个根CA之一)。检查方法
- 将cacerts中信息输出为易于阅读的文本形式。命令行下输入如下命令,回车后,输入cacerts的保护密码。
keytool -list -v -keystore %JAVA_HOME%/lib/security/cacerts > cacerts.txt
- 查找其中是否包含特定主题的可信证书。 以DigiCert Global Root G2为例:在上一步中输出的文件中(cacerts.txt)查找是否包含主题(Subject)和签发者(issuer)CN(Common Name)皆为"DigiCert Global Root G2"的trustedCertEntry的项目 。
说明:
- 证书序列号的显示方式一般有两种,一种是带":"的,以两个16进制数一组;一种是不带":"的,与前一种表示方法相比,其数值相同,但是最左边的0会被省略。
- 添加根证书到cacerts。如果没有查找到,您需要添加根CA证书到cacerts。 在命令行下输入如下命令,回车后输入cacerts的保护密码,看到增加成功的提示即说明添加成功。
keytool -keystore $JAVA_HOME$/lib/security/cacerts -importcert -alias CAFriendlyName -file rootca-cert.pem
--注:rootca-cert.pem为PEM格式的根CA证书文件,请使用表1中链接下载PEM格式根证书,CAFriendlyName是计划给此根CA的友好名称/别名,您可以用根证书主题名称代替,这个别名在一个jks中必须唯一。
使用指定的trustStore
如果您的系统程序目前是用指定trustStore的方式,有两种修正方法:
一、修改系统实现代码,改为使用jre自带cacerts的方式;同时检查您的java版本,官方Java发行包自1.4.2版本起都内置了上述新旧服务器证书的兼容根CA。稳妥起见,您可以按前述方法确认都包含。
二、往当前trustStore增加表1中的第一个根CA证书,操作方法与往cacerts中增加相同,只是操作的keystore对象换成您应用系统中使用的。如下示例:
keytool -keystore 您系统使用的jks文件路径 -importcert -alias CAFriendlyName -file rootca-cert.pem
Java中一般使用如下几种方式来指定trustStore:
1. 代码中设定,示例代码:
System.setProperty("javax.net.ssl.trustStore", "<same .jks file>");
2. 设置系统变量javax.net.ssl.trustStore
3. 修改JVM启动选项:"-Djavax.net.ssl.trustStore=-Djavax.net.ssl.trustStore=<some .jks file>"
参考资料: Keytool:https://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html
6.2 PHP
6.2.1 不兼容的现象
如果验证时不能正常获得蚂蚁集团系统的响应,并在您的系统中出现类似如下的错误信息,说明不兼容。
"cURL error 60: SSL certificate: unable to get local issuer certificate."
或
"CURLE_SSL_CACERT (60) peer certificate cannot be authenticated with known CA certificates."
6.2.2 修正方案
使用操作系统信任根证书库的情况
PHP一般使用系统中所安装的Openssl的信任根证书库,Openssl的信任根证书库根据操作系统版本的不同所在位置不同,可能的情况以及添加可信根CA证书的方法如下:
操作系统类型 | 信任根证书库位置 | 添加可信根CA证书的方法 |
Linux | /etc/ssl/certs/ | 拷贝根CA的证书文件(DigiCertGlobalRootG2.pem)到目录下 |
Linux | /etc/pki/tls/certs/ca-bundle.crt | cat DigiCertGlobalRootG2.pem >> /etc/pki/tls/certs/ca-bundle.crt |
Linux | /etc/ssl/certs/ca-bundle.crt | cat DigiCertGlobalRootG2.pem >> /etc/ssl/certs/ca-bundle.crt |
Linux | /etc/pki/tls/certs/ca-bundle.trust.crt | cat DigiCertGlobalRootG2.pem >> /etc/pki/tls/certs/ca-bundle.trust.crt |
Unix | /System/Library/OpenSSL/ | 拷贝根CA的证书文件(DigiCertGlobalRootG2.pem)到目录下 |
使用自主管理信任根证书库的情况
PHP代码中可能设定使用自主管理的根CA证书文件,典型代码如下:
curl_setopt(pCurl, CURLOPT_CAINFO, "./rootca.pem");
修复方法:将表1中新服务器证书的根CA证书(DigiCertGlobalRootG2.pem)添加到rootca.pem。可用cat操作命令:
cat DigiCertGlobalRootG2.pem >> ./rootca.pem
6.3 .NET
.NET环境一般默认使用Windows操作系统维护的受信任的根证书颁发机构。 需要检查操作系统版本。
6.3.1 不兼容的现象
如果验证时不能正常获得蚂蚁集团系统的响应,并在您的系统中出现类似如下的错误信息,说明不兼容。
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.```
6.3.2 修正方案
如果出现SSL相关异常,请您的系统管理员下载表中第一个根CA证书,并将其导入到受信任的根证书颁发机构区域。
6.4 PYTHON
6.4.1 综述
当使用标准库的http client (urllib, urllib2, http, httplib)时,python自2.7、3.4、3.5版本起,默认校验服务器证书是否由可信签发机构签发、证书主题(或SAN)是否与服务器域名匹配,且使用ssl模块的信任根证书库。详细信息可查看:https://www.python.org/dev/peps/pep-0476/
早期的python版本默认既不校验服务器证书是否由可信签发机构签发,也不校验证书主题(或SAN)是否与服务器域名匹配,因此,不会遇到问题。
6.4.2 不兼容的现象
如果验证时不能正常获得蚂蚁集团系统的响应,并在您的系统中出现类似如下的错误信息,说明不兼容。
SSL: CERTIFICATE_VERIFY_FAILED
6.4.3 修正方案
Python默认使用系统ssl模块(通常为Openssl)的信任根证书库,也可以通过cafile、capath、cadata来指定。
如果是使用系统ssl模块(Openssl)的信任根证书库,可参考6.2节的介绍,往系统库中增加新的根CA证书(表1中第一个)。
如果是使用自主管理的信任根证书库,往其中增加新的根CA证书(表1中第一个)。
可能的代码写法:
# ssl.create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)
context = ssl.create_default_context() # 按照系统默认配置的写法。
urllib.urlopen("https://site.sample.com", context=context)
参考文档:https://docs.python.org/2.7/library/ssl.html https://docs.python.org/3/library/ssl.html
7. 特别提醒
- 如果您的系统是用预置蚂蚁集团服务器证书的方式来与蚂蚁集团网站建立HTTPS连接,由于我们每年将至少更新一次证书密钥,为避免贵司业务受证书密钥更新的影响,强烈建议您改为TLS/SSL协议中普遍使用的X509证书链校验方式。
- 为了检验商家和开发者系统兼容新证书的准备情况,将在8月7日将部分请求灰度到部署了新证书的服务器上。如果您的系统此时还不兼容新的服务器证书,可能会出现部分业务失败,通常情况下重试即可恢复业务。
8. 联系我们
蚂蚁技术支持中心提供多种问题反馈和获取技术支持的通道。如对本次升级有任何疑问、验证或修正过程遇到困难,请联系蚂蚁集团技术支持团队(connect_support@service.alipay.com)。