nixos/security/ca: enable support for compatibility bundles
Certain software stacks have no support for OpenSSL non-standard PEM format and will fail to use our NixOS CA bundle. For this, it is necessary to fallback on a 'compatibility' bundle which will contain no additional trust rules. Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
This commit is contained in:
parent
af70ce2c47
commit
19159a2349
2 changed files with 17 additions and 1 deletions
|
@ -11,7 +11,8 @@ let
|
||||||
extraCertificateFiles = cfg.certificateFiles;
|
extraCertificateFiles = cfg.certificateFiles;
|
||||||
extraCertificateStrings = cfg.certificates;
|
extraCertificateStrings = cfg.certificates;
|
||||||
};
|
};
|
||||||
caBundle = "${cacertPackage}/etc/ssl/certs/ca-bundle.crt";
|
caBundleName = if cfg.useCompatibleBundle then "ca-no-trust-rules-bundle.crt" else "ca-bundle.crt";
|
||||||
|
caBundle = "${cacertPackage}/etc/ssl/certs/${caBundleName}";
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
|
@ -23,6 +24,17 @@ in
|
||||||
internal = true;
|
internal = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
security.pki.useCompatibleBundle = mkEnableOption ''usage of a compatibility bundle.
|
||||||
|
|
||||||
|
Such a bundle consist exclusively of `BEGIN CERTIFICATE` and no `BEGIN TRUSTED CERTIFICATE`,
|
||||||
|
which is a OpenSSL specific PEM format.
|
||||||
|
|
||||||
|
It is known to be incompatible with certain software stacks.
|
||||||
|
|
||||||
|
Nevertheless, enabling this will strip all additional trust rules provided by the
|
||||||
|
certificates themselves, this can have security consequences depending on your usecases.
|
||||||
|
'';
|
||||||
|
|
||||||
security.pki.certificateFiles = mkOption {
|
security.pki.certificateFiles = mkOption {
|
||||||
type = types.listOf types.path;
|
type = types.listOf types.path;
|
||||||
default = [];
|
default = [];
|
||||||
|
|
|
@ -71,6 +71,7 @@ stdenv.mkDerivation rec {
|
||||||
--ca_bundle_input "${extraCertificatesBundle}" ${lib.escapeShellArgs (map (arg: "${arg}") extraCertificateFiles)} \
|
--ca_bundle_input "${extraCertificatesBundle}" ${lib.escapeShellArgs (map (arg: "${arg}") extraCertificateFiles)} \
|
||||||
--blocklist "${blocklist}" \
|
--blocklist "${blocklist}" \
|
||||||
--ca_bundle_output ca-bundle.crt \
|
--ca_bundle_output ca-bundle.crt \
|
||||||
|
--ca_standard_bundle_output ca-no-trust-rules-bundle.crt \
|
||||||
--ca_unpacked_output unbundled \
|
--ca_unpacked_output unbundled \
|
||||||
--p11kit_output ca-bundle.trust.p11-kit
|
--p11kit_output ca-bundle.trust.p11-kit
|
||||||
'';
|
'';
|
||||||
|
@ -78,6 +79,9 @@ stdenv.mkDerivation rec {
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
install -D -t "$out/etc/ssl/certs" ca-bundle.crt
|
install -D -t "$out/etc/ssl/certs" ca-bundle.crt
|
||||||
|
|
||||||
|
# install standard PEM compatible bundle
|
||||||
|
install -D -t "$out/etc/ssl/certs" ca-no-trust-rules-bundle.crt
|
||||||
|
|
||||||
# install p11-kit specific output to p11kit output
|
# install p11-kit specific output to p11kit output
|
||||||
install -D -t "$p11kit/etc/ssl/trust-source" ca-bundle.trust.p11-kit
|
install -D -t "$p11kit/etc/ssl/trust-source" ca-bundle.trust.p11-kit
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue