我开发了一个访问ssl Web服务的Java应用程序。
我使用带有基本身份验证的java 6 jax-ws来访问此ws。
我配置了本地计算机(Windows)来查询此Web服务。
从证书的角度来看,我设置了2个密钥库:一个包含2个条目的客户端密钥库:一个用于我的私钥和 一个用于我的证书,由CA签名。另一个密钥库,信任库,为我的应用服务器(该客户为ws)保留一个条目。
这是一张自签名证书,当然,我的客户对此抱怨。我发现here是此错误的解决方法,我在我的信任库中导入了此证书。现在我可以从本地机器查询ws。
在PreProduction机器(RHEL 5)上,我收到相同的错误消息"
PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到所请求目标的有效证书路径"
我试着做同样的事情。但是当我跑步时:
java InstallCert my_ip:ssl_port changeit
我得到以下输出
Loading KeyStore cacerts...
Opening connection to my_ip:ssl_port...
Starting SSL handshake...
Exception in thread "Main Thread" java.lang.NoClassDefFoundError: javax/crypto/SunJCE_b
at javax.crypto.KeyGenerator.a(DashoA13*..)
at javax.crypto.KeyGenerator.<init>(DashoA13*..)
at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
at com.sun.net.ssl.internal.ssl.JsseJce.getKeyGenerator(JsseJce.java:223)
at com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.<init>(RSAClientKeyExchange.java:91)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:744)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:238)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:958)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1203)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1230)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1214)
at InstallCert.main(InstallCert.java:58)
类javax.crypto.sunJCE_b jre / lib中有一个jce.jar。你觉得怎么样?
另一个问题:我在Windows中获得的信任库(包含导入的服务器证书的信任库)不可移植?
我在windows上使用的那个,我可以在linux上复制它,不是吗?
答案 0 :(得分:0)
正如你所说jar存在,你可能需要将它添加到你的类路径,如下所示:
java -cp /path/to/jce.jar:. InstallCert my_ip:ssl_port changeit
要仅列出类路径,请参阅https://stackoverflow.com/a/17541055/1587329。
至于
另一个问题:我在Windows中获得的信任库(包含导入的服务器证书的信任库)不可移植?
我在windows上使用的那个,我可以在linux上复制它,不是吗?
答案 1 :(得分:0)
我在使用installCert应用程序时遇到了类似的问题。尝试修改Java Crypto Policys。从oracle,JCE for Java 7下载文件。
您只需下载并替换JAVA_HOME / jre / lib / security中的现有文件即可。 这应该有用。