我有一个构建 virtualbox vm 的 nix 表达式。作为该过程的一部分,我通过以下方式安装了自签名 ssl 证书
certfile = builtins.readFile ./certificate.crt
security.pki.certificates = [ certfile ];
Run Code Online (Sandbox Code Playgroud)
这很好用。问题是如果我想运行 nixos-rebuild 来重新配置虚拟机。由于我不再可以从 vm 构建过程访问原始证书文件(因为我在 vm 中运行,而不是在我构建 vm 的机器上),我不能通过相同的机制再次包含该文件。
我想出了三个关于如何做到这一点的想法:
在 vm 构建过程中,在 vm 中的 /root 下放置一份额外的证书副本。然后我可以在我的 configuration.nix 中使用它再次拉入证书:
security.pki.certificates = [ /root/cert ];
Run Code Online (Sandbox Code Playgroud)由于证书始终可用于从内部服务器进行 http 下载,因此每次执行 nixos-rebuild 时,我都可以在 configuration.nix 中使用 fetchUrl 以某种方式下载它。我想唯一的缺点是引入了外部依赖。
由于证书在 /etc/ssl/ca-certificates.crt 中,作为重建过程的一部分,我可以以某种方式从该文件中提取它,然后再次将其提供给 security.pki.certificates。
想法?
小智 2
您没有指定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
Run Code Online (Sandbox Code Playgroud)
所以,设置security.pki.certificates [ "insert certificate here" ];
将消除文件依赖性,然后配置是独立的。
否则,如果您希望将内容保留在配置之外,则需要为其创建打包/派生并将其添加到商店中。
归档时间: |
|
查看次数: |
1595 次 |
最近记录: |