我有一个构建 virtualbox 虚拟机的 nix 表达式。作为该过程的一部分,我通过安装自签名 ssl 证书
certfile = builtins.readFile ./certificate.crt
security.pki.certificates = [ certfile ];
效果很好。问题是如果我想运行 nixos-rebuild 来重新配置虚拟机。由于我无法再从虚拟机构建过程访问原始证书文件(因为我在虚拟机中运行,而不是在构建虚拟机的计算机上),因此我不能通过相同的机制再次包含该文件。
关于如何做到这一点,我提出了三个想法:
在虚拟机构建过程中,将证书的额外副本放置在虚拟机的 /root 下。然后我可以在我的configuration.nix中使用它来再次提取证书:
security.pki.certificates = [ /root/cert ];
由于证书始终可从内部服务器进行 http 下载,因此每次执行 nixos-rebuild 时,我都可以在 configuration.nix 中使用 fetchUrl 来下载它。我认为唯一的缺点是引入外部依赖。
由于证书位于 /etc/ssl/ca-certificates.crt 中,因此我可以在重建过程中以某种方式从该文件中提取它,然后再次将其提供给 security.pki.certificates。
有想法吗?
答案1
您没有指定certfile
第一行的内容。如果它是用 a 填充的变量builtins.readFile
,您可以跳过该步骤并自行填充该变量。
$> nixos-option security.pki.certificates
Value:
[ "-----BEGIN CERTIFICATE-----
... edited for brevity .... " ]
Default:
[ ]
Example:
[ "NixOS.org\n=========\n-----BEGIN CERTIFICATE-----\nMIIGUDCCBTigAwIBAgIDD8KWMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJ\nTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0\n...\n-----END CERTIFICATE-----\n" ]
Description:
A list of trusted root certificates in PEM format.
Declared by:
"/etc/nixos/nixpkgs/nixos/modules/security/ca.nix"
Defined by:
"/etc/nixos/user.nix
因此,设置security.pki.certificates [ "insert certificate here" ];
将消除文件依赖性,然后配置是独立的。
否则,如果您希望将内容保留在配置之外,则需要为其创建打包/派生并将其添加到商店中。