Nginx使用ssl
nginx往往通过反向代理屏蔽服务端,nginx使用ssl的可以让客户端使用https协议与nginx通信,在一定程度上保证整个链路的数据安全。
证书生成
自签CA与证书生成可参考《TLS证书与自签ca》
于是得到
文件 | 用途 |
---|---|
ws-serverca.crt | 服务端证书 |
ws-serverca.key | 服务端私钥 |
ws-trust.crt | 服务端可信的ca证书 |
nginx配置ssl
证书与私钥配置相对路径起点为位置为nginx安装目录,假设nginx安装目录下存在ssl文件夹
1 | server { |
一般我们还会配置http请求的80端口重定向到443端口
1 | server{ |
此配置方式为https的单向认证,一般自签证书使用这种方式较多
双向认证
前文介绍的是nginx使用ssl完成https单向认证的操作,此章节介绍双向认证。
1 | server { |
ssl常用指令
ssl on | off;
为指定的虚拟主机配置是否启用ssl功能,此功能在1.15.0废弃,使用listen [ssl]替代。
ssl_certificate server.crt;
当前虚拟主机使用使用的证书文件,一般是crt文件
ssl_certificate_key server.key;
当前虚拟主机使用的私钥文件,一般是key文件
ssl_client_certificate ssl client.cer;
客户端证书
ssl_verify_client on;
开启客户端证书验证
ssl_protocols [SSLv2][SSLv3][TLSv1][TLSv1.1][TLSv1.2]
支持ssl协议版本,早期为ssl现在是TSL,默认为后三个
ssl_session_cache off | none | [builtin[:size]][shared:name:size];
配置ssl缓存:off:关闭缓存;none: 通知客户端支持ssl session cache,但实际不支持;
builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
[shared:name:size]:在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,一兆可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称。
ssl_session_timeout time;
客户端连接可以复用ssl session cache中缓存的有效时长,默认5m(分钟)
关于证书格式:其实证书格式之间的差异几乎也就编码问题,后缀也并不能完全代表什么,每个软件支持的格式可能不一样,如tomcat和nginx的差异,能用就行,不能就转换格式。