摘要:Java选项“ Djavax.net.ssl.trustStoreType = WINDOWS-ROOT”允许Java将Windows信任存储区用于计算机帐户。可以使用什么选项将Windows信任存储区用作用户帐户?
我们有一个在Windows客户端上运行的Java应用程序。该应用程序从各种来源获取数据,其中一些来源使用默认cacerts文件中没有的证书。
当用户选择访问外部数据的项目时,系统会提示他们下载外部站点的证书。由于我们的安全设置,cacerts文件对于用户是只读的。由于JRE无法将证书导入到cacerts中,因此不会下载外部文件。并提示用户反复下载证书。
当授予用户对cacerts的写入权限时,不会发生此问题。但是我们的安全团队不会让我们向普通用户授予对该文件的写入权限。他们的政策是,用户自己的配置文件之外的C:驱动器上的任何文件都不应读写。
我们认为我们找到了一种解决方法,可以使Java使用Windows信任库。我们在启动脚本中添加了标志“ Djavax.net.ssl.trustStoreType = WINDOWS-ROOT”。这迫使Java使用Windows信任存储,用户可以对其进行写入。
不幸的是,用户只能写入其证书存储区,而不能写入计算机的证书存储区。当我们以管理员身份运行该应用程序时,证书将导入到计算机的存储中。此后,不提示普通用户下载证书。但是,如果我们不使用管理员权限一次运行该证书,则不会导入该证书,因为Java尝试写入Windows 计算机帐户存储,该帐户与cacerts一样被严格锁定。
是否有一个标志可以强制Java使用整个Windows信任存储,而不仅仅是计算机帐户的存储?