我正在编写自己的C/C++库来处理TLS流。我被OpenSSL卡住了,拒绝验证google.com的证书。这似乎只发生在google.com上。openssl s_client -showcerts -connect google.com:443
可以正确验证google.com的证书
depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = *.google.com
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = *.google.com
i:C = US, O = Google Trust Services, CN = GTS CA 1O1
但是我的代码
...
SSL_CTX_set_default_verify_paths(ctx);
...
// create socket
SSL_set_verify(ssl, SSL_VERIFY_NONE, nullptr);
// handshake, etc...
...
SSL_get_verify_result(ssl); // always return X509_V_DEPTH_ZERO_SELF_SIGNED_CERT
为什么命令成功地验证了证书,但我的代码不能?谢谢.
1条答案
按热度按时间83qze16e1#
您的信任库不包含与google证书完全匹配的内容,但不会执行浏览器通常会验证与证书关联的签名的其他步骤。openssl基础知识的一个很好的资源:https://opensource.com/article/19/6/cryptography-basics-openssl-part-1
此外,您的具体验证结果可以在这里找到:https://www.openssl.org/docs/man1.0.2/man1/verify.html
X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT -您收到的是自签名证书。
希望能帮上忙!