[解決済み] クライアント証明書を使用しようとしたときのsslv3 alert handshakeの失敗の解決法
質問
認証のために証明書を必要とするサービスに接続しようとしています。プロセスは、私がサービスにCSRファイルを送信することです。サービスはCSRに署名し、接続に使用する証明書を私に送ります。
-
以下のコマンドラインでCSRを生成しました。
openssl req -new -nodes -newkey rsa:2048 -keyout cert.key -out cert.csr
-
cert.csrの中身を取り出し、送信しました。彼らはクライアント証明書を生成し、私はPEMファイルを取り戻しました。
-
次に、SSLCERT の証明書ファイルを curl() に使用し、cert.key の秘密鍵を CURLOPT_SSLKEY - (ステップ 1 で取得) として提供して、接続を試みました。
-
で失敗します。
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
このプロセスの中で、私は何を間違えているのでしょうか?
動作する 秘密鍵を含むテスト証明書をサービスから受け取って試したところ(自己署名証明書)。しかし、私のCSRから生成された証明書を使い、私の秘密鍵を鍵として使用すると、ハンドシェイクに失敗してエラーになります。
だから、他の人が解決策を調べるときに見つけた、openssl / curlがv3/TLSなどをサポートしていないこととは関係ないと分かっている。
以下は、私が実行したものです。
curl -i -v --request POST https://service.com/ --cert clientcert.pem --key private_key.pem --cert-type pem --tlsv1.1 --insecure
* Connected to service.com (1xx.xxx.xxx.xx) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Request CERT (13):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS handshake, CERT verify (15):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS alert, Server hello (2):
* error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
* Closing connection 0
以下のバージョンが動作しています: curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
解決するには?
明確な回答ではありませんが、コメント欄には書ききれないほどです。
私は、発行者が間違っている証明書を渡されたのではないかと考えています(サーバーの
可能性がある
は、より具体的なアラートコードを使用してください)、または間違ったサブジェクトを使用してください。その証明書があなたの秘密鍵と一致することは分かっています。
curl
と
openssl client
しかし、実際にそれが希望するCAと一致するかどうかはわかりません。なぜなら、あなたのcurlはopensslを使用しており、openssl SSLクライアントは設定されたクライアント証明書がcertreq.CAと一致するかどうかを強制しないためです。
行う
openssl x509 <clientcert.pem -noout -subject -issuer
と、テスト用P12の証明書でも同じように動作します。する
openssl s_client
(を確認し(あるいは確認したものを)、その下を見る。
Acceptable client certificate CA names
その名前、またはそのいずれかが、あなたの証明書の発行元と一致するはずです。もしそうでなければ、それはあなたの問題であり、あなたが正しい場所に正しい方法でCSRを提出したことを彼らに確認する必要があります。また、地域やビジネスライン、テスト版とプロッド版、アクティブ版とペンディング版など、さまざまな制度がある可能性があります。
あなたの証明書の発行者が希望するCAと一致する場合、そのサブジェクトを作業用(テストP12)のものと比較してください:両者は同じようなフォーマットですか?もし、それが可能なら、test-P12とまったく同じか、できるだけ近いサブジェクト名のCSRを生成して提出し、よりうまく動作する証明書が生成されるかどうかを確認してください。(新しい
キー
しかし、もしそうするのであれば、どの証明書がどのキーと一致するかを記録しておくと、それらが混同されずに済みます)。それでもだめなら、証明書の拡張子を
openssl x509 <cert -noout -text
は、KeyUsage、ExtendedKeyUsage、Policy、Constraints、あるいは非標準的なものなど、サブジェクト認証に関連する可能性のある差異がないか確認します。
他のすべてが失敗した場合、サーバーオペレータ(複数可)に問題について彼らのログが何を言っているか尋ねるか、またはあなた自身がログを見るアクセス権を持っている場合。
関連
-
[解決済み] ssl : 証明書を読み込むことができません
-
[解決済み] Firefoxです。"このページの一部は、画像など安全ではありません。" 何をもって安全でないと判断するのでしょうか?
-
[解決済み] javax.net.ssl.SSLException: 利用可能な PSK がありません。再開不能
-
[解決済み] openssl s_client -cert: クライアント証明書がサーバーに送信されたことを証明する
-
[解決済み] クライアント証明書を使用しようとしたときのsslv3 alert handshakeの失敗の解決法
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み] .pemを.crtと.keyに変換する
-
[解決済み] IISExpressでのSSL接続・接続解除について
-
[解決済み] Letsencryptが既存の証明書にドメインを追加する【非公開
-
[解決済み] SSL: エラー:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ssl : 証明書を読み込むことができません
-
[解決済み] Amazon S3でのSSL化の強制
-
[解決済み] javax.net.ssl.SSLException: 利用可能な PSK がありません。再開不能
-
[解決済み] Certbot が見つかりません。
-
[解決済み] Curl CURL (51) SSL エラーを修正: 代替となる証明書のサブジェクト名が一致しません。
-
[解決済み] openssl s_client -cert: クライアント証明書がサーバーに送信されたことを証明する
-
[解決済み] クライアント証明書を使用しようとしたときのsslv3 alert handshakeの失敗の解決法
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み] HTTPSのクエリ文字列は安全ですか?
-
[解決済み] node.js、socket.ioのSSL化