gpt4 book ai didi

c++ - 无法使用 OpenSSL 验证服务器证书

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:57 24 4
gpt4 key购买 nike

我已经使用 OpenSSL 编写了一个 SOAP 客户端(在 Ubuntu 12.04 上用 C++ 编写),但它目前可以在不检查服务器安全证书的情况下运行。这是我用来建立连接和检查证书的功能

bool bInitialiseSSL(SSL_CTX* &ctx, SSL* &ssl, BIO* &bio)
{
ctx = SSL_CTX_new(SSLv23_client_method());
bio = BIO_new_ssl_connect(ctx);
if (bio == NULL) {
ERR_print_errors_fp(stderr);
SSL_CTX_free(ctx);
return false;
}

BIO_get_ssl(bio, &ssl);

SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
char target[] = "api.betfair.com:https";

BIO_set_conn_hostname(bio, target);
BIO_set_nbio(bio,1);
while (1) {
if (BIO_do_connect(bio) <= 0) {
if (!BIO_should_retry(bio)) {
cout << "Connect failed." << endl;
BIO_free_all(bio);
SSL_CTX_free(ctx);
return false;
}
} else {
break;
}
}

if (BIO_do_handshake(bio) <= 0) {
BIO_free_all(bio);
SSL_CTX_free(ctx);
return false;
}

X509 *cert;
bool bValid = false;
cert = SSL_get_peer_certificate(ssl);
if ( cert != NULL ) {
long res = SSL_get_verify_result(ssl);
if (res == X509_V_OK) {
bValid = true;
} else {
cout << "Error in security validation: " << res << endl;
}
X509_free(cert);
}
return bValid;
}

这工作正常,但 SSL_get_verify_result 的返回值为 20,对应于

X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate

我已经阅读了一些 OpenSSL 文档以了解它们的功能,但它对用户来说不是特别友好。我看过许多网络教程,但看不出我做错了什么。在我尝试实现证书检查之前,我的软件运行良好,但我看不到我需要做什么。我需要在我的机器上配置设置吗?服务器是 betfair,据说非常安全,我很难相信他们没有有效的 SSL 证书。如果有人能告诉我我做错了什么,我将不胜感激。

最佳答案

这取决于服务器的证书。

  • 如果是公共(public)有效证书,您可以将 CA 证书文件包含到 SSL_CTX 中。

代码:

ctx = SSL_CTX_new(SSLv23_client_method()); 
// You can load CA certs into SSL_CTX
SSL_CTX_load_verify_locations(ctx, cafile, NULL); // cafile: CA PEM certs file

您可以从 cURL 网站下载公共(public) CA 证书文件 CA Certs from mozilla.org

  • 如果它是私有(private)证书,并且您有证书文件,则可以使用 SSL_CTX_use_certificate_file 而不是 SSL_CTX_load_verify_locations

关于c++ - 无法使用 OpenSSL 验证服务器证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12237838/

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