SSL 和安全
Nginx 通过 SSL 模块提供安全的 HTTP 功能, 但也提供了另外一个叫 Secure Link 的模块.
SSL 模块
SSL 模块能够提供 HTTPS 的支持, 尤其是在 SSL/TLS 上的 HTTP. 它能够通过提供证书来给网站提供安全访问, 使用一个证书和下面的指令定义的其他参数就可以实现.
使用环境: http,server
ssl
ssl on; 或 ssl off;
在指定服务器开启 HTTPS. 该指令相当于对应的 listen 443 ssl; 或 listen port ssl; 但不如它们普遍.
- ssl_certificate
- ssl_certificate path;
设置 PEM 证书的路径
- ssl_certificate_key
- ssl_certificate path;
设置 PEM secret key 文件的路径
- ssl_client_certificate
- ssl_client_certificate path;
设置客户端 PEM certificate 的路径
- ssl_dhparam
- ssl_dhparam path;
设置 Diffie-Hellman 参数文件的路径
- ssl_protocols
- ssl_protocols SSLv2 SSLv3 TSLv1;
指定使用的协议.
- ssl_ciphers
- ssl_ciphers HIGH:!aNULL:!MD5;
指定使用的密码, 密码可以由 openssl ciphers 生成
- ssl_prefer_server_ciphers
- ssl_prefer_server_ciphers [on | off];
指定是否服务器密码优先于客户端密码
- ssl_verify_client
- ssl_verify_client [ on | off ];
开启校验客户端提供的证书
- ssl_verify_depth
- ssl_verify_depth 1;
指定校验客户端证书链的深度, 默认 1
- ssl_session_cache
- ssl_session_cache [ off | none | builtin:size | shared:name:size ]
配置用于 SSL 会话的缓存
- ssl_session_timeout
- ssl_session_timeout 5m;
开启 SSL 会话功能后, 该指令定义使用会话的期限(超时), 默认 5 分钟
有效变量:
$ssl_cipher 指出当前请求使用的密码
$ssl_client_serial 指出客户端证书的序列号
$ssl_protocol 指出当前请求所使用的协议
$ssl_verify 如果客户端校验成功, 那么设置该变量为 SUCCESS
$ssl_client_s_dn 和 $ssl_client_i_dn 指出客户端证书的主题 (subject) 值和客户端证书发行者 DN
$ssl_client_cert 和 $ssl_client_raw_cert 返回客户端证书数据
默认配置文件
- # HTTPS server
- #
- #server {
- # listen 443 ssl; // 在指定服务器开启 HTTPS
- # server_name localhost;
- # ssl_certificate cert.pem; // 设置 PEM 证书的路径
- # ssl_certificate_key cert.key; // 设置 PEM secret key 文件的路径
- # ssl_session_cache shared:SSL:1m; // 配置用于 SSL 会话的缓存
- # ssl_session_timeout 5m; // 开启 SSL 会话功能后, 该指令定义使用会话的期限
- # ssl_ciphers HIGH:!aNULL:!MD5; // 指定使用的密码
- # ssl_prefer_server_ciphers on; // 指定是否服务器密码优先于客户端密码
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
配置 HTTPS 参考: http://blog.51cto.com/gdutcxh/2113718
Secure link 模块完全与 SSL 模块无关, 该模块提供了一个基本的保护, 其做法是在允许一个用户访问一个资源之前, 在 URL 检查是否有一个特定的散列值
- location /downloads/ {
- secure_link_secret "secret";
- if (secure_link= "") {
- return 403;
- }
- rewrite ^ /downloads/$secure_link break;
- }
通过这个配置, 常规访问 /downloads / 下的资源将以 403 的错误码返回
需要在文件名前带上 MD5 的值, MD5(文件名 + secure_link_secret 指令值)
来源: http://www.bubuko.com/infodetail-2622293.html