| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2010-01-20 14:22:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2010-01-20 14:22:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-15 18:55:07 +01:00
										 |  |  | let | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 23:40:05 +02:00
										 |  |  |   cfg = config.security.pki; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cacertPackage = pkgs.cacert.override { | 
					
						
							|  |  |  |     blacklist = cfg.caCertificateBlacklist; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-29 02:32:05 +01:00
										 |  |  |   caCertificates = pkgs.runCommand "ca-certificates.crt" | 
					
						
							| 
									
										
										
										
											2015-02-15 18:55:07 +01:00
										 |  |  |     { files = | 
					
						
							| 
									
										
										
										
											2016-09-01 23:40:05 +02:00
										 |  |  |         cfg.certificateFiles ++ | 
					
						
							|  |  |  |         [ (builtins.toFile "extra.crt" (concatStringsSep "\n" cfg.certificates)) ]; | 
					
						
							| 
									
										
										
										
											2015-02-15 18:55:07 +01:00
										 |  |  |      } | 
					
						
							|  |  |  |     ''
 | 
					
						
							|  |  |  |       cat $files > $out | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-20 14:22:47 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-05 18:06:57 +01:00
										 |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     security.pki.certificateFiles = mkOption { | 
					
						
							|  |  |  |       type = types.listOf types.path; | 
					
						
							|  |  |  |       default = []; | 
					
						
							| 
									
										
										
										
											2015-06-05 13:00:52 -07:00
										 |  |  |       example = literalExample "[ \"\${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt\" ]"; | 
					
						
							| 
									
										
										
										
											2015-02-05 18:06:57 +01:00
										 |  |  |       description = ''
 | 
					
						
							|  |  |  |         A list of files containing trusted root certificates in PEM | 
					
						
							|  |  |  |         format. These are concatenated to form | 
					
						
							| 
									
										
										
										
											2016-01-29 02:32:05 +01:00
										 |  |  |         <filename>/etc/ssl/certs/ca-certificates.crt</filename>, which is | 
					
						
							| 
									
										
										
										
											2015-02-05 18:06:57 +01:00
										 |  |  |         used by many programs that use OpenSSL, such as | 
					
						
							|  |  |  |         <command>curl</command> and <command>git</command>. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     security.pki.certificates = mkOption { | 
					
						
							| 
									
										
										
										
											2015-06-15 18:18:46 +02:00
										 |  |  |       type = types.listOf types.str; | 
					
						
							| 
									
										
										
										
											2015-02-05 18:06:57 +01:00
										 |  |  |       default = []; | 
					
						
							| 
									
										
										
										
											2015-07-04 18:49:32 +12:00
										 |  |  |       example = literalExample ''
 | 
					
						
							|  |  |  |         [ '''
 | 
					
						
							|  |  |  |             NixOS.org | 
					
						
							|  |  |  |             ========= | 
					
						
							|  |  |  |             -----BEGIN CERTIFICATE----- | 
					
						
							|  |  |  |             MIIGUDCCBTigAwIBAgIDD8KWMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJ | 
					
						
							|  |  |  |             TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0 | 
					
						
							|  |  |  |             ... | 
					
						
							|  |  |  |             -----END CERTIFICATE----- | 
					
						
							|  |  |  |           '''
 | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2015-02-05 18:06:57 +01:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         A list of trusted root certificates in PEM format. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 23:40:05 +02:00
										 |  |  |     security.pki.caCertificateBlacklist = mkOption { | 
					
						
							|  |  |  |       type = types.listOf types.str; | 
					
						
							|  |  |  |       default = []; | 
					
						
							|  |  |  |       example = [ | 
					
						
							|  |  |  |         "WoSign" "WoSign China" | 
					
						
							|  |  |  |         "CA WoSign ECC Root" | 
					
						
							|  |  |  |         "Certification Authority of WoSign G2" | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         A list of blacklisted CA certificate names that won't be imported from | 
					
						
							|  |  |  |         the Mozilla Trust Store into | 
					
						
							|  |  |  |         <filename>/etc/ssl/certs/ca-certificates.crt</filename>. Use the | 
					
						
							|  |  |  |         names from that file. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-05 18:06:57 +01:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-20 14:22:47 +00:00
										 |  |  |   config = { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 23:40:05 +02:00
										 |  |  |     security.pki.certificateFiles = [ "${cacertPackage}/etc/ssl/certs/ca-bundle.crt" ]; | 
					
						
							| 
									
										
										
										
											2015-02-05 18:06:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-15 19:03:14 +01:00
										 |  |  |     # NixOS canonical location + Debian/Ubuntu/Arch/Gentoo compatibility. | 
					
						
							| 
									
										
										
										
											2016-01-29 02:32:05 +01:00
										 |  |  |     environment.etc."ssl/certs/ca-certificates.crt".source = caCertificates; | 
					
						
							| 
									
										
										
										
											2015-02-15 19:03:14 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Old NixOS compatibility. | 
					
						
							| 
									
										
										
										
											2016-01-29 02:32:05 +01:00
										 |  |  |     environment.etc."ssl/certs/ca-bundle.crt".source = caCertificates; | 
					
						
							| 
									
										
										
										
											2015-02-15 18:55:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # CentOS/Fedora compatibility. | 
					
						
							| 
									
										
										
										
											2016-01-29 02:32:05 +01:00
										 |  |  |     environment.etc."pki/tls/certs/ca-bundle.crt".source = caCertificates; | 
					
						
							| 
									
										
										
										
											2015-02-15 18:55:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-20 14:22:47 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |