问题
目前这边遇到一个问题,使用Tengine+BabaSSL实现国密单向认证是成功的,但在实现国密双向认证时,报错:ERR_SSL_PROTOCOL_ERROR
我的双向配置如下:
server {
listen 6444 ssl;
server_name localhost;
enable_ntls on;
ssl_sign_certificate /opt/babassl_tengine/smcert/sm2.10.1.30.63.sig.crt.pem;
ssl_sign_certificate_key /opt/babassl_tengine/smcert/sm2.10.1.30.63.sig.key.pem;
ssl_enc_certificate /opt/babassl_tengine/smcert/sm2.10.1.30.63.enc.crt.pem;
ssl_enc_certificate_key /opt/babassl_tengine/smcert/sm2.10.1.30.63.enc.key.pem;
ssl_trusted_certificate /opt/babassl_tengine/smcert/sd_sm2.pem;
ssl_client_certificate /opt/babassl_tengine/smcert/sd_sm2.pem;
ssl_verify_client on;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:ECC-SM4-CBC-SM3:ECDHE-SM4-GCM-SM3:!aNULL:!MD5;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
root /opt/svs/admin/dist;
index index.html index.htm;
}
location /test {
return 200 "body cert:$ssl_client_cert,$ssl_protocol:$ssl_cipher";
}
}
尝试
- 通过抓包发现,在国密的Client hello中,Cipher Suites中有两个:0xe053和0xe013,
服务端回的server hello中使用了e053
而使用国密实验室的gmssl和nginx时,国密双向成功了,而此时服务端回复的是e013,不知道是不是与此有关系
e053没有找到确切是哪个密码套件,猜测可能是ECC-SM4-GCM-SM3,我尝试在Tengine中禁用e053,但没有成功
- 过程中,还发现,在Tengine的 ssl_ciphers 配置里中,必须加入HIGH,否则无法在浏览器中弹出选择ukey证书的选项,客户端请求直接被拒绝,不知道Tengine这边为什么一定要这个
如何配置才能实现国密双向认证,希望得到大佬的解答!感谢!!!
更新
2022/2/17
在国标《GB/T 38636-2020 信息安全技术传输层密码协议(TLCP)》中查到了,e013、e053分别为ECC-SM4-CBC-SM3、ECC-SM4-GCM-SM3
编写客户端测试程序,客户端用两个加密套件分别测试,都测试通过了!之前一直是通过奇安信的安全浏览器,选择ukey证书进行的测试,目前还是失败,是因为服务端要求发送双证吗?国密实验室的是客户端发送单证也能允许,不知道Tengine有没有配置控制可以只发送单证,目前ukey中只有单证,没有双证的ukey可以测试,也不知道奇安信的安全浏览器能否发送双证
2022/2/18
通过各种尝试,搞到了有两个证书的ukey,使用奇安信的安全浏览器,实现了国密双证双向认证!!!
但过程中也发现了问题,使用 https://gmcert.org/ 申请的证书就能成功,但用自己 checkout 的证书,报错,http错误码495 SSL Certificate Error, 最后对比两个证书,发现在“密钥用法”中,加密证书必须为“Key Encipherment, Data Encipherment, Key Agreement (38)”,签名证书必须为“Digital Signature, Non-Repudiation (c0)“,如果用法缺少,则会报错!
4条答案
按热度按时间vmdwslir1#
记录一下!
还有就是,Tengine是否有参数控制,国密单证也能通过双向认证?是否合规?
7uhlpewt2#
cc @ dongbeiouba
2nc8po8w3#
还有就是,Tengine是否有参数控制,国密单证也能通过双向认证?是否合规?
TLCP不允许单证书形式,如果你是需要在实现TLCP的过程中,还兼容客户端只有一个证书的情况,那原则上是不合规的
wwodge7n4#
我的客户端证书是双证,加密证书的用途是Key Encipherment, Data Encipherment (30),签名证书的用途是Digital Signature, Non-Repudiation (c0),tengine+tongsuo无法认证,厂商的国密ssl网关可以认证,而且同时支持rsa客户端证书认证