gpt4 book ai didi

c++ - SSL_connect() 产生证书验证失败

转载 作者:太空狗 更新时间:2023-10-29 21:08:19 59 4
gpt4 key购买 nike

我目前正在将一些曾经使用 RSA Security 库的现有技术重写到 OpenSSL 中,但我开始遇到一些问题。目前,所有证书验证代码似乎都在顺利运行,直到我调用 SSL_connect()。

之前,调用 SSL_connect() 会产生 SSL_ERROR_WANT_READ。

另一个论坛上对此问题的回答向我建议应该调用 SSL_connect() 直到它停止产生 SSL_ERROR_WANT_READ 错误。不幸的是,这只会产生更令人困惑的东西:

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

即使 SSL_CTX_load_verify_locations() 成功。有谁知道为什么验证错误不会用证书方法注册并等到 SSL_connect() 被触发?

最佳答案

通常此错误意味着您的客户端收到的响应 SSL_connect() 的服务器证书无法验证。

这可能由于不同的原因而发生:

  • 如果服务器证书是自签名的,则您必须在 SSL_CONTEXT 上对其进行授权。
  • 如果服务器证书是由不在可信 CA 证书列表中的证书颁发机构签署的
  • 如果服务器证书尚未生效或不再有效

实际上,你应该设置一个证书验证的回调,让它接受任何证书,这样你就可以专注于连接部分。一旦成功,只需调整您的回调或检查您的证书是否有效。

任何时候遇到失败,您都可以调用一些 SSL_get_error() 函数,它会告诉您证书被拒绝的原因。

(不幸的是,我现在无法访问我的代码库,所以我无法给出具体示例)


以下是我自己的 SSL 套接字包装器类中的一些代码示例,已为您改编:

// ctx is a SSL_CONTEXT
// internalCertificateVerificationCallback is a callback static method (or function)
ctx->setVerify(SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, internalCertificateVerificationCallback);

这是 internalCertificateVerificationCallback 的定义:

int SecureSocket::internalCertificateVerificationCallback(int preverify_ok, X509_STORE_CTX* x509_ctx)
{
//preverify_ok contains 1 if the pre-verification succeeded, 0 otherwise.

return 1; // This accepts every certificate
}

关于c++ - SSL_connect() 产生证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298054/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com