首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Axis2 2/Rampart自签名证书

Axis2 2/Rampart自签名证书
EN

Stack Overflow用户
提问于 2012-06-21 10:48:19
回答 3查看 4.4K关注 0票数 0

我试图使用安全的客户端访问web服务。

我生成了两个文件:

nb19200.pkcs12

server.jks

我在tomcat中粘贴了服务器keystore并将pkcs12上传到我的浏览器,一切都很好。

现在,在我的客户端应用程序中,我尝试了以下内容:

首先,导出服务器证书,我使用了以下命令:

** keytool -exportcert -alias servercert -file servercert.cer -keystore server.jks -storepass

然后将其导入密钥存储库,其中没有任何内容:

*** keytool -importcert -keystore truststore.jks -alias servercert -file servercert.cer -v trustcacerts -noprompt -storepass

我的代码如下:

代码语言:javascript
复制
    System.setProperty("javax.net.ssl.trustStore","servertrust.jks");
    System.setProperty("javax.net.ssl.trustStorePassword", "password");

    //To be able to load the client configuration from axis2.xml
    ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("client-repo", null);

    SecureServiceStub stub = new SecureServiceStub(ctx,"https://localhost:8443/axis2/services/SecureService");

    ServiceClient sc = stub._getServiceClient();

    sc.engageModule("rampart");

    //call the service etc.

好的,通过这个配置,我得到了以下错误:

由:引起的java.net.SocketException:远程主机关闭的连接

如果我注释前两行,所得到的错误是:

由: sun.security.provider.certpath.SunCertPathBuilderException:无法找到被请求的目标的有效证书路径引起的

那我做错什么了?

我完全迷路了。

更新完整代码:

http://pastebin.com/8xTYK3tY

堆栈跟踪:

代码语言:javascript
复制
Exception in thread "main" org.apache.axis2.AxisFault: Connection refused: connect
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:197)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at tutorial.rampart.client.SecureServiceStub.add(SecureServiceStub.java:191)
at tutorial.rampart.client.SecureServiceCGClient.main(SecureServiceCGClient.java:36)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:564)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140)
at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:130)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-22 14:22:23

我找到了解决办法。

我错过了这个:

代码语言:javascript
复制
System.setProperty("javax.net.ssl.keyStore","keys/client.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
票数 0
EN

Stack Overflow用户

发布于 2012-06-21 11:23:58

查看定义密钥存储路径的行:

代码语言:javascript
复制
System.setProperty("javax.net.ssl.trustStore","servertrust.jks");

但是您提到了文件名是server.jks。因此,如果是这样的话,这就是为什么代码找不到正确的cert文件。

更新:

当使用ssl (https)时,服务器根据'CN‘搜索正确的证书。CN必须等于主机的名称。根据您发布的URL,我看到您正在使用localhost,因此您必须使CN等于您的计算机名(您可以通过右键单击我的计算机->propeties来查看它)。

票数 1
EN

Stack Overflow用户

发布于 2012-06-22 13:03:58

请确保服务正在监听端口8443。检查URL https://localhost:8443/axis2/services/SecureService存在。您可以尝试此URL https://localhost:8443/axis2/services/SecureService?wsdl,并查看是否可以从该URL获取服务的WSDL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11136512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档