2012-03-12 14 views
0

SSL対応のgSOAPを使用してWebサービスを開発しています。それはgSOAPのドキュメントとして提供されたコードをコピーする(それだけです!)限り、正常に動作します。いくつかの機能を追加しようとすると、私は多くの困難にぶつかります!私はOpenSSLライブラリについてよく知らないので、私はあなたの助けを求めるためにここにいます。 クライアントから送信された証明書を確認するためにCRLリストを追加する必要があります。どうしたらいいですか?また、私はこの1つでsoap.fsslverifyが指し示す機能を変更:gSoap + SSL:CRL&証明書名のチェック

int servlet_fsslverify(int ok, X509_STORE_CTX *store) 
{ 
    ok = 1; 
    char buf[1024]; 
    X509 *cert = X509_STORE_CTX_get_current_cert(store); 
    fprintf(stderr, "SSL verify error or warning with certificate at depth %d: %s\n", 
     X509_STORE_CTX_get_error_depth(store), 
     X509_verify_cert_error_string(X509_STORE_CTX_get_error(store))); 
    X509_NAME_oneline(X509_get_issuer_name(cert), buf, sizeof(buf)); 
    fprintf(stderr, "certificate issuer %s\n", buf); 
    X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf)); 
    fprintf(stderr, "certificate subject %s\n", buf); 
    /* Note: return 1 to continue, but unsafe progress will be terminated by OpenSSL */ 
    return ok; 
} 

クライアントが認証しようとするたびに呼び出されます。ご覧のとおり、クライアントの証明書のフィールドを確認することはできますが、CRLに特定の証明書が存在するかどうかを確認する方法はわかりません。 これはすべての人におかげさまで、答えがよかったです。

答えて

0

私はインターネット上で解決策を見つけました!申し訳ありませんが、私はどこを覚えていませんが、私はそれを見つけようとします。この投稿をソルバに編集します。 サーバーコンテキストの作成直後に挿入されるコード。

X509_STORE *store; 
store = SSL_CTX_get_cert_store(ServicePtr->ctx); 
if (store) 
{ 
    X509_LOOKUP *lookup; 
    X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK); 
    lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); 
    if (lookup) 
    { 
     if (X509_load_crl_file(lookup, globals.pki_crl, X509_FILETYPE_ASN1) < 1) 
     { 
      std::cerr << "CRL not found or invalid" << std::endl; 
     } 
    } 
    else 
    { 
     std::cerr << "Unable to create a valid lookup" << std::endl; 
    } 
} 
else 
{ 
    std::cerr << "Unable to get X509_STORE" << std::endl; 
} 
関連する問題