首先申明,我不是密码学的专业人员,没有这方面知识基础,这个以及接下来的博客都是我根据网上能找到的资料、博客,一点点摸索总结出来的。但项目必须得做身不由己,无奈只能自己试一试了。

如果有哪里不对的地方,请各位一定指出,也让我学习一下,感谢!

博客参考的资料地址会将参考的内容会在文中给出,我总结的步骤有不清楚的地方可以参考原文。

相信看到这篇博客的同学对于openssl的认识应该都比我要深,我就不班门弄斧了。可能国密这个领域对于其他技术来说还是太小众了,可以参考的教程太少,而且个人实现的国密算法基本上都没有经过严格测试,问题的解决也不是很迅速。本文的目的是记录我在国密https尝试过程中遇到的坑以及解决方法,或许对刚入坑的新手有所帮助,不会像我一样毫无头绪。

废话少说我们就开始吧

一、360国密浏览器

如果要实现国密https通讯的话,个人实现难度很大,特别像我这样的新手完全不可能。那么就要借助前辈们的工作成果。国密https经过这几年的发展,在某些领域已经广泛应用了。比如360安全浏览器和信密浏览器都已经集成了国密算法,使用这些浏览器访问例如沃通搭建的SM2SSL证书测试网站和中国银行官网,会显示:

这些例子确实证明国密算法已经开始应用了

二、初步尝试自建SM2证书与国密浏览器牵手

如果要搭建国密https通道,与浏览器之间的联调是必须要攻克的难关。

我大致搜索了一下,还是选择了360浏览器做尝试,虽然感觉这个口碑不怎么样,但是也算是国产浏览器之光吧,用的人多,社区也还算活跃。

但是吧,还是我想多了 = =

我在360浏览器的论坛提了问,可是并没有什么用,我在关于360国密浏览器本地调试gmssl的问题这个帖子里面说明了我的问题:

gmssl开启s_server服务,浏览器访问的时候会报错:

ACCEPT
ERROR
1816732:error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:ssl\statem\statem_srvr.c:1502:
shutting down SSL
CONNECTION CLOSED
ACCEPT
ssl_get_algorithm2=0x08x
ERROR
1816732:error:14094416:SSL routines:ssl3_read_bytes:sslv3 alert certificate unknown:ssl\record\rec_layer_s3.c:1385:SSL alert number 46
shutting down SSL
CONNECTION CLOSED
ACCEPT
ssl_get_algorithm2=0x08x

大家也可以尝试一下,大概率也会是这个错吧。

后来我看到了服务器使用国密(SM2/SM3/SM4)证书,通过浏览器访问这个博客,博主介绍了三种方法:

1.Apache + Gmssl

2. Apache + Wotrus ssl

3. Nginx + tls

说实话,这三个我用的都不多,也就大概知道是干嘛的。仔细看了博客之后,第一个方法和s_server没啥区别,并没有解决浏览器访问的问题,放弃;第二个需要沃通的ssl,看了一下收费作为最后的备选;第三个方法应该是可以的,我没有尝试,但是这个方法避开了gmssl的服务,只用了其生成的证书,通过Nginx进行服务的启动。

讲道理这片博文到这里就可以结束了,不过呢,我这个人比较倔,必须得解决gmssl这个问题。

三、解决gmssl与国密浏览器的通讯问题

看了很多博客和资料,隐隐感觉到应该不是浏览器的问题,不然这么多国密证书早就出问题了,问题应该还是在gmssl上。

于是我开始翻看gmssl在GitHub上的issues:

360国密浏览器访问sm2服务:https://github.com/guanzhi/GmSSL/issues/774

gmssl server与360国密浏览器通信-gmssl返回Decrypt Error:https://github.com/guanzhi/GmSSL/issues/940

Nginx搭配Gmssl使用国密浏览器连接不成功:https://github.com/guanzhi/GmSSL/issues/939

其中后两个issues给了我很大帮助,下面这位给出了问题和解决方法,就是默认ID的问题

Update statem_gmtls.c这个patch是修改gmssl的源码,文件位置在ssl/statem/statem_gmtls.c,本来想把修改后的贴出来,但是太多了,上传了资源statem_gmtls.c,怕修改错的可以直接下载替换。

