私が最終的に見つけた解決策は、SSLSocketFactoryプロバイダープロパティをカスタマイズされたSSLSocketFactoryに設定することです。似たような問題を抱えている人を助けることができればと思いますプログラムの先頭で
コールこれを:MySSLSocketFactoryがどのように見えるかここで
Security.setProperty("ssl.SocketFactory.provider", MySSLSocketFactory.class.getCanonicalName());
は(それはまた、接続タイムアウトを設定します)です:
public class MySSLSocketFactory extends SSLSocketFactory {
private SSLContext sslContext = SSLContext.getInstance(Const.Ssl.PROTOCOL_SSL);
public MySSLSocketFactory() throws NoSuchAlgorithmException, KeyManagementException {
this.sslContext.init(
null,
new TrustManager[] { new MyTrustManager(false) },
new SecureRandom());
}
@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
throws IOException {
socket.connect(new InetSocketAddress(host, port), Const.Ssl.CONNECT_TIMEOUT);
socket.setSoTimeout(Const.Ssl.DATA_TIMEOUT);
return this.sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
}
@Override
public String[] getDefaultCipherSuites() {
return this.sslContext.getSocketFactory().getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return this.sslContext.getSocketFactory().getSupportedCipherSuites();
}
@Override
public Socket createSocket(String host, int port)
throws IOException, UnknownHostException {
return this.createSocket(new Socket(), host, port, true);
}
@Override
public Socket createSocket(InetAddress address, int port)
throws IOException {
return this.createSocket(new Socket(), address.getHostAddress(), port, true);
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort)
throws IOException, UnknownHostException {
return this.createSocket(new Socket(), host, port, true);
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort)
throws IOException {
return this.createSocket(new Socket(), address.getHostAddress(), port, true);
}
はhttp://stackoverflow.com/questions/い2145431/https-using-jersey-clientこれに答えますか? –
いいえ、その投稿はJersey経由でHTTPS URLにリクエストを送信する方法を教えています。私はこれを行う方法を知っています(最後のスニペットに示されています)。私が知らないのは、JersyクライアントにHttpsURLConnectionで設定したSslContextを使用させる方法です。私がこれをやりたい理由は、Jerseyクライアント上でSslContextを明示的に設定するためのREST APIクライアントコードを編集する権限がないからです。 – Lee