java web start codebase证书链

时间:2015-10-29 08:39:54

标签: java https ssl-certificate java-web-start

我正在使用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的警告,指出“与此网站的连接不受信任”并单击“更多信息”我看到一条消息,指出“已颁发的证书颁发机构证书不受信任“(warnings pictured here

我的SSL证书依赖于一系列SSL证书将其链接到根证书。我打开了Java控制台并验证了我的根证书是否出现在System“证书类型”标签Secure Site CA)的User部分下。

作为测试,我尝试将我的网站的SSL证书导入Secure Site“证书类型”标签的String ipAddress = request.getHeader("X-FORWARDED-FOR"); String getWay = request.getRemoteAddr() ; // Gateway out.println("<br/>IP Address:"+ipAddress+"<br/>"); out.println("<br/>Gateway:"+getWay+"<br/>"); 部分。导入我的网站的SSL证书后,我不再收到警告。

基于此测试,在我看来,Java可能无法读取/能够读取证书链中将证书链接到根证书的中间证书。

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

1 个答案:

答案 0 :(得分:0)

经过进一步调查,似乎我围绕失败根源的原始假设可能不正确。我使用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支持提供证书链,因此我决定将codebase文件的jnlp属性更改为指向Redhat提供的域,解决了“不受信任的连接”#34;错误。

我对这个结果感到满意。但是,要使用我的自定义域,我认为正确的行动方案是跟进Redhat,以确定在使用我的自定义域名访问服务器时,为什么没有显示包含我的证书链的pem文件的原因