当前位置: 首页 > 知识库问答 >
问题:

openssl SSL_get_verify_result返回错误20

谷良弼
2023-03-14

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

openssl验证-cafile test.pem private.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.
}

我需要帮助确定问题和如何解决它。我确信我的证书是正确的。

共有1个答案

隆功
2023-03-14

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

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;
}

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

像这样的东西:

char *chain_certs = "------- BEGIN CERTIFICAT...."; /// <<< YOUR CERTIFICATE CHAIN
// Load chain of certs
X509 *cacert=NULL;
BIO *mem = BIO_new_mem_buf(chain_certs,strlen(chain_certs));
X509_STORE *cert_store = SSL_CTX_get_cert_store(ssl_context);

if(cert_store!=NULL){
    int index = 0;
    while ((cacert = PEM_read_bio_X509(mem, NULL, 0, NULL))!=NULL) {
        if(cacert) {
            g_debug("Our certificate name is %s", cacert->name);
            X509_STORE_add_cert(cert_store, cacert);
            X509_free(cacert);
            cacert=NULL;
        } /* Free immediately */
        index++;
    }
}
BIO_free(mem);
 类似资料:
  • 基类控制器里有error方法,用于api的错误消息返回输出 /** * 操作错误跳转的快捷方法 * @access protected * @param mixed $msg 提示信息,若要指定错误码,可以传数组,格式为['code'=>您的错误码,'msg'=>'您的错误消息'] * @param mixed $data 返回的数据 * @par

  • 我是JS的学生。我有一段代码返回了一个错误。 这是返回的语法错误。你们能解释一下我做错了什么吗?

  • 问题内容: 我有以下代码: 那应该从给定的URL返回图像。 我测试了以下两个随机选择的URL: https://www.google.co.ma/images/srpr/logo4w.png http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg 第

  • JSoup-1.8.1 尝试{ Document Document=Jsoup.connect(url.get(); 返回Document.getElementsByTag(“title”).text(); }catch(异常e){ System.out.println(e); 返回null; } org.jsoup.HttpStatusExc0019: HTTP错误获取URL。状态=404, U

  • 问题内容: 在Windows 2003上按计划任务运行的Java应用程序崩溃了,没有日志或任何有助于查明情况的信息。唯一可用的信息是该应用程序返回了代码143(8F)。该错误代码是从计划的任务日志中检索到的。 有谁知道该错误代码(143)代表什么?用户注销是否有可能导致应用程序终止? 谢谢, 问题答案: JVM错误代码143表示内部字段必须有效。这是在OTN讨论论坛上讨论的。但是,结论似乎是扼杀您

  • 我正在Linux上运行一些OpenGL程序。无法理解初始化glew时收到错误的原因。(错误1.5.2) 由以下人员管理: