1

CPPで記述されたカスタム書き込みSSLサーバーに接続しようとしていました。クライアント認証機能があります。そのスローエラーWiresharkで監視した場合の証明書が不正です。サーバー側では、返されたエラーは

14560:error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned:s3_srvr.c:2619:

次のコードを使用して、クライアント証明書を強制的に要求しました

SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
SSL_CTX_set_verify_depth(ctx, 1);

クライアントがWiresharkで証明書を返すのを見ることができました。

サーバー側でクライアント証明書を検証するために使用される公開鍵を設定するには、どの機能を使用する必要がありますか?

4

5 に答える 5

1

エラー メッセージから、クライアントがサーバーに証明書を提示していないように見えますが、クライアントが (サーバー コードで) 証明書を提示する必要があることを明示的に要求しました。

SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);

おそらく必要なのは、証明書を使用するようにクライアント コードに指示することです(秘密鍵と共に)。

SSL_CTX_use_certificate_chain_file(ctx, pcszCertPath);
SSL_CTX_use_PrivateKey_file(ctx, pcszPrivKeyPath,SSL_FILETYPE_PEM);

それが役立つことを願っています。また、サーバーが同じ証明書チェーンを使用していること (同じ CA を信頼していること) を確認してください。これが問題である場合は、お知らせください。問題を解決するお手伝いをいたします。

于 2012-09-30T10:28:43.063 に答える
0

同様のエラーが発生していました(行番号のみが異なります):

140671281543104:エラー:140890B2:SSL ルーチン:SSL3_GET_CLIENT_CERTIFICATE:証明書が返されません:s3_srvr.c:3292:

https://help.ubuntu.com/community/OpenSSLに記載されている手順を使用して、自己署名証明書を生成しました。

1 日エラーを処理した後、使用していたマシンのトラスト チェーンに自己生成 CA が含まれていなかったことがエラーの原因であることがわかりました。

RHEL-7 のトラスト チェーンに CA を追加するには、次の手順に従います。

        To add a certificate in the simple PEM or DER file formats to the
        list of CAs trusted on the system:

        Copy it to the
                /etc/pki/ca-trust/source/anchors/
        subdirectory, and run the
                update-ca-trust
        command.

        If your certificate is in the extended BEGIN TRUSTED file format,
        then place it into the main source/ directory instead.

上記の手順は、fedora でも実行できると思います。「update-ca-trust」コマンドが利用できない場合は、「update-ca-certificates」などのコマンドを調べると役立つ場合があります。これが誰かに役立つことを願っています。

于 2014-07-25T09:19:07.237 に答える
0

Wireshark を使用すると、サーバーがクライアントに証明書を要求したことがあるかどうかを確認できます。コマンドは「CertificateRequest」になります。

于 2013-04-01T20:04:34.190 に答える
0

以下の行でサーバー コードを変更します。

サーバーコード:

SSL_CTX_load_verify_locations(ctx,"client_certificate_ca.pem", NULL);
  • ここで client_certificate_ca.pem は、クライアント証明書を生成したファイルです。以下のコマンドを使用して、「client_certificate_ca.pem」ファイルでクライアント証明書を確認します。

検証 -CAfile client_certificate_ca.pem client_certificate.pem

クライアントコード:

if (SSL_CTX_use_certificate_file(ctx, "client_certificate.pem", SSL_FILETYPE_PEM) <= 0) 
{
}
if (SSL_CTX_use_PrivateKey_file(ctx, "client_certificate.ky", SSL_FILETYPE_PEM) <= 0)
{
}
if (!SSL_CTX_check_private_key(ctx))
{  
}
于 2019-06-26T09:50:53.560 に答える