在密码协议层面,国密标准定义了sm2密钥交换协议、IPSec技术规范、SSL 技术规范三个密码协议。在实际应用系统中为保障系统完整性、保密性、不可抵赖性三方面,应采用规范协议实现安全性保障,不要采用自定义密码协议。
本文通过江南天安开源国密openssl 和 360国密浏览器,实现了国密SM2 HTTPS,可以基于这个框架开发安全应用。
商密
国家密码管理局相关标准国密算法为sm(商密)系列,下面三种算法最常用
- sm2 公钥算法
- sm3 哈希算法
- sm4 对称分组加密算法
和国际算法对应,sm2对应RSA,sm3对应sha256,sm4对应AES。根据国密标准要求,应用系统中应该采用国密算法进行信息系统安全性保护,并且采用的协议应尽量使用国家密码管理局审核的协议。
在密码协议层面,国密标准定义了sm2密钥交换协议、IPSec技术规范、SSL技术规范三个密码协议。在实际应用系统中为保障系统完整性、保密性、不可抵赖性三方面,用户如果采用自定义协议,保证自定义协议是采用国密算法的,但协议的安全性以及整套系统的安全性,还是需要进行评估认证。因此建议在系统中采用国密IPSec和SSL 实现安全性保障。
目前,IPSec 和 SSL 产品形态是一台网关硬件,部署在资源前端,实现用户的身份认证和资源的防护。
我们也可以搭建国密算法的https服务器,测试国密协议。
国密HTTPS
能够进行测试的国密https站点:
- 中国银行 https://ebssec.boc.cn/
- 沃通 https://sm2test.ovssl.cn/
支持国密的浏览器
- 360浏览器 v10
- 密信浏览器
360 浏览器访问中国银行,能够执行国密标准,验证国密证书。
访问沃通网站,360浏览器不能很好执行国密算法,根据沃通网站的特点,通过兼容TLSv1.2实现。
密信浏览器访问中国银行,提示ERR_CERT_AUTHORITY_INVALID,说明根证书没有添加到密信浏览器的信任区中,请沃通或密信浏览器的开发人员注意预置国密批准的sm2运行CA证书。
密信访问沃通,能成功实现sm2协议。但沃通的测试服务证书不是国密局签发sm2根证书。
搭建SM2 HTTPS服务
采用开源国密算法,由江南天安发布的tassl,和改造后的Nginx。项目地址如下:
https://github.com/jntass/TASSL-1.1.1b
https://github.com/jntass/Nginx_Tassl
按readme编译TASSL 和 Nginx。
出现下面问题:
./openssl: /lib64/libssl.so.1.1: version `OPENSSL_1_1_1b' not found (required by ./openssl)
解决办法:
export LD_LIBRARY_PATH=/root/lib_r/tassl/lib/:$LD_LIBRARY_PATH
在/root/lib_r/tassl/bin目录下,运行./openssl version,输入tassl
OpenSSL 1.1.1b Tassl 0.8 27 Nov 2019
运行tassl 生成证书demo,脚本路径/root/lib_r/tassl/tassl_demo/cert/gen_sm2_cert.sh,证书路径如下:
sh-4.4# ls
CA.crt CA.pem CASM2.pem CE.key CS.crt CS.pem SE.key SS.crt SS.pem
CA.key CA.srl CE.crt CE.pem CS.key SE.crt SE.pem SS.key
配置Nginx的安装路径/root/nginx,配置文件/root/nginx/conf/nginx.conf,指明服务器证书和私钥。
配置nginx.conf证书部分:
ssl_certificate /root/lib_r/tassl/tassl_demo/cert/certs/SS.crt; #/签名证书/
ssl_certificate_key /root/lib_r/tassl/tassl_demo/cert/certs/SS.key; #/签名私钥/
ssl_enc_certificate /root/lib_r/tassl/tassl_demo/cert/certs/SE.crt; #/加密证书/
ssl_enc_certificate_key /root/lib_r/tassl/tassl_demo/cert/certs/SE.key; #/加密私钥/
配置360浏览器,配置信任证书
C:\Users\wsn\AppData\Roaming\360se6\User Data\Default\ctl\ctl.dat将
tassldemo/certs/CA.crt文件中的内容保存在ctl.dat文件中。
不设置信任根
设置信任根
ctl.dat文件路径
虽然浏览器和服务器测试通过,但是浏览器没有执行服务端证书核验,意味着服务端仿冒、钓鱼网站等问题。
还留有国密客户端双向认证没有做。
参考资料
1、大宝CA doubleCA https://doubleca.com/test_toIndexPage.action
2、国密服务器开发 https://github.com/mrpre/atls
3. TLS/SSL 协议详解 (29) 国密SSL协议 (代码见参考文献2)https://blog.csdn.net/mrpre/article/details/78015580
4.国密SSL协议开发总结(附报文详细分析)https://blog.csdn.net/weixin_37569048/article/details/88538473
5.gmssl server与360国密浏览器通信-gmssl返回Decrypt Error https://github.com/guanzhi/GmSSL/issues/940
6.gmssl s_server -gmtls 怎么指定双证书 https://github.com/guanzhi/GmSSL/issues/697
7.国密GMSSL http://gmssl.org/
8.GmSSL证书生成及验证C/S通信双向认证 https://blog.csdn.net/xiejianjun417/article/details/90768899
9. GmSSL 安装方法 https://blog.csdn.net/chhlilt/article/details/105038966
创建国密CA
国密浏览器实现方案(测试网址) https://blog.csdn.net/w277608109/article/details/98116110
1. https://www.cnblogs.com/leehm/p/12264351.html
2.gmssl sm2 http://gmssl.org/docs/sm2.html
3.X509 证书的 SKID/AKID 字段 https://www.cnblogs.com/efzju/p/4976144.html