nixos/nginx: ensure TLS OCSP stapling works out of the box with LE
The recommended TLS configuration comes with `ssl_stapling on` and
`ssl_stapling_verify on`. However, this last directive also requires
the use of `ssl_trusted_certificate` to verify the received answer.
When using `enableACME` or similar, we can help the user by providing
the correct value for the directive.
The result can be tested with:
    openssl s_client -connect web.example.com:443 -status 2> /dev/null
Without OCSP stapling, we get:
    OCSP response: no response sent
After this change, we get:
    OCSP Response Data:
        OCSP Response Status: successful (0x0)
        Response Type: Basic OCSP Response
        Version: 1 (0x0)
        Responder Id: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
        Produced At: Aug 30 20:46:00 2018 GMT
			
			
This commit is contained in:
		
							parent
							
								
									2a606200bc
								
							
						
					
					
						commit
						1251b34b5b
					
				@ -16,9 +16,11 @@ let
 | 
			
		||||
    } // (optionalAttrs vhostConfig.enableACME {
 | 
			
		||||
      sslCertificate = "${acmeDirectory}/${serverName}/fullchain.pem";
 | 
			
		||||
      sslCertificateKey = "${acmeDirectory}/${serverName}/key.pem";
 | 
			
		||||
      sslTrustedCertificate = "${acmeDirectory}/${serverName}/full.pem";
 | 
			
		||||
    }) // (optionalAttrs (vhostConfig.useACMEHost != null) {
 | 
			
		||||
      sslCertificate = "${acmeDirectory}/${vhostConfig.useACMEHost}/fullchain.pem";
 | 
			
		||||
      sslCertificateKey = "${acmeDirectory}/${vhostConfig.useACMEHost}/key.pem";
 | 
			
		||||
      sslTrustedCertificate = "${acmeDirectory}/${vhostConfig.useACMEHost}/full.pem";
 | 
			
		||||
    })
 | 
			
		||||
  ) cfg.virtualHosts;
 | 
			
		||||
  enableIPv6 = config.networking.enableIPv6;
 | 
			
		||||
@ -228,6 +230,9 @@ let
 | 
			
		||||
            ssl_certificate ${vhost.sslCertificate};
 | 
			
		||||
            ssl_certificate_key ${vhost.sslCertificateKey};
 | 
			
		||||
          ''}
 | 
			
		||||
          ${optionalString (hasSSL && vhost.sslTrustedCertificate != null) ''
 | 
			
		||||
            ssl_trusted_certificate ${vhost.sslTrustedCertificate};
 | 
			
		||||
          ''}
 | 
			
		||||
 | 
			
		||||
          ${optionalString (vhost.basicAuthFile != null || vhost.basicAuth != {}) ''
 | 
			
		||||
            auth_basic secured;
 | 
			
		||||
 | 
			
		||||
@ -129,6 +129,13 @@ with lib;
 | 
			
		||||
      description = "Path to server SSL certificate key.";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    sslTrustedCertificate = mkOption {
 | 
			
		||||
      type = types.path;
 | 
			
		||||
      default = null;
 | 
			
		||||
      example = "/var/root.cert";
 | 
			
		||||
      description = "Path to root SSL certificate for stapling and client certificates.";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    http2 = mkOption {
 | 
			
		||||
      type = types.bool;
 | 
			
		||||
      default = true;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user