2

当通过 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) 

我该如何解决这个问题?

4

1 回答 1

3

发出 HTTPS 请求时,Java 会检查服务器的证书。由于证书是自签名的,Java 无法验证它是合法证书,因此出现错误消息“无法找到到请求目标的有效证书路径”。

您需要做的是:

  1. 使用“真实”证书(例如由 Verisign 签名)。
  2. 将服务器的证书添加到“信任库”,并设置应用程序服务器的 JVM 使用该信任库。

执行上述 #2 的具体步骤取决于您的环境,但本质上是:

  1. 如果处理请求的服务器在 Java 密钥存储中具有其自签名密钥,则将其导出。这your-server是您的服务器密钥库的别名,mykey.cer是您正在创建的文件,keystore是您的密钥库文件,并且your-password是您的密钥库的密码。

    keytool -export -alias your-server -file mykey.cer -keystore keystore -storepass your-password

  2. 在运行 Orbeon Forms 的服务器(即发起 HTTPS 请求的服务器)上,导入mykey.cer到信任库。这truststore是您的信任库文件,如果您没有现有的信任库,它可能是您正在创建的新文件。

    keytool -import -v -trustcacerts -alias your-server -file mykey.cer -keystore truststore -storepass your-password

  3. -D在启动运行应用服务器(例如 Tomcat)和 Orbeon Forms 的 VM 时添加以下参数:

    -Djavax.net.ssl.trustStore=path/to/your/truststore -Djavax.net.ssl.trustStorePassword=your-password

于 2010-10-20T18:11:53.837 回答