Jac*_*ard 4 authentication ssl ejb glassfish java-ee
我正在尝试从Web服务请求数据,该服务需要客户端提供客户端证书.服务器使用SSL进行所有通信,并使用自签名证书.我给了Netbeans服务的WSDL文件,它生成了客户端代码wsimport
.
当我的客户端代码在常规Java应用程序中编写时,我没有任何问题; 我将信任存储设置为cacerts
包含服务器证书的文件,将密钥存储设置为服务器管理员以JKS格式提供的文件,包含2个密钥 - 客户端私钥和服务器的公钥,构建请求对象,然后发送请求.
当我将其移至企业Java环境时,问题就出现了.要求规定代码必须是在Glassfish应用程序服务器上运行的Enterprise Archive中的Enterprise JavaBean.看来Glassfish有自己的安全设置,可以覆盖JVM的设置.当运行包含Web服务调用的EJB方法时,SSL协商失败:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
.我不知道如何像我的JVM设置一样设置Glassfish的安全设置,任何人都可以解释Glassfish的安全设置吗?我所做的研究只展示了如何将Glassfish设置为Web服务服务器,而不是Web服务客户端.
我有一个服务器的.cer证书文件,我把它添加到我的信任存储区,使用Java keytool
将它添加到默认cacerts
文件中.根据http://blog.johnryding.com/post/1548502059/acquire-an-ssl-certificate-for-your-java-programs-中的步骤,修改包含自签名证书的cacerts
文件会更好吗?双赢?InstallCert
我有信任存储文件,密钥存储文件,以及.cer证书文件和.p12浏览器证书,存储在$ JAVA_HOME/jre/lib/security和$ JAVA_HOME/lib/security中.
我正在使用Netbeans 6.9.1和Glassfish 3.1 Final.下面的相关代码段是从我的EJB复制而来的.该异常发生在最后一行.
System.setProperty("javax.net.ssl.trustStore", "C:\\jssecacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
System.setProperty("javax.net.ssl.keyStore", "C:\\userCertificate.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
RequestObject request = new RequestObject;
request.setQuery("some data");
request.setUsername("user");
request.setPassword("pass");
Service service = new Service();
Endpoint port = service.getWebServicePort();
Result result = port.specificWebServiceMethod(request);
我遇到了雅克普里查德描述的同样的例外情况:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Run Code Online (Sandbox Code Playgroud)
我解决了它使用以下命令在cacerts.jks和keystore.jks中导入根证书:
/usr/java/jdk1.6.0_25/bin/keytool -import -trustcacerts -file root_ca.cer -alias rootca -keystore cacerts.jks
/usr/java/jdk1.6.0_25/bin/keytool -import -trustcacerts -file root_ca.cer -alias rootca -keystore keystore.jks
Run Code Online (Sandbox Code Playgroud)
重要的是要说别名rootca
是我自己定义的名称来标记证书.您也可以选择任何名称.
归档时间: |
|
查看次数: |
9440 次 |
最近记录: |