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

6
我购买了一个COMODO代码签名证书并用它来签署我的Java WebStart应用程序。
主要问题:该COMODO代码签名证书是否被Java 8支持?
更多信息:
除了我的机器外,在所有其他机器上,Java都会阻止该应用程序,并说它使用自签名证书。
我甚至不知道为什么它在我的电脑上可以运行。我查看了Java控制面板(1.8.0_45-b15)中可信任证书根列表,但我找不到“COMODO RSA Certification Authority”在那里。
我确实在Windows MMC证书插件中的“受信任的根证书颁发机构”下看到了该证书。但是在至少3台其他机器上不存在。

1
你确定你使用了那个证书吗?你也有自签名证书吗? - user207421
1
你能退货并获得退款吗? :) 尝试另一个CA。 - ZhongYu
2
该死的,每年75美元?这是一个破碎的模式。整个CA业务都是一场阴谋! - ZhongYu
1
你确定在使用COMODO证书签署JAR文件之前删除了自签名签名吗?请注意,签名不会覆盖先前的签名,它只是添加新的签名。如果您的JAR文件有两个签名,则无法正常工作。 - Saeid Nourian
1
这是我的WebStart应用程序:http://www.runiter.com/graphing-calculator/download.htm - Saeid Nourian
显示剩余6条评论
3个回答

4
我终于解决了它 - 这是故事:
当我购买证书时,我必须通过电子邮件收到的网站地址进行收集。在那里,证书被自动安装到我的浏览器(Firefox)的信任库中。
然后我从Firefox中导出它(选项 - 高级 - 查看证书 - 您的证书 - 备份按钮)。
当时我没有意识到的是,与Java和Windows不同,Firefox内置了“COMODO RSA Certification Authority”作为一个令牌。

我当时不知道的是,Firefox证书导出似乎只包括证书链直到第一个受信任的机构,在这种情况下是“COMODO RSA认证机构”。
COMODO支持网站了解到,证书链实际上应该再往上一级,一直到“AddTrust External CA Root”。

这听起来更有希望了,因为AddTrust证书实际上包含在Oracle的Java 8 cacerts信任存储库中,该存储库负责在Java Webstart期间验证jar文件。
接下来我做的事情是将从Firefox获取的*.p12文件导入到Windows证书管理器(开始-certmgr.msc),因为出于某种原因我认为这是将*.p12转换为*.pfx的方法(虽然现在我知道这两个扩展名都用于相同的pkcs12密钥库格式)。无论如何,在导入过程中会弹出以下问题:

我犯了一个重大错误:我点击了“是”。这导致“COMODO RSA认证机构”被安装在Windows信任存储中,作为“受信任的根证书”(顺便说一下,在我重新启动certmgr.msc之后才能看到)。

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

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

现在,让我们谈谈那个天才的举动,它是我偶然发现的:我从Windows认证管理器中删除了“COMODO RSA Certification Authority”。现在,当我双击我的代码签名证书时,显示的证书链突然看起来不同了:

我承认当我看到这个时,我有点兴奋。我再次导出(与之前完全相同的设置)。

确实,在我使用此导出证书签署我的应用程序后,Java WebStart 接受了它:


2
更新:这是一个JRE版本的bug。Comodo的新CA证书已经在Java 8u51中添加到默认密钥库中。
另外一个问题的答案似乎不太合适,但在这里似乎非常相关:
您可以通过检查Java cacerts文件来确定CA的证书是否适用于Java代码签名。该文件列出了Java已知的所有CA。如果他们的证书在此文件中,则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。使用more代替,并浏览直到你找到或找不到你要找的内容。
截至今天,Comodo已经在cacerts文件中,而startssl则没有。因此,startssl证书对于Java代码来说就没什么用了。
来源:https://stackoverflow.com/a/1906679/154527

谢谢,但那是在2009年,使用的是Java 6。在Java 7和8中,我能看到的Comodo唯一出现的情况是针对名为“AAA证书服务”的证书,这不是他们用于代码签名证书的证书。 - Reto Höhener
1
@Zalumon,我的引用是关于如何确定Comodo是否是可信的代码签名CA。现在它是否成为了不正确的过程?听起来你已经得到了答案,应该退款。 - Alain O'Dea
不,据我所知,这仍然是确定Java信任哪些证书的正确过程(尽管根据我的实验,我认为Java也可以使用Windows信任存储)。在我放弃并认为我的证书无用的时候,我标记了您的答案为正确。只有后来我才发现了真正的问题...对此我感到抱歉! - Reto Höhener
1
不用担心。非常感谢您的反馈。 - Alain O'Dea

1
我可以给你一个有条件的答案。 在那些不喜欢您证书的计算机中,访问http://jonathancrosmer.com/software/invadeearth/并点击Invade Earth。
此程序使用Comodo证书。 我构建它针对Java 7,但如果您的计算机只有Java 8运行时,则仍应该可以工作。 1. 如果您收到相同的警告,则知道这是Java 8问题。 2. 否则,您就知道您的证书出了问题。 无论哪种情况,您都可能希望从证书发行商那里获得退款,因为他们宣传他们的证书受Java信任。

1
请参考https://dev59.com/l4bca4cB1Zd3GeqPc_s5?rq=1。 - Jonathan Crosmer
1
太好了,谢谢你!我开始理解整个系统了。你的WebStart应用程序对我有效,原因是你的证书根是“UTN-USERFirst-Object”,这恰好存在于我的Windows 7框中的信任存储和我安装的Oracle JRE 1.8.0_u45的cacerts信任存储中,用于启动Web应用程序。我收到的证书的根是“COMODO RSA Certification Authority”。 - Reto Höhener

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接