Nixos

如何使自簽名證書在 nixos 中持續存在?

  • April 16, 2019

我有一個建構 virtualbox vm 的 nix 表達式。作為該過程的一部分,我通過以下方式安裝自簽名 ssl 證書

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

這很好用。問題是如果我想執行 nixos-rebuild 來重新配置 vm。由於我不再可以從 vm 建構過程中訪問原始證書文件(因為我在 vm 中執行,而不是在我建構 vm 的機器上),我不能通過相同的機制再次包含該文件。

關於如何做到這一點,我提出了三個想法:

  1. 在 vm 建構過程中,在 vm 中的 /root 下放置一份額外的證書副本。然後我可以在我的 configuration.nix 中使用它來再次提取證書:
security.pki.certificates = [ /root/cert ];
  1. 由於證書始終可用於從內部伺服器進行 http 下載,因此我可以在每次執行 nixos-rebuild 時以某種方式在 configuration.nix 中使用 fetchUrl 來下載它。我想唯一的缺點是引入外部依賴。
  2. 由於證書在 /etc/ssl/ca-certificates.crt 中,我可以以某種方式從該文件中提取它作為重建過程的一部分,然後再次將其提供給 security.pki.certificates。

想法?

您沒有指定certfile第一行中的外觀。如果它是一個用 填充的變數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" ];將消除文件依賴性,然後配置是自包含的。

否則,如果您想將內容保留在配置之外,則需要為其創建打包/派生並將其添加到商店。

引用自:https://unix.stackexchange.com/questions/226932