详解gmssl和tls1.2握手流程分析及接口实现

这篇具有很好参考价值的文章主要介绍了详解gmssl和tls1.2握手流程分析及接口实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

通过阅读openssl源码具体分析ssl握手中的报文交互流程,包括发送和处理每个报文所做的主要事情。同时分析ssl协议中的一些主要问题,包括tls和gmssl的区别、单向认证和双向认证、两种会话复用方式对比,调用openssl接口实现ssl客户端和服务端之间的通信。


一、gmssl、tls1.2握手的详细流程

gmssl,ssl,ssl,https,网络协议注意:
TLS1.2中密钥交换算法为RSA、gmssl的密钥交换算法有ECC、ECDHE,RSA密钥交换算法没有server key exchange。
双向认证才有服务端给客户端发送的certificate request,和客户端给服务端发送的certificate和certificate verify。
TLS1.2为国际协议,使用单证书,certificate中只有一个证书,gmssl为国密协议使用的是双证书,certificate中有两个证书,一个签名证书、一个加密证书。

二、 TLS1.2和gmssl的区别

1.TLS1.2属于国际协议,所有算法套件都为国际算法。gmssl属于国密协议,所用算法都为国密算法。
国际算法套件:
gmssl,ssl,ssl,https,网络协议国密算法套件:
gmssl,ssl,ssl,https,网络协议
2.TLS1.2国际算法使用的是单证书,签名证书和加密证书是同一个证书;gmssl使用的是双证书,分为签名证书和加密证书,签名用签名证书,加密使用加密证书。

国密双证书的好处

**单证书体系:**本地生成公私钥对,将相关的证书信息和公钥提交给CA机构,CA审核通过后用私钥进行签名,将签名和公钥组合成数字证书,本地保存数字证书,CA不保管证书。
双证书体系: gmssl要求使用双证书,包括签名证书和加密证书。签名证书在签名使用,仅仅用来验证身份使用,其公私钥均由服务器自己产生,并且由自己保管,CA不负责保管;加密证书在加密时使用,其公私钥均由CA产生,并由CA保管。公钥加密私钥解密,一旦私钥遗失,则数据就无法还原了,所以CA一般会备份私钥。
双证书的优势:
1.从道理来说两个密钥具有不同的属性,逻辑上应该分开处理。其最主要的原因是国家要保证必要的时候有能力对某些通信进行监控,如果采用单证书,除了自己谁也无法解密,因为CA机构没有保存证书对应的私钥;如果是双证书由于加密的公私钥都是在CA产生的,CA保存了私钥,所以就能对加密的通信进行监控,因此国家法律规定使用双证书。
2.一份用公钥加密过后的数据(由于数据都是二进制我们并不能辨别这是经过公钥加密过的数据)进行签名就会造成解密,然后将以为是签名的数据发送出去就会造成信息泄露。

三、 单向认证和双向认证

单向认证

gmssl,ssl,ssl,https,网络协议
单向认证是客户端验证服务端的合法性,大多数应用都是单向认证。

双向认证

gmssl,ssl,ssl,https,网络协议
双向认证不光是客户端要验证服务端的合法性,服务端也要验证客户端的合法性。双向认证较为严格,需要服务端加载签发客户端的ca证书,只有某些特定的场合才会使用。

四、会话复用

会话复用机制

gmssl,ssl,ssl,https,网络协议
会话复用:在前一次TLS完成后,断开链接的较短时间间隔后重新建立TLS链接,这时可以不用走TLS完整的握手流程,可以通过上图中进行简化握手流程,能够极大提升握手的效率。

两种会话复用方式:sessionid 和 sessionTicket

**sessionid:**客户端想要恢复session,需要在client hello包中加入本地保存的session id,发送给服务端进行解析,服务端在session cache中查找客户端发送过来的session id,如果找到则服务端恢复session id对应的session,并将session id封装到server hello 包当中发送给客户端,客户端解析服务端的session id如果与客户端发送的一致则客户端将本地保存的session恢复;如果没有找到,服务端则随机生成一个session id发送给客户端,客户端解析后发现与自己发送的session id不一致,则重走整个握手流程。
**SessionTicket:**客户端在client hello中设置一个SessionTicket扩展来标志自己支持sessionticket。如果服务器希望使用sessionticket机制,服务器把本地的session状态存入ticket中,ticket会被加密并mac保护,无法篡改,然后封装到server hello当中发送给客户端。客户端把收到的ticket缓存起来。当客户端希望恢复会话时,就把保存的ticket封装到client hello包中的session ticket中发送给服务端,服务端收到后解密ticket,并计算mac确认没被篡改,从解密的ticket当中获取session,恢复session。

