タグをssl-certificate
と指定しているので、Server Certification ValidationまたはClient Cert ValidationのSSL接続中にそのような検証が必要であると仮定します。
これを実現する簡単な方法は、OpenSSL API SSL_CTX_set_verifyを使用して検証コールバックを設定することです。
証明書の検証中にエラーが発生するたびにこのコールバックが呼び出されるため、ルートが見つからなかった場合は、エラーX509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
でコールバックされます。あなたはX509_STORE_CTX *
へのアクセス権も持っており、ここから証明書の詳細を入手することができます。このメカニズムを使用すると、コードに適切なロジックを実装して、End Entityおよび中間CA証明書が正しいかどうかを確認し、正常であればコールバックから成功を返すことができます。検証に失敗することなく。 OpenSSLのドキュメントから
詳細は:
verify_callback関数はSSL_VERIFY_PEERフラグが設定されている場合の動作を制御するために使用されます。 preverify_okは、問題の証明書の検証が成功したかどうか(preverify_ok = 1)かどうか(preverify_ok = 0)を示します。 x509_ctxは、証明連鎖の検証に使用される完全なコンテキストへのポインタです。
証明書チェーンは、最も深いネストレベル(ルートCA証明書)からチェックされ、ピアの証明書まで上がっています。各レベルで、署名と発行者の属性がチェックされます。検証エラーが見つかるたびに、エラー番号はx509_ctxに格納され、verify_callbackはpreverify_ok = 0で呼び出されます。 X509_CTX_store_ *関数を適用することによって、verify_callbackは問題の証明書を探し出し、追加の手順を実行できます(使用例を参照)。証明書にエラーが見つからない場合、次のレベルに進む前にpreverify_ok = 1でverify_callbackが呼び出されます。
verify_callbackの戻り値は、さらなる検証プロセスの戦略を制御します。 verify_callbackが0を返すと、検証処理は ``検証に失敗しました ''の状態で直ちに停止します。 SSL_VERIFY_PEERが設定されている場合、検証失敗アラートがピアに送信され、TLS/SSLハンドシェイクが終了します。 verify_callbackが1を返すと、検証プロセスは続行されます。 verify_callbackが常に1を返すと、TLS/SSLハンドシェイクは検証失敗に対して終了せず、接続が確立されます。ただし、呼び出しプロセスは、SSL_get_verify_result(3)を使用するか、verify_callbackによって管理される独自のエラーストレージを維持することによって、最後の検証エラーのエラーコードを取得できます。
verify_callbackが指定されていない場合、デフォルトのコールバックが使用されます。その戻り値はpreverify_okと同じです。したがって、SSL_VERIFY_PEERが設定されていると、検証に失敗するとアラートメッセージでTLS/SSLハンドシェークが終了します。
出典
2013-03-03 07:22:15
Jay
役に立つかもしれない:http://stackoverflow.com/questions/13295585/openssl-certificate-verification-on-linux – JSuar
2Balamurugan:申し訳ありません。私は投稿した私の答えに間違っていた。私はそれを削除しました。私は "openssl verify"のパラメータをチェックしました。証明書のチェーン全体が必要なようです。 –
BTW。質問。ルート証明書をオフラインにして、証明書をCA1証明書に割り当てることができない(ベリファイ作業を正常にする)のはなぜですか? CA1証明書にアクセスしてもルート証明書にアクセスできない場合のテストケースは何ですか? –