背景
目前网上的都是用的HTTP/HTTPS协议,其中HTTPS = HTTP(超文本传输协议) + SSL(安全套件字层)/TLS(传输层安全协议)
HTTP:(HyperText Transfer Protocol)超文本传输协议,相信大家都不陌生,打开浏览器就能看到。
SSL:( Secure Sockets Layer )安全套件字层。可分为两层: SSL记录协议(SSL Record Protocol)和 SSL握手协议(SSL Handshake Protocol)。
TLS :( Transport Layer Security )传输层安全协议。也分为两层 TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。
而中国的最新相关安全标准,就是要把其中的安全实现更换成国密算法。
国密SSL指的是采用国密算法(SM1/2/3/4等),符合国密标准(GM/T0024-2014和GB/T38636-2020)的安全传输协议。
简而言之,国密SSL就是SSL/TLS协议的国密版本。
国密SSL实际使用中,需要国密证书、国密U盾、国密网关/服务器、国密浏览器等互相配合,才能形成完整的落地方案。
本文集中于国密SSL的服务端与客户端相关研究。
服务端
Linux安装国密Nginx
下载地址:nginx.org/download/ng…
#1) 下载gmssl_nginx_1.8.0_bxx.tar.gz到/root/下
#2) 解压
tar zxfm gmssl_nginx_1.8.0_bxxx.tar.gz -C /usr/local
#3)修改配置
vim /usr/local/nginx/conf/nginx.conf
#4)启动
cd /usr/local/nginx/sbin/ && ./nginx -c /usr/local/nginx/conf/nginx.conf
PS:截至目前(2023-08-06)需要使用gmssl-openssl自行编译,详见 www.gmssl.cn/gmssl/index…
nginx.conf:
国密单向:
server
{
listen 0.0.0.0:443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:AES128-SHA:DES-CBC3-SHA:ECC-SM4-CBC-SM3:ECDHE-SM4-GCM-SM3;
ssl_verify_client off;
ssl_certificate /usr/local/nginx/conf/demo1.sm2.sig.crt.pem;
ssl_certificate_key /usr/local/nginx/conf/demo1.sm2.sig.key.pem;
ssl_certificate_key /usr/local/nginx/conf/demo1.sm2.enc.key.pem;
ssl_certificate /usr/local/nginx/conf/demo1.sm2.enc.crt.pem;
location /
{
root html;
index index.html index.htm;
}
}
国密双向:
server
{
listen 0.0.0.0:443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:AES128-SHA:DES-CBC3-SHA:ECC-SM4-CBC-SM3:ECDHE-SM4-GCM-SM3;
ssl_client_certificate /usr/local/nginx/conf/demo1.sm2.trust;
ssl_verify_client on;
ssl_certificate /usr/local/nginx/conf/demo1.sm2.sig.crt.pem;
ssl_certificate_key /usr/local/nginx/conf/demo1.sm2.sig.key.pem;
ssl_certificate /usr/local/nginx/conf/demo1.sm2.enc.crt.pem;
ssl_certificate_key /usr/local/nginx/conf/demo1.sm2.enc.key.pem;
location /
{
root html;
index index.html index.htm;
}
}
证书生成导出:
www.gmcrt.cn/gmcrt/index…
在GMSSL网站,国密数字证书——SM2证书,分别选择服务器、个人的证书类型,点击提交下载证书集合;
客户端证书demo1.sm2.trust 需要点击“证书链下载 -> PEM全部”下载trust类型证书
客户端
使用GMSSL SDK
www.gmssl.cn/gmssl/index…
限制
如图,在SDK部分代码中增加了到期直接退出的机制:
免费版本每年年底失效,程序会自动退出,需更新库,重新链接。请勿用于正式/生产环境,后果自负。
具体代码: