当通过 HTTPS 对使用自签名证书的服务器运行提交 ( <xforms:submission>
) 时,我在日志中收到如下异常:
ERROR XFormsServer - XForms - submission - xforms-submit-error throwable: sun.security.provider.certpath.SunCertPathBuilderException
: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
我该如何解决这个问题?
最佳答案
当发出 HTTPS 请求时,Java 会检查服务器的证书。由于证书是自签名的,Java 无法验证它是否是合法证书,因此会出现错误消息“无法找到请求目标的有效证书路径”。
您需要做的是:
- 使用“真实”证书(例如由 Verisign 签名)。
- 将服务器的证书添加到“信任存储”,并使用该信任存储设置应用程序服务器的 JVM。
执行上述第 2 步的具体步骤取决于您的环境,但本质上是:
如果处理请求的服务器在 Java key 存储中拥有其自签名 key ,请将其导出。这里
your-server
是您的服务器 key 存储的别名,mykey.cer
是您正在创建的文件,keystore
是您的 key 存储文件,your-password
是您的 key 存储的密码。keytool -export -alias your-server -file mykey.cer -keystore keystore -storepass your-password
在运行 Orbeon Forms 的服务器(即发起 HTTPS 请求的服务器)上,将
mykey.cer
导入信任存储区。这里的truststore
是您的信任存储文件,如果您没有现有的信任存储,它可能是您正在创建的新文件。keytool -import -v -trustcacerts -alias your-server -file mykey.cer -keystore truststore -storepass your-password
在启动运行应用程序服务器(例如 Tomcat)和 Orbeon Forms 的 VM 时添加以下
-D
参数:-Djavax.net.ssl.trustStore=path/to/your/truststore -Djavax.net.ssl.trustStorePassword=您的密码
关于xforms - 使用 Orbeon Forms,为什么我使用自签名证书向服务器提交失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980946/