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