2015-04-30 29 views
1

我们处于一个大型组织,其中有几个应用程序是为内部和外部应用程序开发的。其中一个应用程序是作为Java Webstart应用程序分发的,经过大量试验和错误之后,我们现在已经进行了适当的签名和打包。Corporate Java Webstart Distribution:使用站点范围内接受的证书签署代码签名证书

唯一的问题:我们使用自签名证书。用户看到一个关于未知/未经验证的供应商的警告,这是不好的。

幸运的是,该组织的IT部门拥有一个在所有工作站上都​​可以接受的证书(我认为通过整个站点范围的策略)。如果我们使用这个认可的证书来签署JAR并创建Webstart存档,那么一切都应该没问题。当然,IT部门不希望向所有开发人员分发认可的证书或将其放置在构建服务器上,因为这会违反目的并引入大量漏洞。

什么是正确的方式来生成这个接受证书签署的代码签名证书?

我的假设的基础上,我从正常OpenSSL的程序,知道要生成Web服务器使用的证书:

  1. 生成CSR与
  2. 发送CSR到IT安全
  3. IT从生成证书与的CSR接受证书。此证书应该有一个短的有效期(1周/ 1月/ 1季度?)
  4. 导入到Java密钥工具签署
  5. 确保密钥工具只提供给授权用户

将这项工作?在安全或组织障碍方面是否有任何异议?

如果以上内容是正确的,我将需要一些指针,特别是与第3项。我发现了一个有点相关的问题:How do you sign Certificate Signing Request with your Certification Authority?

任何帮助表示赞赏。

回答

1

如果公司有其自己的CA根证书,哪些是必须通过某种方式推送到每个客户端/ relier,如GPO或安装所有系统(或者他们的JRE?)从一个自定义的图像,那么你的做法几乎是正确的:

  1. 产生密钥对和 CSR
  2. 发送CSR到企业CA,他们送你回去证书
  3. 密钥库结合了密钥对证书并使用密钥库

可以完成所有步骤,但最后用OpenSSL的,但它是额外的工作:

1:openssl req -newkeyopenssl genpkey|genrsa|etc然后openssl req -new

3:openssl pkcs12 -exportkeytool -importkeystore -srcstoretype pkcs12

既然你想用Java来结束密钥存储更容易,只需使用Java的整个:

1:keytool -genkeypair然后keytool -certreq

3:keytool -importcert

keytool是安装了任何JRE的每台计算机上可用的程序;你不能有效地限制它。这是密钥库文件包含您的密钥对(特别是您的私钥)必须受到保护。使用强密码;设置文件/目录权限/ ACL;保持安全备份;所有平常。

在另一方面,如果公司有一个代码签名证书(和密钥)这是值得信赖的因为从(颁发)著名的CA如Verisign,他们几乎可以肯定获得的证书不能颁发您的下级证书。只有一个CA证书(和它的密钥)才可以颁发下级证书,而从技术上讲,如果您发布任何可反映在他们身上的不合格证书,并且可能会让他们失去业务(见DigiNotar),他们不希望这样。