之后就是重新编译的问题了,这个我在新手入坑GMSSL(一)Windows下编译GMSSL并生成CA证书这个博客里提到过,重复编译会出现的问题,这里不再赘述。

在使用360国密浏览器的时候,我们自己生成的ssl证书需要进行信任处理

首先不要忘了在设置里开启国密ssl选项

如何信任新的根证书
由于目前浏览器内置的国密根证书有限,如果测试时需要信任新的根证书,有如下两种方法:
第一种方法:
请在地址栏左侧的证书小锁头上点击,显示证书弹窗。

点击[证书信息],点击最下方的信任按钮

第二种方法:
如果上述操作不能生效,说明证书链不完整。请编辑 %appdata%(或安装路径)\360se6 \User Data\Default\gmssl\ctl目录下的ctl.dat
如该文件不存在请新建文本文件,注意扩展名[/i]),填入根证书和必要的证书链证书,格式为PEM。

上述为360浏览器论坛的标准说法,我已经把双证书和对应的ctl.dat文件打包上传:

GMSSL双证书demo.rar

有需要的同学可以去下载尝试。

经过上述方法,s_server端基本上是没有问题了:

ACCEPT
ssl_get_algorithm2=0x08x
-----BEGIN SSL SESSION PARAMETERS-----
MHUCAQECAgEBBALgEwQgqLlCVD/1Ly5wDokXuZeCrim6smTKkZxeYKcMZGuG/tsE
MBNuV04VONwH2HuGWeXV/FelBdgomH4NrT6J0peHUXD1nR3EZu+eeNbRdulpzT7n
lqEGAgRe8MyrogQCAhwgpAYEBAEAAAA=
-----END SSL SESSION PARAMETERS-----
Shared ciphers:SM2-WITH-SMS4-SM3
CIPHER is SM2-WITH-SMS4-SM3
Secure Renegotiation IS NOT supported
GET / HTTP/1.1
Host: localhost:44330
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

但是我们还需要进行抓包检查是否真正的握手成功。

四、wireshark抓包

其实这个软件我之前也没有用过,现学现卖,如果有不对的地方欢迎大家批评指正。

这部分大家可以去看大佬的博客:国密SSL通信的调试技巧

看了之后获益匪浅,文中提到了一个国密版本的wireshark抓包工具,非常适合我们的需求。

Windows用户甚至不需要编译就有release版本,幸福哭了有没有,这样的大佬麻烦再来一打,谢谢!

怕出其他为止问题不好解决,我都按照缺省值安装,没有改动。安装之后软件长这样:

哈哈哈然后就尴尬了,枪都给手上了,不会扣扳机

没办法只能现学,参考了wireshark如何抓取本机包,Https流程,openssl本地自建证书,抓包,wireshark怎么抓包、wireshark抓包详细图文教程这几篇博客,大概知道了怎么去操作,大家的教程写的都超级好的,这也是促使我写这几篇博客的原因,希望可以让后来人少走弯路。

先在“捕获”-“选项”-“Manage Interfaces”把其他的都隐藏起来,只留loopback这一个:

然后就可以开始抓包了,不过想更清晰明了的话还可以进行端口筛选:

tcp.port ==44330,  只显示端口为44330的消息

直接输入就好了:

接下来就是见证奇迹的时刻:

出现了,错误

好像没有协商成功

但是不要慌乱,使用重启大法再尝试一下:

我也不是很懂这个抓包结果,但是应该是成功了的。

好了,请给gmssl一杯卡布奇诺,谢谢~

ps:在查资料的过程中,无意发现了一个很好的国密网站:免费申请国密证书,功能很强大,请大家务必一试~

