5

CA1証明書によって署名されたクライアント証明書「A」を持っています。CA1 証明書はルート証明書によって署名されます。

これで、CA1 証明書 (信頼済み) があり、クライアント証明書 (信頼されていない) を受け取りました。検証中に、CA1 (信頼済み) のみを使用してクライアント証明書の信頼パスを検証する必要があります..ルート証明書を持っていません。

この検証を行うことは可能ですか?

Openssl 1.0.0g バージョン ライブラリを使用しています。誰かがそれを行う方法を知っている場合は、私と共有してください。

4

1 に答える 1

3

タグ を指定したので、ssl-certificateSSL 接続中にサーバー証明書の検証またはクライアント証明書の検証のいずれかでこのような検証が必要になると思います。

これを実現する簡単な方法は、OpenSSL API SSL_CTX_set_verifyを使用して検証コールバックを設定することです。

要点は、証明書の検証中にエラーが発生するたびにこのコールバックが呼び出されるため、ルートが見つからない場合、このコールバックがエラーで呼び出されることX509_V_ERR_UNABLE_TO_GET_ISSUER_CERTです。X509_STORE_CTX *また、これまでに検証された証明書の詳細を取得できるアクセス権もあります。このメカニズムを使用すると、コードに適切なロジックを実装して、エンド エンティティと中間 CA 証明書が正しいかどうかを確認できます。正常であることが判明した場合は、コールバックから成功を返すことができます。これにより、検証を続行するよう OpenSSL に通知されます。検証に失敗することなく。


詳細については、OpenSSL のドキュメントを参照してください。

SSL_VERIFY_PEER フラグが設定されている場合、verify_callback 関数を使用して動作を制御します。これはアプリケーションによって提供される必要があり、2 つの引数を受け取ります。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-03T07:22:15.880 に答える