Nginx SSL模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx SSL模块相关的知识,希望对你有一定的参考价值。

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 指令值)

以上是关于Nginx SSL模块的主要内容,如果未能解决你的问题,请参考以下文章

Nginx SSL模块

nginx添加ssl模块

Nginx使用ssl模块配置HTTPS支持

nginx如果未开启SSL模块,配置https时提示错误

nginx添加ssl模块

Nginx启动SSL功能