バックグラウンド
SSL サーバーとクライアント証明書によって保護された API を使用するサービス プロバイダーとの責任追及で立ち往生しています。
- CSR を生成し、パブリック CA (この場合は GoDaddy) から証明書を取得し、証明書と CA チェーンをサービス プロバイダーに提供しました。
- 彼らは、CA と私のクライアント証明書をゲートウェイにロードしたと思われます。
- 私は最も基本的なレベルのテストを使用して作業しています
openssl s_client -connect ... -cert ... -key ...
- プロバイダは、ログに私の要求にクライアント SSL 証明書がまったく含まれていないことを示していると伝えています。
- 奇妙なことに、証明書の適切な CA 発行者が、SSL ハンドシェイク中に提供される「受け入れ可能なクライアント証明書 CA 名」のリストに表示されます。
- 参考までに、私が作成してテスト用に提供した自己署名証明書は、実際には正しく機能します。
サンプル (失敗) リクエスト
[shell ~]$ openssl s_client -connect host:443 -cert cert_and_key.pem -key cert_and_key.pem -state -quiet
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=2 **SNIP**
verify return:1
depth=1 **SNIP**
verify return:1
depth=0 **SNIP**
verify return:1
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server certificate request A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client certificate A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write certificate verify A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL3 alert read:fatal:unknown CA
SSL_connect:failed in SSLv3 read finished A
140011313276744:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1197:SSL alert number 48
140011313276744:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:
エラーの私の解釈SSL3 alert read:fatal:unknown CA
は、サーバーが私が(実際に)提供している証明書の発行者を認識していないということです。しかし、プロバイダーは、CA 証明書が適切に読み込まれていることを「保証」しており、それ以外の方法でそれらを納得させることはできませんでした.
質問
したがって、他の (広範な) トラブルシューティング手順はさておき、私が本当に知りたいのは次のとおりです。
openssl s_client
クライアント証明書がサーバーによって要求されただけでなく、実際には SSL ハンドシェイク中にサーバーに送信されたことを決定的に示す出力がありますか?
-state
、-msg
、-debug
およびオプションを試しましたが-trace
、出力を解釈するのに必要なバックグラウンドがありません。
EJP の回答は、私が提供したサンプル出力write client certificate A
が.-cert