我有一个由以下证书链签名的小程序:
Softkey-Kazakhstan (JCE Code Signing CA)
Subject: CN=Softkey-Kazakhstan,OU=Java Software Code Signing,O=Sun Microsystems Inc
Issuer: CN=JCE Code Signing CA,OU=Java Software Code Signing,O=Sun Microsystems Inc,L=Palo Alto,ST=CA,C=US
JCE Code Signing CA (JCE Code Signing CA)
Subject: CN=JCE Code Signing CA,OU=Java Software Code Signing,O=Sun Microsystems Inc,L=Palo Alto,ST=CA,C=US
Issuer: CN=JCE Code Signing CA,OU=Java Software Code Signing,O=Sun Microsystems Inc,L=Palo Alto,ST=CA,C=US
这个小程序包含自定义cryptoprovider实现和一些额外的帮助程序jar。它必须能够使用本地文件和USB设备。
Java抱怨说它不知道这个证书。根证书似乎是Sun用于代码签名的合法证书,java应该知道它,但它不是出于某种原因。
我应该怎么做,所以java不会抱怨这个小程序?我是否应该提取此根证书JCE代码签名CA并将其安装到$ JRE / lib / security / cacerts中?
答案 0 :(得分:1)
这是个好问题。此证书是自签名的,而不是正式使用Java(CA cacerts)。我发现加密扩展即使该证书已过期也能正常工作(如果没有签名则无效)。因此,我认为JCE要求使用“JCE Code Signing CA”签署cryptoproviders,但不关心该证书的有效性(可能是由JCE在没有cacerts的情况下在内部进行检查)。我也明白这不是这种情况。问题在于javaws(JNLP发布),它要求使用可信链标记jar。此外,Oracle还强调JCE代码签名证书“证书不能用于部署目的”(参见:here)。但如果它必须存在于分销中呢?正如我所说:好问题。
编辑: 结论: 1. Cryptoproviders必须与“JCE Code Signing CA”签署,无需有效。 2.如果您分发使用“JCE Code Signing CA”签名的jar,则证书必须有效。 JCE标志不足以分发,但如果存在则必须有效。