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 に答える