国密VPN/国密浏览器/国密网关
- 软算法-
OpenSSL/BoringSSL
- 硬件支持-国密USB KEY(海泰方圆、飞天诚信、渔翁科技),使用
OpenSSL
的engine
源码方式(包括Windows和Linux平台)
软算法:
- 算法添加方式,从零添加完整的(
SM2/3/4
)算法实现 - 源码测试
demo
- 说明文档
国标USB KEY
:
- 使用
OpenSSL
提供的engine
实现对国密USB KEY
支持 engine
便于添加和移除新硬件(测过海泰方圆、飞天诚信和渔翁科技的国密USB KEY
)BoringSSL
的engine
实现
《GM/T 0024-2014 SSL VPN技术规范》 在OpenSSL/BoringSSL
的实现,实现的VPN能够与国家商用密码检测中心的测试机通信,并详细说明哪些部分与标准文档中有差异,便于了解实现流程。
基于OpenSSL开源的国密VPN工程有GmSSL和TaSSL TaSSL-1.1.1b,有兴趣的可以参考其实现方式。最新的OpenSSL-3.x.x
算法添加方式与以往的版本存在差异。
GmSSL实现了nginx/apache/tomcat版本的国密,myssl提供了国密测试功能,类似ssllabs.
- 国密证书 - 支持使用
SM2certgen.sh
脚本生成证书,自定义配置参数 - 国标双证书
demo
OpenSSL
的阻塞通信方式
Chromium源码集成国标VPN协议,实现国密通信。实现方式可以通过白名单放行或者自适应TLS和国密VPN协议,对两种实现方式做简单描述:
- 白名单放行-通过配置国密
URL
地址来适配国密VPN协议,只有在配置在白名单的网址才能使用过VPN通道 - 自适应协议-根据请求的网址,内核内部自动处理,响应相关的TLS或国密VPN协议
之前在公司见过另一种实现方式,但不推荐使用此方式,具体方法是在原有的HTTP流程注入TLS协议,可以使用OpenSSL或者其它第三方实现国密VPN套件,打断原有的HTTP流程,在通信建立后数据传输前添加国密TLS流程,达到实现HTTPS的方式。
对于上述两种方案,第一种已经实现并在Windows端测试正常,并与国内的国密浏览器做相应测试中国银行,性能突出。 目前还有ovssl此服务器可以测试国密VPN,但需要使用具备国密VPN通信的浏览器,否则为TLS协议
添加sm2dhe的SM2_compute_share_key的实现方式,具体内容参考《GM/T 0009-2012 SM2 密码算法使用规范》的9.6内容。
openssl3.0文件夹内包含了最新的openssl代码支持国密0024-2014的E013密码套件的静态库,头文件,可执行文件openssl和测试用例。
- 国密测试:openssl s_client -smtls -msg -debug -connect ebssec.boc.cn:443
- TLS测试:openssl s_client -tls1_2 -msg -debug -connect www.baidu.com:443