2012-04-07 175 views
0

我已经创建了带有私钥的证书和密钥库的信任关系。 我已经把下面的代码,加载了trsustore管理器和keystore管理器,然后创建SSL上下文的实例。2路SSL :: SSL握手失败错误

当我向webservice发出请求时,会调用以下代码。 我们正在使用axis2 API。

SSLContext context = SSLContext.getInstance(protocolVersion); 
context.init(keyManagers, trustManagers, null); 

SSLSocketFactory socketFactory = context.getSocketFactory(); 

SslContextedSecureProtocolSocketFactory secureProtocolSocketFactory = new SslContextedSecureProtocolSocketFactory(context); 

Protocol authhttps = new Protocol("https", secureProtocolSocketFactory, port); 
HttpClient httpclient = new HttpClient(); 
httpclient.getHostConfiguration().setHost(hostname, port, authhttps); 
GetMethod httpget = new GetMethod("/RTAPService/RTAPService"); 

试图与此以及 GetMethod HTTPGET =新GetMethod( “/”);

httpclient.executeMethod(httpget); 

它给了我下面的错误..

org.apache.axis2.AxisFault: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

其中hostname是 “qartap.csnet.assurity.sg” 和我的web服务URL为 “https://qartap.csnet.assurity.sg:8443/RTAPService/RTAPService

问题是,当我注册我的“HTTPS”协议,它影响我的整个应用程序,我可以以某种方式设置这些仅适用于特定的主机或特定的web服务。

要么我想设置此使用主机名或创建新的协议本身...我尝试了解决方案中给出的方法here。但它给了我下面的例外..

虽然将Web服务URl传递到生成的存根构造函数,我用我自己定制的“myHTTPS”从URL替换“HTTPS”。

The system cannot infer the transport information from the myhttps://serverUrl:7001/app/services/RTAPDevService.RTAPDevServiceHttpSoap12Endpoint/ URL. 
+1

当你尝试过什么事?当然8433应该是8443? – EJP 2012-04-07 11:10:02

+0

“* [*]可在互联网上的其中一个罐子*上使用*。互联网上有很多罐子。我想你说的是[this](http://code.google.com/p/jsslutils/wiki/ApacheHttpClientUsage)。 – Bruno 2012-04-07 12:32:44

+0

我已经包含了上面提到的代码,并给予客户端发布..Monday他们会测试它,如果它工作或我会回复你或错误,我不能从本地环境访问webservice由于安全原因。 ...我只想问你是否还需要除了上面提到的代码之外还有其他任何东西...是的端口是8443,我正在使用链接中提到的jar文件.... – 2012-04-07 17:05:11

回答