gmssl 国密ssl流程测试

前言

普通ssl/TLS中使用的是单证书,而国密ssl(gmtls)要求的是双证书,即加密证书+签名证书。
gmssl中保留了openssl中ssl、tls的流程,同时也实现了gmtls的流程。
本章将使用gmssl命令行工具,对ssl和gmtls的流程进行测试。

注:本章使用的国密证书在之前的章节中讲了如何生成。
https://blog.youkuaiyun.com/qq_39952971/article/details/115168241

一 gmssl ssl流程测试 单证书单向认证

服务端命令:

gmssl s_server -accept 44330 -key gmcrt/2_sign.key -cert gmcrt/2_sign.crt  -CAfile gmcrt/ca.crt

客户端:

gmssl s_client -connect localhost:44330 -key gmcrt/1_sign.key -cert gmcrt/1_sign.crt -CAfile gmcrt/ca.crt

测试日志(服务端):可以看出ssl的通信流程

Using default temp DH parameters
[GMTLS_DEBUG] set sm2 signing certificate
[GMTLS_DEBUG] set sm2 signing private key
ACCEPT
SSL_accept:before SSL initialization
SSL_accept:before SSL initialization
SSL_accept:SSLv3/TLS read client hello
SSL_accept:SSLv3/TLS write server hello
SSL_accept:SSLv3/TLS write certificate
SSL_accept:SSLv3/TLS write key exchange
SSL_accept:SSLv3/TLS write server done
SSL_accept:SSLv3/TLS write server done
SSL_accept:SSLv3/TLS read client key exchange
SSL_accept:SSLv3/TLS read change cipher spec
SSL_accept:SSLv3/TLS read finished
SSL_accept:SSLv3/TLS write session ticket
SSL_accept:SSLv3/TLS write change cipher spec
SSL_accept:SSLv3/TLS write finished
-----BEGIN SSL SESSION PARAMETERS-----
CIPHER is ECDHE-SM2-WITH-SMS4-GCM-SM3
Secure Renegotiation IS supported

二 gmssl ssl 流程 单证书 双向认证

服务端命令:

gmssl s_server -verify 1 -accept 44330 -key gmcrt/2_sign.key -cert gmcrt/2_sign.crt  -CAfile gmcrt/ca.crt -state

其中-verify 1 参数表示服务端要对客户端的证书进行验证。默认只是客户端验证服务端的证书。

客户端:

gmssl s_client -connect localhost:44330 -key gmcrt/1_sign.key -cert gmcrt/1_sign.crt -CAfile gmcrt/ca.crt -state

测试日志-服务端:

verify depth is 1
Using default temp DH parameters
[GMTLS_DEBUG] set sm2 signing certificate
[GMTLS_DEBUG] set sm2 signing private key
ACCEPT
SSL_accept:before SSL initialization
SSL_accept:before SSL initialization
SSL_accept:SSLv3/TLS read client hello
SSL_accept:SSLv3/TLS write server hello
SSL_accept:SSLv3/TLS write certificate
SSL_accept:SSLv3/TLS write key exchange
SSL_accept:SSLv3/TLS write certificate request   
//  服务端发出证书请求
SSL_accept:SSLv3/TLS write server done
SSL_accept:SSLv3/TLS write server done

verify return:1
SSL_accept:SSLv3/TLS read client certificate
SSL_accept:SSLv3/TLS read client key exchange
SSL_accept:SSLv3/TLS read certificate verify
SSL_accept:SSLv3/TLS read change cipher spec
SSL_accept:SSLv3/TLS read finished
SSL_accept:SSLv3/TLS write session ticket
SSL_accept:SSLv3/TLS write change cipher spec
SSL_accept:SSLv3/TLS write finished

三 gmssl gmtls 流程 双证书 单向认证

服务端命令:

