java web 启动代码库证书链

java web start codebase certificate chain

我正在使用 Java Web Start (JWS) 来部署和 运行 我的 JavaFX 应用程序。我的jnlp文件的jnlp元素定义如下:

<jnlp spec="1.0+" xmlns:jfx="http://javafx.com" codebase="http://www.example.com/software" href="MyJnlp.jnlp">

我的应用程序使用上面的配置成功启动。我现在正在尝试调整 jnlp 文件,以便通过 SSL 下载 jar。我为我的域购买并安装了 SSL 证书。我已通过将浏览器指向 https://www.example.com/software/MyJar.jar 并验证是否已下载 jar 来确认证书已成功安装。

我更新了我的 jnlp 文件的 jnlp 元素如下:

<jnlp spec="1.0+" xmlns:jfx="http://javafx.com" codebase="https://www.example.com/software" href="MyJnlp.jnlp">

当我通过双击 jnlp 文件启动应用程序时,我收到来自 Java 的警告,指出 "The connection to this website is untrusted" 并单击 "More Information" 我看到一条消息,指出 "The Certificate Authority that issued the certificate is not trusted" (warnings pictured here)

我的 SSL 证书依赖于 SSL 证书链 link 到根证书。我打开 Java 控制台并确认我的根证书位于 Secure Site CA "Certificate Type" 选项卡 (pictured here) 的 System 部分下 (pictured here)。

作为测试,我随后尝试将我网站的 SSL 证书导入到 Secure Site "Certificate Type" 选项卡的 User 部分。导入我网站的 SSL 证书后,我不再收到警告。

根据这个测试,在我看来 Java 可能不会 reading/able 读取证书链中的中间证书,link 将我的证书发送到根证书.

我希望我的用户能够通过 https 启动 JWS 应用程序,而无需导入我网站的证书或收到警告提示。有人可以帮忙吗?

经过进一步调查,看来我最初对故障根源的假设可能是不正确的。我使用 openssl 查看托管我的 Java Web Start 代码库的服务器提供的证书和证书链(我使用的是 openshift)。 SSL 数据显示,虽然提供了我的自定义域的 SSL 证书,但证书链对应于 RedHat 的默认 SSL 配置(这显然不会验证我的自定义域的证书)。

My-MacBook-Pro:~ username$ openssl s_client -connect www.example.com:443
CONNECTED(00000003)
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=North Carolina/L=Raleigh/O=Red Hat Inc./CN=*.rhcloud.com
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
***CERTIFICATE FOR MY CUSTOM DOMAIN***
-----END CERTIFICATE-----

由于服务器为 openshift 的默认 SSL 支持提供了证书链,我决定更改我的 jnlp 文件的 codebase 属性以指向 Redhat 提供的域,该域解决了 "Untrusted Connection" 错误。

我对这个结果很满意。但是,要使用我的自定义域,我认为正确的做法是跟进 Redhat 以确定为什么在使用我的自定义域名访问服务器时未显示包含我的证书链的 pem 文件.