将证书添加到可信证书

时间:2012-04-16 01:20:44

标签: c openssl

我正在使用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文档,但我发现它非常混乱,很难在那里找到任何细节。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

这意味着您尝试验证的证书未经链中的任何证书签名,除非您更改链,否则永远不会对其进行验证。

执行您希望的操作取决于您尝试验证的证书是否为自签名证书。如果它是自签名证书,您只需将其添加到您从中获取信任位置的位置(调用SSL_CTX_load_verify_locations()方法时指定的位置)。如果它不是自签名的,您将必须找到一种方法来获得该证书的整个链,这取决于您正在处理的环境。

问候。