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

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

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

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

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

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

 -Djavax.net.ssl.trustStore= -Djavax.net.ssl.trustStorePassword=changeit 

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

这种方法的两个缺点是:

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

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