国密SM2 Https服务器搭建

在密码协议层面,国密标准定义了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 浏览器访问中国银行,能够执行国密标准,验证国密证书。

国密SM2 Https服务器搭建

访问沃通网站,360浏览器不能很好执行国密算法,根据沃通网站的特点,通过兼容TLSv1.2实现。

国密SM2 Https服务器搭建

密信浏览器访问中国银行,提示ERR_CERT_AUTHORITY_INVALID,说明根证书没有添加到密信浏览器的信任区中,请沃通或密信浏览器的开发人员注意预置国密批准的sm2运行CA证书。

国密SM2 Https服务器搭建

密信访问沃通,能成功实现sm2协议。但沃通的测试服务证书不是国密局签发sm2根证书。

国密SM2 Https服务器搭建

搭建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文件中。

不设置信任根

国密SM2 Https服务器搭建

设置信任根

国密SM2 Https服务器搭建

ctl.dat文件路径

国密SM2 Https服务器搭建

虽然浏览器和服务器测试通过,但是浏览器没有执行服务端证书核验,意味着服务端仿冒、钓鱼网站等问题。

还留有国密客户端双向认证没有做。

参考资料

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

上一篇:Mongodb 和Redis 的相同点和不同点


下一篇:JS实现国密算法SM2加密,后端Java解密