0

我正在使用 openssl 开发应用程序,基本上我需要找到一种方法将远程证书添加到商店,如果用户选择的话。我对 openssl 很陌生,但我确信这是我将添加证书的逻辑:

if(SSL_get_verify_result(ssl) != X509_V_OK) {
    printf("Certificate did not validate.\nDo you wish to add this certificate to the trust certificate store?(yes/no)\n");
    char response[3];

    while(1) {
        scanf("%s", response);

        if(strcmp(response, "yes") == 0) {
             /* Add the certificate */
            break;
        }
        else if(strcmp(response, "no") == 0) {
            BIO_free_all(bio);
            SSL_CTX_free(ctx);
            return 0;
        }
        else {
            printf("yes or no, please.\n");
        }
    }
}

我尝试了 openssl 文档,但发现它非常混乱,而且很难在其中找到任何细节。任何帮助,将不胜感激。

4

1 回答 1

2

如果验证失败,则意味着您的证书验证路径,即您使用 SSL_CTX_load_verify_locations() 方法(或类似方法)加载的路径,无法验证来自对等方的证书(您可以使用 SSL_get_peer_certificate() 方法获取此证书)。

这意味着您尝试验证的证书未由链中的任何证书签名,除非您更改链,否则它永远不会被验证。

做你想做的事取决于你要验证的证书是否是自签名证书。如果它是自签名证书,您只需将其添加到您从中获取信任位置的位置(调用 SSL_CTX_load_verify_locations() 方法时指定的位置)。如果它不是自签名的,您将必须找到一种方法来获取该证书的整个链,这取决于您正在使用的环境。

问候。

于 2012-04-16T12:55:11.990 回答