Java 来自Windows命令行的SOAP Web服务中的SSL证书问题

Java 来自Windows命令行的SOAP Web服务中的SSL证书问题,java,web-services,security,ssl,soap,Java,Web Services,Security,Ssl,Soap,当我在eclipse上运行Java项目时,它能够通过SOAP Web服务访问应用程序服务器。但我在命令提示符下以JAR文件的形式运行SSL证书时遇到了问题。我还验证了进口的证书。我想知道为什么它只在命令提示符下失败。需要配置什么?请告知 C:\Users\Admin\Desktop>java -jar Javaapp.jar [Ljava.lang.StackTraceElement;@4ec6a292 javax.net.ssl.SSLHandshakeException: sun.se

当我在eclipse上运行Java项目时,它能够通过SOAP Web服务访问应用程序服务器。但我在命令提示符下以JAR文件的形式运行SSL证书时遇到了问题。我还验证了进口的证书。我想知道为什么它只在命令提示符下失败。需要配置什么?请告知

C:\Users\Admin\Desktop>java -jar Javaapp.jar
[Ljava.lang.StackTraceElement;@4ec6a292
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
        at sun.security.ssl.Alerts.getSSLException(Unknown Source)
        at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
        at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
        at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
        at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
        at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
        at sun.security.ssl.Handshaker.processLoop(Unknown Source)
        at sun.security.ssl.Handshaker.process_record(Unknown Source)
        at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source
)
        at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
        at sun.security.ssl.AppOutputStream.write(Unknown Source)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.flush(Unknown Source)
        at java.io.FilterOutputStream.flush(Unknown Source)
        at org.apache.commons.httpclient.methods.StringRequestEntity.writeReques
t(StringRequestEntity.java:150)
        at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequ
estBody(EntityEnclosingMethod.java:495)
        at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodB
ase.java:1973)
        at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.j
ava:993)
        at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Htt
pMethodDirector.java:397)
        at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMe
thodDirector.java:170)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
a:396)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
a:324)
        at com.thunderhead.utility.Thunderheadrelease.sendHTTPPostRequest(Thunde
rheadrelease.java:280)
        at com.thunderhead.utility.Thunderheadrelease.main(Thunderheadrelease.ja
va:108)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find vali
d certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
        at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
        at sun.security.validator.Validator.validate(Unknown Source)
        at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
        at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
        at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Sour
ce)
        ... 21 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Sourc
e)
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown
Source)
        at java.security.cert.CertPathBuilder.build(Unknown Source)
        ... 27 more
Status Code : -1
Status Code:-1
Post Request Failed - null

异常意味着JVM无法验证服务器证书。
需要在JVM使用的信任存储中包含服务器证书的根证书,并确保使用正确的JVM


默认的信任库位于JVM主页的
jre/lib/security/cacerts
中。还可以使用
-Djavax.net.ssl.trustStore=/path/to/trusstore

进行配置。您需要在JVM使用的信任存储中包含服务器的根证书(默认为jre/lib/security/cacerts),谢谢。证书已使用keytool-import-trustcacerts导入。然后检查您使用的JVM是否正确,或者您是否在eclipse ExecutionYea中未设置其他信任库。计算机上有多个JRE版本。我们将证书复制到最新版本。现在很好用。谢谢你的帮助。我应该把它作为答案发布吗?