2013-09-28 54 views
4

我想在Jersey 2.3客戶端上使用Apache連接器進行HTTPS連接。如何在Jersey 2.3客戶端上使用Apache Httpclient

我試過如下:

ClientConfig clientConfig = new ClientConfig(); 
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, new PoolingClientConnectionManager()); 

ApacheConnector connector = new ApacheConnector(clientConfig); 
clientConfig.connector(connector); 

Client client = ClientBuilder.newBuilder() 
    .withConfig(clientConfig) 
    .sslContext(sslContext) 
    .hostnameVerifier(getHostnameVerifier()) 
    .build(); 

然而,似乎作爲服務器的證書被拒絕,因爲不信任(sun.security.provider.certpath.SunCertPathBuilderException的SSLContext中被忽略:無法找到有效的認證路徑到要求的目標)

如果我刪除「.withConfig(clientConfig)」部分,SSL連接工作正常,但顯然沒有Apache連接器。有沒有辦法使用我自己的ClientConfig與Apache連接器以及我自己的SSLContext?

回答

4

你需要配置SSL的Apache連接器。

ClientConfig clientConfig = new ClientConfig(); 
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, new PoolingClientConnectionManager()); 
//config your ssl for apache connector 
SslConfigurator sslConfig = SslConfigurator.newInstance(); 
clientConfig.property(ApacheClientProperties.SSL_CONFIG, sslConfig); 

ApacheConnector connector = new ApacheConnector(clientConfig); 
clientConfig.connector(connector); 

Client client = ClientBuilder.newBuilder() 
.withConfig(clientConfig) 
.hostnameVerifier(getHostnameVerifier()) 
.build(); 
+1

這很有效!唯一的問題是,這個類org.glassfish.jersey.SslConfigurator不允許選擇使用的密碼。我需要像 sslConfigurator.setEnabledCipherSuites(新的String [] { 「TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256」, 「TLS_RSA_WITH_AES_128_CBC_SHA256」, 「TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA」, 「TLS_RSA_WITH_AES_128_CBC_SHA」}); – Uli

0

不確定你是否使用apache連接器。但你可以使用球衣和https這樣的客戶端連接:

ClientConfig config = new DefaultClientConfig(); 
SSLContext ctx = SSLContext.getInstance("SSL"); 
ctx.init(null, myTrustManager, null); 
config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(hostnameVerifier, ctx)); 
Client client = Client.create(config); 
+0

我會試試看,謝謝!我使用Apache連接器的原因是我想支持使用帶有用戶名和密碼的HTTP代理。沒有Apache連接器,我找不到這種方法。 – Uli

+1

它看起來像你提出的是舊的澤西1.0語法,而不是2.x – Uli

+0

一個原因可能是https://jersey.java.net/apidocs/2.23/jersey/org/glassfish/jersey/client/HttpUrlConnectorProvider。 html#SET_METHOD_WORKAROUND在IBM的JVM上不起作用。 –

相關問題