2012-04-16 24 views
0

私は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"); 
     } 
    } 
} 

そこに何か詳細を見つけてください。どんな助けもありがとう。

答えて

1

検証が失敗した場合は、SSL_CTX_load_verify_locations()メソッドなどでロードした証明書検証パスがピアからの証明書を検証できなかったことを意味します(SSL_get_peer_certificateでこの証明書を取得できます) 方法)。

これは、検証しようとしている証明書がチェーン内の証明書によって署名されておらず、チェーンを変更しない限り検証されないことを意味します。

検証する証明書が自己署名証明書であるかどうかによって、必要なことは異なります。自己署名証明書の場合は、信頼できる場所を取得する場所(SSL_CTX_load_verify_locations()メソッドを呼び出すときに指定した場所)に追加するだけです。自己署名していない場合は、その証明書のチェーン全体を取得する方法を見つける必要があります。これは、作業している環境に依存します。

よろしくお願いいたします。

+0

今のところ、自己署名入りの証明書です。私はSSL_get_peer_certificate()関数を調べます。ありがとう! – Raphael

関連する問題