1. 程式人生 > >Nginx SSL模塊

Nginx SSL模塊

Nginx openssl

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模塊