国密SSL那些事儿2022年4月20日

零信技术即将发布的第一个产品就是零信浏览器,其中一个最大的亮点就是支持国密SSL证书实现国密https加密。零信浏览器是基于开源的Chromium研发的,最主要的改动就是增加了对国密SSL的全面支持,这涉及到SM2/SM3/SM4算法的支持和对《GM/T 0024 SSLVPN技术规范》和《GB/T38636-2020信息安全技术传输层密码协议(TLCP)》两个国密标准规范的支持。当然,更重要的是对各家CA的国密根证书的信任预置,本文就讲讲这件事。

为了让用户能全面体验零信浏览器对国密SSL证书的支持,我们计划在浏览器正式发布时就已经预置几家已经签发了不少国密SSL证书的CA的国密根证书。在我们处理各家CA提交的国密根证书信任预置申请过程中,我们发现了我国CA签发的国密SSL证书还存在不少问题,还有很大了提升空间,希望本文能有助于提升国密SSL证书相关方的国密SSL相关技术水平,包括签发国密SSL证书的CA机构、部署国密SSL证书的用户、国密浏览器厂家等,大家共同努力提升我国国密SSL证书的技术水平和应用水平。

第一个问题:用户证书和签发CA证书没有AIA信息。

AIA是Authority Info Access的缩写,意思是证书签发者信息访问网址,用于告诉浏览器这张证书是哪个签发CA签发的,去哪里可以下载签发者证书用于验证用户证书是否真的是这个签发CA签发的,这个信息必须包含在用户证书中,以便浏览器能获得证书签发者的公钥来验证用户证书。当然,签发CA也必须有AIA信息,以便浏览器验证签发CA是否是由已经预置信任的顶级根证书签发。如下图左图为沃通CA的用户证书AIA,右图为签发CA的AIA。

国密SSL 国密SSL

我们很遗憾地看到申请零信浏览器的CA中有多家CA签发的用户证书和签发CA都没有AIA信息,这样即使预置信任了根证书也由于无法往上验证而使得浏览器无法显示为可信证书。有些用户证书中有AIA信息,但是无法访问,请一定要确保AIA网址可访问,并且是正确的签发CA证书。

第二个问题:用户证书没有身份认证级别标识OID。

国际标准中定义了4种不同认证级别的SSL证书的OID, DV SSL证书OID:2.23.140.1.2.1,IV SSL证书OID:2.23.140.1.2.3,OV SSL证书OID:2.23.140.1.2.2,EV SSL证书OID:2.23.140.1.1,SSL证书中策略中有这些OID就可以使得浏览器只需读取这些OID就知道这张SSL证书的身份认证级别,就可以根据不同的认证级别展示不同用户界面,如EV SSL证书展示绿色地址栏和单位名称。

但是,我们发现只有个别CA签发的国密SSL证书中有这些OID,大部分CA签发的国密SSL证书中并没有包含这些OID,也许是考虑到用这些OID不太合适吧,因为国际CA/浏览器论坛中定义的这些OID后面明确说明了这些OID仅适用于满足相关国际标准签发的SSL证书,而目前国密算法还没有纳入CA相关的国际标准中。也就是说,如果国密算法SSL证书使用这些OID应该是不合适的,虽然国际CA/浏览器论坛可能不会找麻烦。

怎么办?首先,希望国家主管部门能尽快从国家根使用的OID架构中定义4个OID用于定义证书的身份认证级别。当然,这可能是远水解不了近渴,所以,零信浏览器可信根证书认证计划定义了4个用于不同认证级别的OID,申请预置信任的CA都可以免费使用这些OID来标识不同认证级别的SSL证书,具体有:DV SSL证书:1.2.156.157933.11,对应国际OID:2.23.140.1.2.1;IV SSL证书:1.2.156.157933.12,对应国际OID:2.23.140.1.2.3;OV SSL证书:1.2.156.157933.13,对应国际OID:2.23.140.1.2.2;EV SSL证书:1.2.156.157933.14,对应国际OID:2.23.140.1.1。有了这些OID,浏览器就可以准确地识别国密SSL证书的认证级别,从而可以正确地显示不同的用户界面。

第三个问题:用户证书没有增强密钥用法、没有吊销列表(CRL和OCSP)、没有使用者可选名称。

这些都是不应该有的问题,但是很遗憾有些CA签发的国密SSL证书没有增强密钥用法(EKU),这是必须有的:服务器身份验证 (1.3.6.1.5.5.7.3.1)和客户端身份验证 (1.3.6.1.5.5.7.3.2),只有有了这两个EKU才能证明这张证书是SSL证书,所以这个是必须有的。

而吊销列表当然也是必须有的,可以只有CRL或者只有OCSP,必须有一个或者两个全有,这样浏览器就可以验证这张证书是否有效,是否被吊销。而使用者可选名称,这也是必须有的,否则浏览器就无法正常获取证书绑定的域名信息,也就无法正常展示SSL证书了。

第四个问题:用户部署SSL证书没有带上签发CA证书。

这个问题是需要CA机构提醒用户在部署国密SSL证书时,必须带上签发这张SSL证书的中级根证书,这样浏览器在同服务器握手时就可以获得签发CA证书,就不需要从用户证书中AIA网址去获取,能更快速验证证书是否可信。如果有的CA短时间内无法在用户证书中增加AIA网址,则必须要求用户在部署证书时带上中级根证书,这也不失为一个临时补救的方法。推荐CA为用户提供常用的服务器的用户证书文件时直接为用户提供加中级根证书的证书绑定文件,如Nginx服务器就是把签发CA证书同用户证书叠加在一起即可。请注意:不需要加上顶级根证书,加上去会增加SSL握手的流量,降低通信效率,增加服务器带宽消耗。

今天就说这四件事,还有一个很重要的问题比较复杂,非三言两语说得清楚,下次独立写一篇文章来讲。希望本文所讲的四个问题能引起签发国密SSL的CA机构和使用国密SSL证书的用户的高度重视,改进这些问题有利于浏览器能快速验证证书是否可信和正确展示证书的身份认证级别,同时也就改善了浏览器用户的体验。

最后,笔者希望国家主管部门能及时发布国密SSL证书相关的CA基线标准,规范国密SSL证书的签发和使用。同时希望各个国密SSL证书相关方能一起努力,把国密重器用好,共同为普及国密SSL证书应用做贡献,让国密SSL证书真正能为保障我国互联网安全发挥最大的作用,进而有力推动已经成为国际标准的SM2/SM3/SM4算法的国际化广泛接受和使用,共同推动SM2算法能早日纳入SSL证书相关国际标准中,早日实现用户可以像现在自由选择RSA/ECC算法的SSL证书一样自由选择RSA/ECC/SM2算法,而无需部署两张不同算法的SSL证书,笔者坚信这一天一定会到来,也期待通过大家的努力能早日到来。

点击 这里 下载此文 (PDF格式,有全球信任和全球法律效力的数字签名和时间戳,版权所有,抄袭违法必究!转载请注明:转载自零信CEO博客)