「ハンドシェイクの失敗」は、ハンドシェイクが失敗し、SSL / TLS接続が存在しないことを意味します。openssl
シェル(またはCMDなど)が終了し、入力データがサーバーに送信されるのを待たないことがわかります。「戻りコード0を検証する」とは、サーバーの証明書に問題が見つからなかったことを意味します。これは、まったくチェックされなかったか、チェックされて良好だったためです(OpenSSLのチェックでは、すべてをカバーしているわけではありません)。この場合、プロトコルを知ることで、後者のケースが当てはまると推測できます。
アラートの受信bad certificate
(コード42)は、サーバーが証明書による認証を要求することを意味しますが、ユーザーは認証を行わなかったため、ハンドシェイクエラーが発生しました。ラインの前に数行SSL handshake has read ... and written ...
あなたがライン表示されるはずAcceptable client certificate CA names
おそらく始まる行が続く通常のCAを識別し、いくつかの行が続き、Client Certificate Types
そしておそらくいくつかについてのRequested Signature Algorithms
あなたのOpenSSLのバージョンと交渉したプロトコルに応じて。
「受け入れ可能な」リストでCAが発行した証明書を見つけるか、空であった場合は、信頼できるCAを示すサーバーに関するドキュメントを探すか、サーバーオペレーターまたは所有者に問い合わせて、一致する秘密キー、両方PEM形式で、;で指定し-cert $file -key $file
ます。PEMで可能なように、1つのファイルに両方がある場合は、-cert $file
。別の形式のファイルがある場合は、指定するか、ここで検索して、おそらくスーパーユーザーとsecurity.SXを検索します。さまざまな証明書と秘密鍵の形式の変換に関するQ&Aがすでに多くあります。証明書が「チェーン」または「中間」証明書(または1つ以上)を検証する必要がある場合、サーバーの構成方法に応じてパブリックCA(社内CA)からの証明書がよくあることですが、s_client
トリックが必要です:チェーン証明書をシステムのトラストストアに追加するか、サーバーと送信する必要のあるチェーン証明書を検証するために必要なCA証明書を含むローカル/一時トラストストアを作成します。
そのような証明書がない場合は、証明書を取得する必要があります。これは、回答するためにさらに詳細を必要とする別の質問であるか、証明書認証を使用せずにサーバーに接続する方法を見つける必要があります。再度ドキュメントを確認するか、オペレーターまたは所有者に問い合わせてください。
編集:クライアントキーと証明書チェーン、およびJavaのサーバーアンカーを持っている可能性があるコメントから表示されます。チェックすると、そのケースを完全にカバーする良い既存の答えが表示されないので、これはおそらくうまく検索できませんが:
# Assume Java keystore is type JKS (the default but not only possibility)
# named key.jks and the privatekey entry is named mykey (ditto)
# and the verify certs are in trust.jks in entries named trust1 trust2 etc.
# convert Java key entry to PKCS12 then PKCS12 to PEM files
keytool -importkeystore -srckeystore key.jks -destkeystore key.p12 -deststoretype pkcs12 -srcalias mykey
openssl pkcs12 -in key.p12 -nocerts -out key.pem
openssl pkcs12 -in key.p12 -nokeys -clcerts -out cert.pem
openssl pkcs12 -in key.p12 -nokeys -cacerts -out chain.pem
# extract verify certs to individual PEM files
# (or if you 'uploaded' PEM files and still have them just use those)
keytool -keystore trust.jks -export -alias trust1 -rfc -file trust1.pem
keytool -keystore trust.jks -export -alias trust2 -rfc -file trust2.pem
... more if needed ...
# combine for s_client
cat chain.pem trust*.pem >combined.pem
openssl s_client -connect host:port -key key.pem -cert cert.pem -CAfile combined.pem