Java webstart说我的应用程序使用自签名证书,但我使用了COMODO代码签名证书

时间:2015-07-02 23:44:01

标签: java code-signing java-web-start code-signing-certificate

我买了COMODO code signing certificate并用它来签署我的java webstart应用程序。

主要问题:java 8甚至支持COMODO代码签名证书吗?

更多信息:

在除我自己以外的所有机器上,java会阻止该应用程序,并说它使用自签名证书。

我甚至不理解为什么它在我的机器上运行。我查看了java控制面板(1.8.0_45-b15)中可信认证根的列表,但我找不到" COMODO RSA认证中心"那里。

我确实在"受信任的根证书颁发机构"下的Windows MMC证书管理单元中看到该证书。但至少在其他3台机器上它并不存在。

3 个答案:

答案 0 :(得分:4)

我终于解决了 - 这就是故事:

当我购买证书时,我必须通过导航到我通过电子邮件收到的网站地址来收集证书。在那里,证书自动安装到我的浏览器(Firefox)的信任库中。

然后我从Firefox导出它(选项 - 高级 - 查看证书 - 您的证书 - 备份按钮)。

我当时没有意识到, Firefox与Java和Windows不同,它将“COMODO RSA认证中心”作为内置令牌

当时我还不知道的是, Firefox证书导出似乎只包括第一个受信任机构的证书链,在这种情况下是“COMODO RSA证书颁发机构”

从这个COMODO support site我了解到链条实际应该更高,一直到“AddTrust External CA Root”:

这听起来更有希望,因为 AddTrust证书实际上包含在Oracle的java 8 cacerts信任库中,它负责在java webstart期间验证jar。

我接下来要做的是将我从Firefox获得的* .p12文件导入Windows证书管理器(Start - certmgr.msc),因为出于某种原因我认为这是将* .p12转换为*的方法。 pfx(虽然现在我知道这两个扩展都用于相同的pkcs12密钥库格式)。无论如何,在导入过程中出现了这个问题:

我在这里犯了一个严重的错误:我点击了是。这导致“COMODO RSA证书颁发机构”作为“受信任的根证书”安装在Windows信任库中(btw仅在重新启动certmgr.msc后可见):

我的代码签名证书已安装在“个人/证书”中。我从那里导出它(操作 - 所有任务 - 导出...),并标记为“如果可能,在证书路径中包括所有证书”。

现在发生的事情与从Firefox导出时完全相同。由于Windows现在已将“COMODO RSA证书颁发机构”安装为受信任的根证书,因此它仅包含此链中的链。这是我在出口后获得的:

现在对于天才的举动,我偶然发现了这个机会:我从Windows认证经理那里删除了“COMODO RSA认证机构”。现在,当我双击我的代码签名证书时,显示的链突然看起来不同:

我承认当我看到这个时,我得到了一点肾上腺素的冲动。我再次导出(与之前完全相同的设置)。

事实上,在我使用此导出的证书签署我的应用程序后,java webstart接受了它:

答案 1 :(得分:2)

更新:这是一个JRE发布错误。 Comodo's new CA certs were added to the default keystore in Java 8u51

对另一个问题的回答虽然在某种程度上不合适,但这里似乎有一个主题:

  

您可以判断CA的证书是否适用于Java代码签名   检查Java cacerts文件,该文件列出了已知的所有CA.   Java的。如果他们的证书在此文件中,那么Java将不会抱怨   签名的代码。如果不是,那么它将警告用户。对于   例如:

     

root@girflet:~# keytool -list -keystore /usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/security/cacerts | grep comodo

     

Enter keystore password: changeit

     

comodoaaaca, 02-May-2006, trustedCertEntry,

     

请注意,我必须输入默认密钥库密码 changeit 。   此命令也适用于Windows,尽管您必须这样做   更改cacerts文件的路径,你不会有grep。使用更多   而是直到您找到或找不到您的内容   寻找。

     

截至今天,Comodo在cacerts文件中,而startssl则不是。那么一个   startssl cert对Java代码不太好。

     

来源:https://stackoverflow.com/a/1906679/154527

答案 2 :(得分:1)

我可以给你一个有条件的答案。 在其中一台不喜欢您的证书的计算机上,转到http://jonathancrosmer.com/software/invadeearth/ 然后单击“入侵地球” 该程序使用Comodo证书。我是针对Java 7构建的,但如果您的计算机只有Java 8运行时,它仍然可以工作。  1.如果您收到相同的警告,则表示它是Java 8问题。  2.否则,您知道证书有问题。 无论哪种方式,您可能希望从证书颁发者那里获得退款,因为他们宣传他们的证书是由Java信任的。