gpt4 book ai didi

nix - 构建派生时如何访问CA证书

转载 作者:行者123 更新时间:2023-12-04 10:02:35 25 4
gpt4 key购买 nike

我想在运行时自动将 CA 证书添加到 Java keystore nix-shell .在以下脚本工作之前:

with import <nixpkgs> {
config.allowUnfree = true;
config.oraclejdk.accept_license = true;
};

let dependencies = rec {
_oraclejdk8 = stdenv.lib.overrideDerivation pkgs.oraclejdk8 (attrs : {
installPhase = ''
${attrs.installPhase}

pems_dir=pems
mkdir "$pems_dir"

echo "split bundled ca-certificates into separate files 'cert.N.pem'\
and add them to default keystore"

keytool=$out/bin/keytool
keystore=$jrePath/lib/security/cacerts

pushd "$pems_dir"
awk 'BEGIN {c=0;doPrint=0;} /END CERT/ {print > "cert." c ".pem";doPrint=0;} /BEGIN CERT/{c++;doPrint=1;} { if(doPrint == 1) {print > "cert." c ".pem"} }' < /etc/ssl/certs/ca-bundle.crt

# import certificates
for f in `ls cert.*.pem`; do
alias=`basename $f`
$keytool -import -trustcacerts -noprompt -keystore "$keystore" -alias "$alias" -file "$f" -storepass changeit;
done
popd

'';
});

};
in with dependencies;
stdenv.mkDerivation rec {
name = "env";
buildInputs = [ _oraclejdk8 ];
}

但现在它失败并出现以下错误:
/nix/store/9fx2jfmks2zhvv2kmqgl6rg0fbkc3da0-stdenv-linux/setup: line 1391: /etc/ssl/certs/ca-bundle.crt: No such file or directory

看起来现在无法访问任何现有文件。但实际上这个文件只是一个存储链接:
$ readlink -f /etc/ssl/certs/ca-bundle.crt
/nix/store/w3vw4q9z7s0wig6ng4nv62af1917ynrm-ca-certificates.crt

如何在我的脚本中访问这个文件?

最佳答案

Nix 是一个密封的构建系统,这意味着必须声明所有输入,以便它们都可以被跟踪。
您可以提取 Nixpkgs 的一组证书颁发机构证书,即 pkgs.cacert :

  # CAREFUL, read on!
awk 'BEGIN {c=0;doPrint=0;} /END CERT/ {print > "cert." c ".pem";doPrint=0;} /BEGIN CERT/{c++;doPrint=1;} { if(doPrint == 1) {print > "cert." c ".pem"} }' < ${cacert}/etc/ssl/certs/ca-bundle.crt

但是,在固定加密配置时要小心,因为当它发生变化时,您需要在任何地方更新它。假设您要运行 2 年旧版本的软件,您是要使用 2 年旧证书还是环境中的证书运行它?

另一个问题是这些证书应该写在哪里? Keytool 默认写入主目录,这是构建沙箱中不存在的目录。

在您的情况下,似乎正确的解决方案不是在沙箱中添加证书,而是返回一个脚本,该脚本将在有意义的上下文中执行此操作。何时何地由您决定,但请确保您从良好的来源获得这些证书。如果您可以假设您的部署总是使用足够最新的 Nixpkgs 完成,那么您可以继续使用。否则,您可能最好使用 /etc 中系统上已有的那些。 .

关于nix - 构建派生时如何访问CA证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61754673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com