新手入坑GMSSL(三)GMSSL双证书与360国密浏览器通讯相关推荐

  1. 国密双证书签发及国密数据信封解析

    国密双证书的签发,及国密数字信封解析 产生签名密钥对 gmssl ecparam -genkey -name sm2p256v1 -text -out server_sign.key 产生p10签名请 ...

  2. 新手入坑GMSSL(一)Windows下编译GMSSL并生成CA证书

    首先申明,我不是密码学的专业人员,没有这方面知识基础,这个以及接下来的博客都是我根据网上能找到的资料.博客,一点点摸索总结出来的,问了很多前辈和博主,但是可能都没有看到都没有回复我 = = .但项目必 ...

  3. [摘抄] 资深软件项目经理/产品经理“扯皮技巧”汇总(新手入坑必读,不定期更新)...

    左耳朵耗子 (陈皓):<开发团队的效率> http://coolshell.cn/articles/11656.html (介绍并点评了)以下几种典型的开发方式(以及他们在实践中难以避免的 ...

  4. 魔兽世界服务器存档位置,选择服务器也有大学问?新手入坑《魔兽世界》该在哪里“扎根”...

    原标题:选择服务器也有大学问?新手入坑<魔兽世界>该在哪里"扎根" <魔兽世界:暗影国度>开服至今已经五个多月了,圈内圈外都在讨论新版本的话题,不少萌新与老 ...

  5. 密信国密浏览器:推动SM2国密算法和国密SSL证书应用

    为什么80%的码农都做不了架构师?>>>    国密浏览器的普及是推广我国国产密码算法的关键生态要素.日前,沃通CA子公司密信技术发布密信浏览器公测版,支持SM系列国密算法和安全协议 ...

  6. PyTorch入坑(一)~(三): Tensor的概念,基本操作和线性回归

    PyTorch 一文入门 PyTorch 入坑一:数据类型与Tensor的概念 PyTorch数据类型 Tensor的概念 Tensor与Variable Variable Tensor Tensor ...

  7. 新手入坑编程,奥利给

    新的征程,新的起点.现在的我是一个准大三的学生.对于我自己来说今年参加专接本考试,很幸运的有学校上,还是很高兴的.(珍惜每一次读书的机会) 回顾在专科的时刻,竟然游戏陪伴了我绝大部分时间,有一段时间还 ...

  8. 魔兽世界多玩服务器位置,选择服务器也有大学问?新手入坑《魔兽世界》该在哪里“扎根”...

    <魔兽世界:暗影国度>开服至今已经五个多月了,圈内圈外都在讨论新版本的话题,不少萌新与老玩家都选择了在这个版本中加入探索暗影界的行列.但面对茫茫多的区服,许多玩家都犯起了"选择困 ...

  9. Windbg新手入坑指南

    文章目录 前言 熟悉理论 提高调试效率 定制自己的Windbg界面 关于工作空间 命令概述 标准命令 元命令 扩展命令 调试技巧 伪寄存器 开始实战 控制调试目标 单步步入和单步步过 单步执行到指定地 ...

最新文章

  1. 0基础玩转CV的利器绝了,还送万元礼金,机不可失!
  2. 【numpy】tensordot的用法研究
  3. Spring Cloud Alibaba 之 服务通信 REST消息通信:如何使用 OpenFeign 简化服务间通信
  4. 腾讯医疗AI新突破:提出器官神经网络,全自动辅助头颈放疗规划 | 论文
  5. redis演练(5) redis持久化
  6. (转) 分布式文件存储FastDFS(七)FastDFS配置文件详解
  7. nginx 50x故障分析
  8. 使用Stanford NLP software进行中文文本预处理
  9. 【转】千万级并发实现的秘密:内核不是解决方案,而是问题所在!
  10. linux 查看当前表空间大小,查看表空间和表的使用率
  11. Cadence每日一学_01| Cadence、Allegro、OrCAD都是什么东东?
  12. RFID射频卡分类及标准
  13. 【晓风残月】ASP.NET DEMO 16: 通过GridView布局实现的多行批量更新
  14. WINRAR的破解方法
  15. jquery 遍历java对象_jquery遍历数组、对象
  16. Linux下文件(文件夹)的压缩和解压
  17. 手机号码归属地查询,免费API
  18. 大数据平台架构的层次划分
  19. Matlab向量场可视化
  20. Linux上运行扫雷,基于linux环境下扫雷应用程序.docx

热门文章

  1. PSEN ma1.3p-22PSEN ma1.3-12皮尔兹安全开关
  2. 【信息安全概论】笔记
  3. freekan电影系统后台无法登录解决方法
  4. 如何提高微信小程序的访问量?
  5. Dubbo面试八股文—1
  6. 【Stewart并联机器人运动学逆解可视化仿真】
  7. 查询期刊的ISO版缩写的巧妙方法
  8. 计算机一些专业术语,计算机知识专业术语50个
  9. 计算机职称评定认可增刊吗,学术期刊增刊对评职称是否有用.pdf
  10. 最大流matlab代码,matlab求最大流问题