在NixOS中使用keytool向jre cacert添加证书

时间:2018-03-21 13:10:14

标签: keytool nixos

我正在尝试运行需要https调用外部服务的java程序。但是我收到了错误

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

所以我尝试使用命令

将证书添加到cacert中
keytool -import -alias MYALIAS -keystore /nix/store/10b0a6m8z23xw1ds0pmckmqfx1pvyjli-oraclejdk-8u161/jre/lib/security/cacerts -trustcacerts -file FILE-CA.crt

但我收到了错误

keytool error: java.io.FileNotFoundException: /nix/store/10b0a6m8z23xw1ds0pmckmqfx1pvyjli-oraclejdk-8u161/jre/lib/security/cacerts (Read-only file system)

由于我的发行版是NixOS,我知道在/etc/nixos/configuration.nix中可能有一种方法可以做到这一点,但是怎么做?

1 个答案:

答案 0 :(得分:1)

NixOS目前没有特殊选项。您可以使用NixOS Options Search或更准确的nixos-option命令来检查。

对我来说,似乎证书应该是程序配置的一部分,而不是系统配置的一部分。您可以使用keytool的{​​{1}}选项指定主目录中的路径。然后,您可以使用类似

之类的内容将该密钥库传递给JVM
-keystore

如果你的java程序带有某种包装器,你可能需要以不同的方式传递这些java'系统属性',或者包装器可以提供一个更容易的选项来配置它。

理想情况下,您可以将程序打包以使其自包含,但很难根据您问题中的信息判断这是否是个好主意。