keytool - 在 NixOS 中使用 keytool 将证书添加到 jre cacert

标签 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 中可能有一种方法可以做到这一点,但是如何实现呢?

最佳答案

NixOS 目前没有为此提供特殊选项。您可以使用NixOS Options Search进行检查或者,为了更准确,使用 nixos-option 命令。

对我来说,证书似乎应该是程序配置的一部分,而不是系统配置的一部分。您可以使用 keytool-keystore 选项指定主目录中的路径。然后,您可以使用类似的方法将该 keystore 传递给 JVM

java -Djavax.net.ssl.trustStore=$HOME/my/key/store -Djavax.net.ssl.trustStorePassword=mypassword

如果您的 Java 程序附带某种包装器,您可能需要以不同的方式传递这些 Java“系统属性”,或者包装器可能提供更简单的选项来配置它。

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

关于keytool - 在 NixOS 中使用 keytool 将证书添加到 jre cacert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49407223/

相关文章:

java - keytool 命令在命令行上成功,但未通过 ProcessBuilder

dockerd 不在 nixos 上运行

nix - 以下 cmdline 参数的最短 `shell.nix` 等价物是什么?

linux - NixOS:启动到终端

rust - nixos:我的自定义包派生在 `cargo build` 上失败

android - Facebook Android SDK 的 key 散列无效

android - keytool 和 openssl 证书指纹不匹配

java - Linux 下 Runtime.getRuntime().exec() 的 Keytool 用法

java - 具有 SSL 相互身份验证的 Jersey 客户端

haskell - 如何安装 Haskell 库以便通过 GHCi 和 Nixos 进行访问?