SSLと証明書を使用してHTTPClientを使用します
-
03-10-2019 - |
質問
私はHTTPSとSSLの概念に精通していますが、最近いくつかの開発を始めましたが、少し混乱していることがわかりました。
要件は、スキャナーに接続されたマシンで実行される小さなJavaアプリケーションを書くことでした。ドキュメントがスキャンされると、これはピックアップされ、ファイル(通常はPDF)がインターネットを介してアプリケーションサーバーに送信して処理します。 Apache Commons LibrariesとHttpClientを使用してアプリケーションを書きました。
2番目の要件は、SSLを介して接続し、証明書を必要とすることでした。 httpclientページでガイダンスに従って、私はconvributionsページからauthslprotocolsocketafactoryを使用しています。
コンストラクターは、キーストア、キーストアパスワード、トラストストア、トラストストアパスワードを取得できます。初期テストとして、DBAは開発Webサーバーの1つでSSLを有効にし、IEにインポートすると正常に接続できる.p12ファイルを提供してくれました。
私は、キーストアとトラストストアの間で少し混乱しており、キートールを使用する必要があるステップがあります。 P12をキーストアファイルにインポートしようとしましたが、エラーが発生しました。
keytool error: java.lang.Exception: Input not an X.509 certificate
P12をInternet Explorerにインポートし、.cerとしてエクスポートするという提案に従い、キーストアに正常にインポートできます。これをAuthSlProtocolsocketFactoryのキーストアの議論として提供すると、意味のないエラーが得られますが、TrustStoreとして試してみると、それがうまく読むように見えますが、最終的にはわかります
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
いくつかのステップを逃したかどうか、私はSSLと相互認証を完全に誤解しているか、これがサーバー側の誤解です。
誰かが提案を提供したり、私がこれを理解するのに役立つかもしれないリソースに向かって私を向けてもらえますか?
解決
キーストアには、プライベートキーと関連する証明書があります。トラストストアは、信頼できる証明書を保持しているため、証明書のパスの構築と検証に使用できます。
役立つ可能性のあるリンクは次のとおりです。
他のヒント
証明書ファイルがこれらの前後に何も持っていないことを確認してください。
----- BEGIN証明書-----
-----終了証明書-----