2017-06-12 33 views
0

私はapache httpclient 4.5.3とapache httpcore 4.4.6を使用しています。私はPOST呼び出しを行うことによってSOAP WSを呼び出す必要がありますapache httpclient pfxファイル

彼らは私にpfx証明書を与えました。私はSOAP UIでSOAP UIを使用していましたが、すべてうまくいきました。私はWSを呼び出すことができ、それは私に応答を与える。証明書が有効なので

私は同じことを行うにはhttpclientを設定しようとしています。ここに私が書いたコード:

KeyStore clientStore = KeyStore.getInstance("PKCS12"); 
InputStream instream = Thread.currentThread().getContextClassLoader().getResourceAsStream(keystoreName); 
try { 
    clientStore.load(instream, keyStorePwd.toCharArray()); 
} finally { 
    instream.close(); 
} 
SSLContext sslCtx = SSLContext.getDefault(); 
SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(sslCtx); 
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("https", sslConnectionFactory).register("http", new PlainConnectionSocketFactory()).build(); 
PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager(registry); 
HttpClientBuilder hcb = HttpClientBuilder.create(); 
hcb.setConnectionManager(pcm); 
CloseableHttpClient httpClient = hcb.build(); 

私はWSをうまく呼び出すことができません。私は何かが欠けていると確信していますが、私は逃しているものを見つけることができません

誰かが私に進める方法を提案してもいいですか?

はあなた アンジェロ

答えて

0

は私が欠けていたものを考え出しありがとうございました。私はここで私の解決策をここに掲載したいと思います

SSLContextを慎重に設定しなかったので、基本的に私は間違っていました 私は注意深く設定しなければなりませんでした。

これは私が書いたものである:

KeyStore clientStore = KeyStore.getInstance("PKCS12"); 
InputStream instream = Thread.currentThread().getContextClassLoader().getResourceAsStream(keystoreName); 
try { 
    clientStore.load(instream, keyStorePwd.toCharArray()); 
} finally { 
    instream.close(); 
} 
//Trust everybody 
X509TrustManager tm = new X509TrustManager() { 
    @Override 
    public void checkClientTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException {} 
    @Override 
    public void checkServerTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException {} 
    @Override 
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;} 
}; 
SSLContext sslCtx = SSLContext.getInstance("TLS"); 
KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
kmfactory.init(clientStore, keyStorePwd != null ? keyStorePwd.toCharArray() : null); 
KeyManager[] keymanagers = kmfactory.getKeyManagers(); 
sslCtx.init(keymanagers, new TrustManager[]{tm}, null); 
SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(sslCtx); 
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("https", sslConnectionFactory).register("http", new PlainConnectionSocketFactory()).build(); 
PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager(registry); 
HttpClientBuilder hcb = HttpClientBuilder.create(); 
hcb.setConnectionManager(pcm); 
CloseableHttpClient httpClient = hcb.build(); 

今、すべてが

かなり良い作品をありがとうございました

アンジェロ

関連する問題