如何跨更新保留Mac上的CAcerts密钥库?

时间:2010-12-13 12:40:12

标签: java macos osx-snow-leopard keystore

Mac OS X在/System/Library/Frameworks/JavaVM.framework/Home/lib/security/cacerts中有CA密钥库。这个密钥库似乎被每个Java更新覆盖,这非常烦人,因为我们有用于开发环境的内部CA,测试......

有没有办法在Apple JSR中保留密钥库更改,现在,使用Snow Leo JSR3,还可以跨越单独的Java开发人员包(其JDK使用相同的密钥库)的更新?

3 个答案:

答案 0 :(得分:5)

[这是过时的信息 - 请参阅下面的答案10.6+]

/System/Library/Frameworks/JavaVM.framework/Home/是JavaVM.framework中Versions/CurrentJDK/Home的符号链接。显然,这将随着新版本而改变。使用完整路径(例如/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home),它不会在更新中发生变化。

答案 1 :(得分:4)

以下参数可用于指定cacerts文件到java的位置:

-Djavax.net.ssl.trustStore=<cacerts.location>
-Djavax.net.ssl.trustStorePassword=changeit

在java主目录(带有内部CA)中复制cacerts并将其放在主目录中的某个位置。然后将完整路径放到cacerts文件位置作为上面javax.net.ssl.trustStore属性的值。该副本不会被Java更新覆盖。默认密码为'changeit'。

这种方法的两个缺点是:

  • 您的文件不会对sdk中的cacerts文件进行任何更新。如果证书颁发机构遭到入侵,这主要是一个问题。
  • 您需要自定义cacerts(构建工具,应用服务器等),需要指定这些参数。

答案 2 :(得分:3)

在Mac OS X 10.6.8 Snow Leopard中似乎发生了变化。现在/System/Library/Frameworks/JavaVM.framework/Home/lib/security/cacerts/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts的符号链接,如果我们很幸运,它们不会在更新时更改。