SessionTicket的优势

SessionTicket是一种不需要服务器状态,恢复TLS session的一种方式,使用这种方式可将用于恢复会话的参数保存到客户端,用于减轻大型服务端的缓存压力。
下面这些场景当中尤其有用:
1.用户量巨大,session id的方式耗费服务器内存过多。
2.服务器希望长时间缓存session。

五、使用openssl接口实现ssl客户端和服务端

gmssl客户端和服务端实现流程

下图是用openssl接口实现的简易客户端和服务端的基本流程图,函数接口基于Gmssl_gmbrowser-v0.1开源国密openssl实现的国密ssl客户端和服务端。不同openssl版本的实现接口可能会不一样,但是大致的流程都是一致的。
gmssl,ssl,ssl,https,网络协议

SSL_set_verify和SSL_CTX_set_security_level

**SSL_set_verify:**如果不调用该函数,则本端不会验证对端发过来的证书,这样就不能判断对端的合法性就能建立ssl通道,存在风险。
双向认证客户端和服务端都需要调用函数 SSL_set_verify(con, SSL_VERIFY_PEER, NULL)。
**SSL_CTX_set_security_level:**最新的openssl在使用接口SSL_CTX_use_certificate_file会调用ssl_security_cert来判断密钥的安全性,如果密钥不安全则不能加载上证书。
SSL_CTX_set_security_level(c_ctx, 0); 表明不做对密钥做安全性检查,能够兼容老版本。

国际协议和国密协议在使用openssl接口的不同之处

设置协议版本:

ssl_ctx_options=SSL_OP_NO_TLSv1|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3
SSL_CTX_set_options(ctx, ssl_ctx_options);  //表示不使用国际算法,只发送国密算法套件,如果不设置就会发送默认的国际算法套件

加载证书:
国密需要加载双证书,国际协议只加载单证书,也可以调用加载国密证书的接口,因为该函数会对证书进行区分加载。
也可以使用接口加载私钥:SSL_CTX_use_RSAPrivateKey_file
设置算法套件:
国密协议使用国密算法套件,国密算法,对称加密算法:sm1、sm4;非对称加密算法:sm2;摘要算法:sm3
国密算法组合成的算法套件如下:
GMTLS_SM2_WITH_SMS4_SM3
GMTLS_SM2DHE_WITH_SMS4_SM3
GMTLS_SM2_WITH_SM1_SM3
国际协议使用国际算法套件,国际算法,对称算法:AES、DES等;非对称算法:rsa;摘要算法:sha系列,MD5
国际算法组合成的算法套件为:
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_DH_RSA_WITH_AES_128_CBC_SHA
每一版的openssl的算法套件可能名称不一样。
初始化ssl连接中的meth:
国密SSL_METHOD

__owur const SSL_METHOD *gmtls_method(void); //客户端和服务端都可以用
__owur const SSL_METHOD *gmtls_server_method(void); //服务端用
__owur const SSL_METHOD *gmtls_client_method(void);  //客户端用

国际SSL_METHOD

tls1.2的method
__owur const SSL_METHOD *tlsv1_2_method(void);
__owur const SSL_METHOD *tlsv1_2_server_method(void);
__owur const SSL_METHOD *tlsv1_2_client_method(void);
tls1.3的method
__owur const SSL_METHOD *sslv3_method(void);
__owur const SSL_METHOD *sslv3_server_method(void);
__owur const SSL_METHOD *sslv3_client_method(void);

总结

本篇文章梳理了tls1.2和gmssl的具体握手流程和算法实现,只进行了宏观层面的大致分析,openssl当中还有许多的细节需要在后续文章中继续分析。文章来源地址https://www.toymoban.com/news/detail-692365.html

