ngx_http_ssl_module
ngx_http_ssl_module提供https的支持,不是默认的,build需要带上--with-http_ssl_module,该模块依赖OpenSSL库
使用ssl,为降低处理器负载,推荐:
-
worker processes设置为cpu核心数
-
开启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.1andTLSv1.2parameters (1.1.13, 1.0.12) work only when OpenSSL 1.0.1 or higher is used.The
TLSv1.3parameter (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 检查了。