NGINX学习之ngx_http_ssl_module

219 阅读3分钟

ngx_http_ssl_module

ngx_http_ssl_module提供https的支持,不是默认的,build需要带上--with-http_ssl_module该模块依赖OpenSSL

使用ssl,为降低处理器负载,推荐:

  • worker processes设置为cpu核心数

  • 开启keep-alive

  • 开启shared,一个cache可以被所有工作进程共享,1Mb可以存储4000个sessions

  • 关闭built-in,一个OpenSSL中内置的cache,工作进程之间不能共享

  • 延长session存活时间 ,ssl_session_timeout默认为5m

    参数

ssl_buffer_size size;发送数据的buffer

默认16k,如果responses不大,我们可以缩小来降低延迟,例如设置为ssl_buffer_size 4k;

ssl_certificate file;ssl_certificate_key file;SSL证书文件

从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或者更高的版本,才支持不同证书独立的certificate chains,老版本只有一个证书链可以被使用。

ssl_ciphers ciphers;定义加密算法

默认:ssl_ciphers HIGH:!aNULL:!MD5;,我们可以通过openssl ciphers来查看

ssl_verify_client on; 客户端证书验证

默认是off,不启用客户端证书验证的,开启后实现https双向验证:服务端验证(ca机构证书),客户端验证(服务器自签证书)

ssl_verify_client on;
ssl_client_certificate ssl/client.pem;

自签证书步骤如下:

## ca根证书生成
# 创建ca私钥
openssl genrsa -out ca.key 2048
# 生成ca证书
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt

## 客户端证书生成
# 创建客户端私钥
openssl genrsa -out client.pem 2048 
openssl rsa -in client.pem -out client.key
# 生成签发请求
openssl req -new -key client.pem -out client.csr
# 使用ca证书进行签发
openssl x509 -req -sha256 -extfile /etc/pki/tls/openssl.cnf \
-extensions v3_req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 36500 -out client.crt
# 验证签发证书是否正确
openssl verify -CAfile ca.crt client.crt
# 制作p12证书(导入浏览器)
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
# 操作结束后目录文件
ca.crt  ca.key  ca.pem  ca.srl  client.crt  client.csr  client.key  client.p12  client.pem
# 验证,导出client.p12点击安装至浏览器,重启浏览器。

ssl_early_data on; TLS 1.3 early data

是否开启TLS 1.3 early data

    ssl_protocols TLSv1.3;
    ssl_early_data on;
    proxy_set_header Early-Data $ssl_early_data;

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];

The TLSv1.1 and TLSv1.2 parameters (1.1.13, 1.0.12) work only when OpenSSL 1.0.1 or higher is used.

The TLSv1.3 parameter (1.13.0) works only when OpenSSL 1.1.1 or higher is used.

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

设置存储session的缓存的类型和大小

  • off:没有缓存,nginx会告诉客户端session不会再利用
  • none:没有缓存,nginx会告诉客户端session可能会再利用
  • builtin:OpenSSL的缓存,只能被一个工作进程使用,默认存储20480个session
  • shared:nginx的缓存,可以被所有工作进程共享,1MB大约存储4000个session
# 例如设置openssl存储1000个sessions,ng存储10m的sessions
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_session_timeout 10m;

ssl_ocsp on | off | leaf; ocsp配置

OCSP(Online Certificate Status Protocol)在线证书状态协议使应用程序可以确定已标识证书的(吊销)状态。如果服务器在检查证书状态时无法得到有效响应,网站就无法加载。

ssl_stapling on | off; ocsp stapling配置

OCSP stapling (OCSP 订书钉)可提高网络浏览器为验证网站 SSL 证书而进行的在线证书状态协议(OCSP)检查的性能和安全性。网站服务器从证书颁发机构获取 OCSP 响应,并在 SSL 握手过程中将其 “订 “到 SSL 证书上。 然后,装订好的响应会连同证书一起发送给浏览器,这样浏览器就不需要单独进行 OCSP 检查了。

错误代码定义

nginx.org/en/docs/htt…

内置变量

nginx.org/en/docs/htt…