到了这里,关于详解gmssl和tls1.2握手流程分析及接口实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • apache和nginx的TLS1.0和TLS1.1禁用处理方案

    TLS协议其实就是网络安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性,TLS 1. 0 和TLS 1. 1 是分别是96 年和 06 年发布的老版协议。 TLS1.0和TLS1.1协议使用的是弱加密算法,比如DES、SHA-1、MD5、RC4等。比较容易受攻击,目前新版本的TLS协议已经更新到TLS1.2、

    2024年02月16日
    浏览(38)
  • HTTPS加密协议详解:TLS/SSL握手过程

    基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程。 (1).client_hello 客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下: 支持的最高TSL协议版本version,从低到高依次 SS

    2024年02月09日
    浏览(41)
  • TLS1.0协议漏洞修复

    漏洞描述:         远程服务接受使用TLS 1.0加密的连接。TLS 1.0有许多密码设计缺陷。TLS 1.0的现代实现减轻了这些问题,但是像1.2和1.3这样的TLS的新版本是针对这些缺陷而设计的,应该尽可能使用。截至2020年3月31日,为TLS 1.2及更高版本启用的终结点将不再与主要web浏览器

    2023年04月16日
    浏览(42)
  • TLS是什么,为什么TLS1.0不安全

    TLS,全名为 Transport Layer Security,即传输层安全协议。它是一种加密协议,用于在互联网上提供安全和数据完整性保证。TLS 的前身是 SSL(Secure Sockets Layer,安全套接字层协议),由 Netscape 公司在 1994 年开发。 TLS 的主要作用是为两个应用程序提供一个安全的通信通道,使得它

    2024年04月28日
    浏览(39)
  • TLS1.3 协议的加密过程

    记录一下 TLS1.3 的加密过程,如何协商会话秘钥 TLS 就是 HTTPS 的那一层加密协议,前身是SSL,但是现在SSL已经淘汰了。之前用wireshark 抓包看,现在的网站多是TLS1.2。 这层协议的主要流程大概是双方先通过非对称协商握手,得出一个对称密钥,然后再通过这个对称密钥加密进行

    2024年02月01日
    浏览(42)
  • 国密https握手协议抓包及流程详解

    简要解释下几个概念。 国密:也就是国家密码局认定的国产密码算法,简称为国密。其中对称密码算法主要有ZUC、SM1、SM4和SM7,非对称密码算法主要有SM2和SM9,杂凑密码算法主要有SM3。 HTTPS:Hypertext Transfer Protocol over Secure Socket Layer(SSL) 或 Hypertext Transfer Protocol Secure,是以安全

    2024年02月15日
    浏览(52)
  • 如何解决Firefox提示“此网站可能不支持TLS1.2协议”的问题 错误代码:SSL_ERROR_UNSUPPORTED_VERSION

      当你在Firefox浏览器中访问一个网站时,可能会遇到这样的提示:   之后, 不停地刷新或 重新输入,怎么也访问不进去?? 按照以下步骤操作,可以降低Firefox对TLS版本的要求,网站就能正常访问成功啦: 一、打开Firefox的高级设置 在浏览器的地址栏中输入 about:confi

    2024年04月23日
    浏览(67)
  • https 中 ssl/tls 的握手

    如果使用了 https 协议,那么在建立 tcp 连接之后,还会进行 tls 握手。也就是 https 的证书验证和密钥传输的过程。简化的流程如下: 客户端发送请求 服务端返回证书 客户端验证证书,提取公钥,生成对称加密的密钥,用公钥加密后发送给服务端 服务端收到请求,用私钥揭秘

    2024年01月23日
    浏览(41)
  • Win2008系统IIS7配置ssl证书,类型绑定https时,主机名为灰色无法填写状态,配置微信小程序时配置TLS1.2及以上版本支持

    一、申请ssl证书,本人证书是使用的腾讯云的免费的ssl证书。 申请证书流程不做介绍,可以参考:腾讯云SSL证书—1.申请免费公网SSL证书-腾讯云开发者社区-腾讯云 二、下载证书,解压后得到文件  三、打开IIS管理器  四、选择证书,填入密码  ------------------------------------

    2024年02月03日
    浏览(41)
  • 对称加密与非对称加密、证书、SSL/TLS握手过程

    对称加密,是一种既简单速度又快的加密方式,加密与解密使用的都是同一个密钥,别名又叫做:单密钥加密;对称加密有很多公开算法,并且因为它效率很高,所以适用于加密大量数据的场合;但其密钥的传输过程是不安全的,并且容易被破解,密钥管理起来也相对麻烦。

    2024年02月03日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包