我正在使用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文档,但我发现它非常混乱,很难在那里找到任何细节。任何帮助将不胜感激。
答案 0 :(得分:2)
如果验证失败,则表示您的证书验证路径(您使用SSL_CTX_load_verify_locations()方法(或类似方法)加载的路径无法验证来自对等方的证书(您可以使用SSL_get_peer_certificate()获取此证书法)。
这意味着您尝试验证的证书未经链中的任何证书签名,除非您更改链,否则永远不会对其进行验证。
执行您希望的操作取决于您尝试验证的证书是否为自签名证书。如果它是自签名证书,您只需将其添加到您从中获取信任位置的位置(调用SSL_CTX_load_verify_locations()方法时指定的位置)。如果它不是自签名的,您将必须找到一种方法来获得该证书的整个链,这取决于您正在处理的环境。
问候。