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

Changed files
+12
nixos
modules
services
web-servers
+5
nixos/modules/services/web-servers/nginx/default.nix
···
} // (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;
···
${optionalString hasSSL ''
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 != {}) ''
+7
nixos/modules/services/web-servers/nginx/vhost-options.nix
···
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;