模块 ngx_http_ssl_module
ngx_http_ssl_module
模块为 HTTPS 提供了必要的支持。
此模块未默认构建,应使用
--with-http_ssl_module
配置参数启用它。
此模块需要
OpenSSL
库。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_certificate /usr/local/nginx/conf/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/cert.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
为给定的虚拟服务器指定包含 PEM 格式证书的
file
。如果除了主证书之外还应指定中间证书,则应按以下顺序在同一文件中指定它们:主证书排在第一位,然后是中间证书。PEM 格式的密钥可以放在同一文件中。
从 1.11.0 版本开始,可以多次指定此指令以加载不同类型的证书,例如 RSA 和 ECDSA
server { listen 443 ssl; server_name example.com; ssl_certificate example.com.rsa.crt; ssl_certificate_key example.com.rsa.key; ssl_certificate example.com.ecdsa.crt; ssl_certificate_key example.com.ecdsa.key; 只有 OpenSSL 1.0.2 或更高版本支持为不同的证书使用单独的证书链。在旧版本中,只能使用一个证书链。 自 1.15.9 版本起,在使用 OpenSSL 1.0.2 或更高版本时,可以在file
名称中使用变量ssl_certificate $ssl_server_name.crt; ssl_certificate_key $ssl_server_name.key; 请注意,使用变量意味着在每次 SSL 握手时都会加载一个证书,这可能会对性能产生负面影响。 可以指定值data
:$variable
而不是file
(1.15.10),它从变量中加载证书,而不使用中间文件。请注意,不当使用此语法可能会产生安全隐患,例如将密钥数据写入错误日志。 需要注意的是,由于 HTTPS 协议限制了最大的互操作性,虚拟服务器应该侦听不同的 IP 地址。ssl_certificate_key
file
;
指定一个file
,其中包含给定虚拟服务器的 PEM 格式的密钥。 可以指定值engine
:name
:id
而不是file
(1.7.9),它从 OpenSSL 引擎name
中加载具有指定id
的密钥。 可以指定值data
:$variable
而不是file
(1.15.10),它从变量中加载密钥,而不使用中间文件。请注意,不当使用此语法可能会产生安全隐患,例如将密钥数据写入错误日志。 自 1.15.9 版本起,在使用 OpenSSL 1.0.2 或更高版本时,可以在file
名称中使用变量。ssl_ciphers
ciphers
;
指定启用的密码。密码以 OpenSSL 库可以理解的格式指定,例如ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; 可以使用“openssl ciphers
”命令查看完整列表。 以前版本的 nginx 默认使用不同的密码。 可以在同一级别上指定多个ssl_conf_command
指令ssl_conf_command Options PrioritizeChaCha; ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256; 当且仅当当前级别上没有定义ssl_conf_command
指令时,这些指令才会从前一个配置级别继承。 请注意,直接配置 OpenSSL 可能会导致意外行为。 特殊值auto
(1.11.0) 指示 nginx 在使用 OpenSSL 1.0.2 或更高版本时使用内置于 OpenSSL 库中的列表,或在使用较低版本时使用prime256v1
。 在 1.11.0 版本之前,默认使用prime256v1
曲线。 当使用 OpenSSL 1.0.2 或更高版本时,此指令设置服务器支持的曲线列表。因此,为了让 ECDSA 证书正常工作,必须包含证书中使用的曲线。 启用客户端证书链的 OCSP 验证。leaf
参数仅启用客户端证书的验证。 要使 OCSP 验证正常工作,应将 ssl_verify_client 指令设置为on
或optional
。 要解析 OCSP 响应器主机名,还应指定 resolver 指令。ssl_verify_client on; ssl_ocsp on; resolver 192.0.2.1;此指令出现在 1.19.0 版本中。 设置存储用于 OCSP 验证的客户端证书状态的缓存的
name
和size
。该缓存由所有工作进程共享。可以在多个虚拟服务器中使用具有相同名称的缓存。off
参数禁止使用缓存。ssl_ocsp_responder
url
;
# named pipe can also be used instead of a file ssl_password_file /etc/keys/fifo; ssl_certificate_key /etc/keys/second.key; 例如,在以下配置中,将拒绝与除example.com
之外的服务器名称进行 SSL 握手server { listen 443 ssl default_server; ssl_reject_handshake on; server { listen 443 ssl; server_name example.com; ssl_certificate example.com.crt; ssl_certificate_key example.com.key;此指令出现在 1.5.7 版本中。 设置一个
file
,其中包含用于加密和解密 TLS 会话票证的密钥。如果必须在多台服务器之间共享同一密钥,则此指令是必需的。默认情况下,使用随机生成的密钥。 如果指定了多个密钥,则仅使用第一个密钥加密 TLS 会话票证。这允许配置密钥轮换,例如ssl_session_ticket_key current.key; ssl_session_ticket_key previous.key;file
必须包含 80 或 48 字节的随机数据,可以使用以下命令创建openssl rand 80 > ticket.key 根据文件大小,加密将使用 AES256(对于 80 字节密钥,1.11.8)或 AES128(对于 48 字节密钥)。ssl_session_tickets
on
|off
;
要使 OCSP 装订正常工作,应知道服务器证书颁发者的证书。如果 ssl_certificate 文件不包含中间证书,则服务器证书颁发者的证书应存在于 ssl_trusted_certificate 文件中。 要解析 OCSP 响应者的主机名,还应指定 resolver 指令。ssl_stapling_file
file
;
此指令出现在 1.3.7 版本中。 指定一个
file
,其中包含 PEM 格式的可信 CA 证书,用于验证客户端证书和 OCSP 响应(如果启用了ssl_stapling)。 与 ssl_client_certificate 设置的证书不同,这些证书的列表不会发送给客户端。ssl_verify_client
on
|off
|optional
|optional_no_ca
;