openssl SSL_get_verify_result返回错误20

时间:2015-01-15 18:37:31

标签: c++ ssl https

我正在编写一个使用SSL连接的C ++程序。证书链使用以下方式签出:

openssl verify -CAfile test.pem private.pem

其中test.pem包含中间证书和根证书。我的测试程序不验证证书链。

if ( !SSL_CTX_load_verify_locations( ctx, "c:/Certs/test.pem", NULL ) ) {
    // Failure message and cleanup goes here.
}

SSL* ssl;
BIO* bio = BIO_new_ssl_connect( ctx );
BIO_get_ssl( bio, &ssl );
SSL_set_mode( ssl, SSL_MODE_AUTO_RETRY );

BIO_set_conn_hostname( bio, "url.com:https" );

if ( BIO_do_connect( bio ) <= 0 ) {
    // Failure message and cleanup goes here.
}

if ( SSL_get_verify_result( ssl ) != X509_V_OK ){
    // Here is where I get the error 20...
    // Free all resources and exit.
}

OpenSSL文档将错误20描述为:

  1. X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:无法获得本地颁发者证书。 无法找到颁发者证书:如果颁发者证书,则会发生这种情况 找不到不受信任的证书。
  2. 我需要帮助确定问题以及如何解决问题。我确信我的证书是正确的。

1 个答案:

答案 0 :(得分:0)

证书或证书链似乎不受信任。 您可以在尝试连接之前从pem文件加载自己的文件:

IPR

此外,您可以直接从内存加载。

有这样的事情:

int rc = SSL_CTX_load_verify_locations(ssl_context, file_name, NULL);
if (rc != 1) { // verify authentication result
        g_warning("Load of certificates failed!: %s", X509_verify_cert_error_string(ERR_get_error()));
        return FALSE;
}