https URL を取得するために HttpClient 4 を使用しています。サーバーには有効な証明書があり、実際、Chrome から同じ https URL にアクセスしても警告なしで正常に動作します。
ただし、Javaコードから実行すると、次のようになります。
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
同じコードは、1 つの https リンクでは機能しますが、別のリンクでは機能しません。機能している証明書と機能していない証明書の主な違いは次のとおりです。
働くものはRC4_128を使用します
例外をスローするものはCAMELLIA 256 CBCを使用します
その後、Java が Camellia をサポートしていないことがわかりました。http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6537034およびhttp://en.wikipedia.org/wiki/Comparison_of_TLS_Implementations#Encryption_Algorithmsを参照してください。
このサポートを HttpClient コードに追加するにはどうすればよいですか?
BouncyCastle ライブラリとセキュリティ プロバイダを追加しました
static {
Security.addProvider(new BouncyCastleProvider());
}
これにより、Camellia のサポートが追加されると思われます。
しかし、まだ運がありません。