在密碼協議層面,國密標準定義了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