gmssl s_server -gmtls -accept 44330 -key gmcrt/2_sign.key -cert gmcrt/2_sign.crt  -dkey gmcrt/2_enc.key -dcert gmcrt/2_enc.crt -CAfile gmcrt/ca.crt -state

-state参数表示打印跟多信息,方便调试。

客户端:

gmssl s_client -gmtls -connect localhost:44330 -key gmcrt/1_sign.key -cert gmcrt/1_sign.crt -dkey gmcrt/1_enc.key -dcert gmcrt/1_enc.crt -CAfile gmcrt/ca.crt -state

日志-客户端:

[GMTLS_DEBUG] set sm2 signing certificate
[GMTLS_DEBUG] set sm2 signing private key
[GMTLS_DEBUG] set sm2 encryption certificate
[GMTLS_DEBUG] set sm2 decryption private key
CONNECTED(00000003)
SSL_connect:before SSL initialization
SSL_connect:SSLv3/TLS write client hello
SSL_connect:SSLv3/TLS write client hello
SSL_connect:SSLv3/TLS read server hello
depth=1 C = CN, ST = Some-State, L = beijing, O = Internet Widgits Pty Ltd, OU = xd, CN = yaomingyue
verify return:1
depth=0 C = CN, ST = Some-State, O = Internet Widgits Pty Ltd, OU = xd, CN = yao
verify return:1
SSL_connect:SSLv3/TLS read server key exchange
SSL_connect:SSLv3/TLS read server done
SSL_connect:SSLv3/TLS write client key exchange
SSL_connect:SSLv3/TLS write change cipher spec
ssl_get_algorithm2=4a58fcd008x
SSL_connect:SSLv3/TLS write finished
SSL_connect:SSLv3/TLS write finished
SSL_connect:SSLv3/TLS read change cipher spec
SSL_connect:SSLv3/TLS read finished


New, GMTLSv1.1, Cipher is SM2-WITH-SMS4-SM3
SSL-Session:
    Protocol  : GMTLSv1.1
    Cipher    : SM2-WITH-SMS4-SM3
    Session-ID: C59ADB1090F5948375648E1172F299FC6E722D0EF6C94490EE992A5852EEA087
    Session-ID-ctx: 
    Master-Key: BF9BCB2B31359649CC4F0EA373B5B8674F462FA24C90147D0A8861F0129FB09E7D7F4E5AE1965A5BA336903BB6608B7C
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1616571315
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no

可以看出,现在使用的协议已经变成gmtlsv1.1了。

四 gmssl gmtls 流程 双证书 双向认证

服务端命令:

gmssl s_server -verify 1 -gmtls -accept 44330 -key gmcrt/2_sign.key -cert gmcrt/2_sign.crt  -dkey gmcrt/2_enc.key -dcert gmcrt/2_enc.crt -CAfile gmcrt/ca.crt

客户端:

gmssl s_client -gmtls -connect localhost:44330 -key gmcrt/1_sign.key -cert gmcrt/1_sign.crt -dkey gmcrt/1_enc.key -dcert gmcrt/1_enc.crt -CAfile gmcrt/ca.crt -state

目前运行服务端报错:

crypto/sm2/sm2_sign.c 510: sm2_do_verify
ERROR
139865536943936:error:1417B07B:SSL routines:tls_process_cert_verify:bad signature:ssl/statem/statem_srvr.c:2941:

应该是gmssl的GMTLS的双证书双向验证流程还有问题,需要改gmssl的源码。

总结

在测试的过程中可以进行抓包查看,可以更清晰的看到ssl和gmtls的通信流程:
在这里插入图片描述

注:GMTLS协议的抓包查看
因为wireshark目前不支持GMTLS协议解析,所以需要改变下。
用UE将抓包文件打开,找到160101等ssl开头的数据,然后改成160303 ,再用wireshark打开,当做TLS1.3 来看。
参考如下博文:
https://blog.youkuaiyun.com/mrpre/article/details/78015580

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

viqjeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值