Wgetでクライアント証明書を使用できません。ドキュメントでは、-certificateフラグの使用について説明しています。
証明書フラグの使用は明らかです。クライアント証明書のPEMバージョンを使用するように設定しました。
しかし、接続すると次のエラーが発生します。
HTTP request sent, awaiting response... Read error (error:14094410:SSL routines:
SSL3_READ_BYTES:sslv3 alert handshake failure; error:140940E5:SSL routines:SSL3_
READ_BYTES:ssl handshake failure) in headers.
Giving up.
sslハンドシェイクの失敗は、クライアントが正しいクライアント証明書を提供しなかったことを意味します。それでも、私が使用するクライアント証明書はブラウザで動作します。
注:サーバーでクライアント認証を無効にすると、wgetが接続できます。注:curlの使用をお勧めしますが、切り替えは避けたいです。
私はこれについて1週間勉強しました。最後に、このページから得た助けを借りて勉強しました。
接続に使用したコマンドは次のとおりです。
wget --ca-cert=/etc/ssl/certs/winhostname.pem --certificate=/etc/ssl/private/linuxhost.pem \
--private-key=/etc/ssl/private/linuxhost.key https://winhostname.home.net:8443/winhosturl.asmx
SSLクライアント証明書認証がサーバーに対して機能していることを確信していますか?
証明書(PKCS12形式)を取得し、PEM形式の証明書とキーファイルに変換して、wgetで問題なく使用できることをテストしました。
私は3つのエラー状態を引き起こす可能性がありますが、どれもあなたが報告しているものと一致しません。
私はnginxを使用しています。あなたはあなたが何を使っているかについては触れていないので、Apacheが同じ応答を返すかどうかはわかりません。
証明書とキーを取得し、それをPKCS12に組み合わせて(または、ブラウザーがその形式をサポートしている場合は、PEMとしてインポートして)、すべてがその前面で最初に機能することを確認することをお勧めします。
すでにそれを行っている場合は、別のマシンから試して、使用しているOpenSSLのバージョンに問題がないことを確認してください。
最後に、OpenSSLをs_clientモードで使用してみます。
openssl s_client -cert cert.pem -key req.pem -connect Host:port -debug
そして、物事がそのレベルで機能するかどうかを確認します。その場合、wgetで何かがおかしくなり、再構築または再インストールする必要がある場合があります。そうでない場合、デバッグ出力のレベルは、wgetのデバッグ出力よりも問題を特定するのに役立ちます。
私はこのようにwgetを正常に使用しました:
"C:\program files\GnuWin32\bin\wget" --no-check-certificate --certificate=C:\Users\Alex\xxx.pem --private-key=C:\Users\Alex\xxx.pem --input-file=retain.url --output-document=retain.xml
--private-key option
。 keep.urlには https://bla.bla.bla があります
ただし、「PEMパスフレーズを入力してください」というメッセージが表示されるようになりました。
butプロンプトを回避する方法を知っている人はいますか?
Wgetがポート80に接続している可能性はありますか?そのエラーは、誤ってHTTPを80でリッスンしていて、443-wgetがSSLを話そうとして、必要な応答を得られなかったときにテストで受け取るエラーと非常に似ています。
ネットワークキャプチャを取得し、Wiresharkにロードします。これにより、SSL/TLSレベルで何が失敗しているかがより明確にわかるはずです。
0.9.8のようなバージョンのSSLv3には問題がありました。
Openssl s_clientに-no_ticketを渡してみるか、-ssl2が機能するか