国密SM2 Https服务器搭建--全网最完整方案

2023-11-19

在密码协议层面,国密标准定义了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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

国密SM2 Https服务器搭建--全网最完整方案 的相关文章

  • 区块链学习笔记(六)——区块链的分类

    文章目录 一 强调 二 公有链 联盟链 私有链 1 公有链 2 联盟链 3 私有链 总结 一 强调 先做一下重复强调 区块链技术是集分布式存储 点对点传输 共识机制 加密算法 数据区块等概念于一体的新兴技术集合 二 公有链 联盟链 私有链
  • 基于ETest的航电系统通用测试平台

    随着电子技术的发展 航电系统在飞机整机中的重要性飞速提升 据统计 近年来航电系统在飞机出厂成本中的比例直线上升 航电系统研发成本已占飞机研制总成本的近30 并保持着持续扩大的趋势 测试保障作为航电产业链至关重要的一环 贯穿航空电子设备 研发
  • SpringBoot读取Resource下文件的四种方式

    SpringBoot读取Resource下文件的四种方式 1 ClassPathResource classPathResource new ClassPathResource static image a jpg InputStream
  • connect函数的用法

    作者 曾宏安 华清远见嵌入式学院讲师 在网络编程中 connect函数经常用来在套接字上初始化连接 无论是流式套接字还是数据报套接字都可以使用connect函数 但含义却不一样 下面我们分别来讨论一下 一 流式套接字 流式套接字通常使用的是
  • CSS字体样式属性(字体设置)

    font size 字号大小 font size属性用来设置字符 该属性的值有两种单位 1 相对长度单位 像素单位 px 2 绝对长度单位 使用非常少 font family 字体 font family属性用于设置字体 网页常用的字体 宋
  • 学习太极创客 — ESP8226 (十三)OTA

    视频链接 https www bilibili com video BV1L7411c7jw p 23 vd source b91967c499b23106586d7aa35af46413 资料链接 http www taichi make

随机推荐

  • bazel构建使用clang工具链

    最近使用clang工具构建bazel项目 官方文档给的step较为繁琐 这里暂时记录一下 以便后期可以直接去用 这里具体的规则不进行详细解释 具体看官方文档有关描述 查看预定义变量列表 使用如下命令 bazel info show make
  • 【华为OD统一考试A卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • module ‘tensorflow‘ has no attribute ‘global_variables_initializer‘(问题已解决)

    最近在学深度学习 一开始就遇到了个很狗血的问题 总会报出例如下面的这种错误 y hat tf constant 36 name y hat y tf constant 39 name y loss tf Variable y y hat 2
  • xpath通过text()方式获取div节点下的文本存在bug

    环境 scrapy1 8 python3 7 3 div块如下 div class li b l span class money 12k 20k span 经验3 5年 大专 div 用形如 x response xpath div cl
  • sparkstreamming 消费kafka(2)

    spark streaming提供了两种获取方式 一种是同storm一样 实时读取缓存到内存中 另一种是定时批量读取 这两种方式分别是 Receiver base Direct 一 Receiver base Spark官方最先提供了基于R
  • 使用Jenkins+Gitlab集成Flutter自动化打包(Android),并发布到蒲公英

    本文记录一下使用Jenkins Gitlab集成Flutter自动化打包的过程 在集成时 Jenkins和Gitlab是已经搭建好的 并且Gitlab上已经上传了Flutter项目 Jenkins自动构建打包 安装Gitlab插件 因为Je
  • Js 关于收藏本页和设置首页

  • 交换机二三层转发原理简单总结

    首先二层转发是基于MAC地址转发 三层转发基于IP地址转发 但是这并不意味着仅仅依靠IP地址就能转发 三层转发是建立在二层的基础上的 而仅仅依靠MAC地址是能够转发的 另外 由于二三层转发基于MAC地址 IP地址 FDB表 MAC地址学习
  • 2019年感:忆往昔考博岁月,看今朝花样年华

    人生的际遇谁又能说清楚 就像师范类毕业的女神梦想着当一名老师 结果却阴差阳错穿上了警服 而本应该奔波北上广深的程序员 却成为了一名大学老师 两条平行线的男女 却结为了连理 再如 一心准备中科院却因英语差一分惜败 几乎裸考的学校却可能结出果实
  • 多模态预训练模型CLIP:中文版本开放使用

    公众号原文 关注公众号 获取一手论文咨询 多模态预训练模型CLIP 中文版本开放使用 中文项目地址 https github com real brilliant chinese clip in tensorflow 01 背景 CLIP是
  • 【车联网原型系统|四】adhoc组网+frp内网穿透

    物联网原型系统导航 车联网原型系统 一 项目介绍 需求分析 概要设计 https blog csdn net weixin 46291251 article details 125807297 车联网原型系统 二 数据库 应用层协议设计 h
  • 【Python三大结构练习4】

    目录 1 哥德巴赫猜想 2 判断是否回文 3 Add ings 4 身份证号掩盖出生日期 5 敏感词过滤 1 哥德巴赫猜想 题目描述 一个大正偶数总可以分解为两个质数之和 试编写程序验证哥德巴赫猜想 输入一个正偶数 输出该偶数的质数和分解
  • 使用 Spring 2.5 注释驱动的 IoC 功能

    基于注释 Annotation 的配置有越来越流行的趋势 Spring 2 5 顺应这种趋势 提供了完全基于注释配置 Bean 装配 Bean 的功能 您可以使用基于注释的 Spring IoC 替换原来基于 XML 的配置 本文通过实例详
  • Selenium脚本转化Java代码

    Selenium录制的脚本可以转换Java JUnit单元测试 可以使用Java项目管理工具Maven统一运行 从Selenium脚本中导出Java代码 按照如下步骤 使用Java运行Selenium脚本 使用Chome导出Java脚本必须
  • iframe与vue

    iframe与vue 在vue中使用 创建一个vue页面 iframe的src属性绑定需要的页面 放在template中 在iframe种调用vue的方法 a页面url为a demo com a页面中iframe引用的b页面url为b de
  • laravel8框架-开发实战项目总结(一)

    一 laravel框架的目录结构 app 应用目录 保存项目中的控制器 模型等 bootstrap 保存框架启动的相关文件 config 配置文件目录 database 数据库迁移文件和数据填充文件 public 应用入口文件index p
  • JAVA8 String 面试练习 与 intern()

    idea debug 查看内存信息 public class StringTest4 public static void main String args System out println 2293 System out printl
  • 深入浅出 - 公钥、私钥和数字签名最通俗的理解

    一 公钥加密 假设一下 我找了两个数字 一个是1 一个是2 我喜欢2这个数字 就保留起来 不告诉你们 私钥 然后我告诉大家 1是我的公钥 我有一个文件 不能让别人看 我就用1加密了 别人找到了这个文件 但是他不知道2就是解密的私钥啊 所以他
  • live-server的使用

    本地开发常常需要搭建临时的服务 第一时间我们会想到用http server 但现在流行修改文件浏览器自动刷新hot socketing 热拔插 如live reload 若想浏览器自动打开项目 用opener 现在live server实现
  • 国密SM2 Https服务器搭建--全网最完整方案

    在密码协议层面 国密标准定义了sm2密钥交换协议 IPSec技术规范 SSL 技术规范三个密码协议 在实际应用系统中为保障系统完整性 保密性 不可抵赖性三方面 应采用规范协议实现安全性保障 不要采用自定义密码协议 本文通过江南天安开源国密o