如何使自签名证书保留在 nixos 中?

如何使自签名证书保留在 nixos 中?

我有一个构建 virtualbox 虚拟机的 nix 表达式。作为该过程的一部分,我通过安装自签名 ssl 证书

certfile = builtins.readFile ./certificate.crt
security.pki.certificates = [ certfile ];

效果很好。问题是如果我想运行 nixos-rebuild 来重新配置虚拟机。由于我无法再从虚拟机构建过程访问原始证书文件(因为我在虚拟机中运行,而不是在构建虚拟机的计算机上),因此我不能通过相同的机制再次包含该文件。

关于如何做到这一点,我提出了三个想法:

  1. 在虚拟机构建过程中,将证书的额外副本放置在虚拟机的 /root 下。然后我可以在我的configuration.nix中使用它来再次提取证书:

    security.pki.certificates = [ /root/cert ];
    
  2. 由于证书始终可从内部服务器进行 http 下载,因此每次执行 nixos-rebuild 时,我都可以在 configuration.nix 中使用 fetchUrl 来下载它。我认为唯一的缺点是引入外部依赖。

  3. 由于证书位于 /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" ];将消除文件依赖性,然后配置是独立的。

否则,如果您希望将内容保留在配置之外,则需要为其创建打包/派生并将其添加到商店中。

答案2

我假设您正在使用 nixops 进行部署,但即使您不这样做,您也可以为任何 nix 脚本创建参数。

我在我的服务器配置中做了类似的事情这里然后你按照描述使用参数这里

相关内容