背景

目前网上的都是用的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

下载地址:https://www.gmssl.cn/gmssl/Tool_Down?File=gmssl_nginx_1.8.0_b10.tar.gz

  1. #1) 下载gmssl_nginx_1.8.0_bxx.tar.gz到/root/下
  2. #2) 解压
  3. tar zxfm gmssl_nginx_1.8.0_bxxx.tar.gz -C /usr/local
  4. #3)修改配置
  5. vim /usr/local/nginx/conf/nginx.conf
  6. #4)启动
  7. cd /usr/local/nginx/sbin/ && ./nginx -c /usr/local/nginx/conf/nginx.conf

nginx.conf:
国密单向:

  1. server
  2. {
  3. listen 0.0.0.0:443 ssl;
  4. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  5. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:AES128-SHA:DES-CBC3-SHA:ECC-SM4-CBC-SM3:ECDHE-SM4-GCM-SM3;
  6. ssl_verify_client off;
  7. ssl_certificate /usr/local/nginx/conf/demo1.sm2.sig.crt.pem;
  8. ssl_certificate_key /usr/local/nginx/conf/demo1.sm2.sig.key.pem;
  9. ssl_certificate_key /usr/local/nginx/conf/demo1.sm2.enc.key.pem;
  10. ssl_certificate /usr/local/nginx/conf/demo1.sm2.enc.crt.pem;
  11. location /
  12. {
  13. root html;
  14. index index.html index.htm;
  15. }
  16. }

国密双向:

  1. server
  2. {
  3. listen 0.0.0.0:443 ssl;
  4. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  5. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:AES128-SHA:DES-CBC3-SHA:ECC-SM4-CBC-SM3:ECDHE-SM4-GCM-SM3;
  6. ssl_client_certificate /usr/local/nginx/conf/demo1.sm2.trust;
  7. ssl_verify_client on;
  8. ssl_certificate /usr/local/nginx/conf/demo1.sm2.sig.crt.pem;
  9. ssl_certificate_key /usr/local/nginx/conf/demo1.sm2.sig.key.pem;
  10. ssl_certificate /usr/local/nginx/conf/demo1.sm2.enc.crt.pem;
  11. ssl_certificate_key /usr/local/nginx/conf/demo1.sm2.enc.key.pem;
  12. location /
  13. {
  14. root html;
  15. index index.html index.htm;
  16. }
  17. }

证书生成导出:

https://www.gmssl.cn/gmssl/index.jsp

在GMSSL网站,国密数字证书——SM2证书,分别选择服务器、个人的证书类型,点击提交下载证书集合;
客户端证书demo1.sm2.trust 需要点击“证书链下载 -> PEM全部”下载trust类型证书

客户端

使用GMSSL SDK

https://www.gmssl.cn/gmssl/index.jsp

限制

如图,在SDK部分代码中增加了到期直接退出的机制

图片1.png