nginx下配置ssl本來是很簡單的,無論是去認(rèn)證中心買SSL安全證書還是自簽署證書,但最近公司OA的一個(gè)需求,得以有個(gè)機(jī)會(huì)實(shí)際折騰一番。一開始采用的是全站加密,所有訪問http:80的請求強(qiáng)制轉(zhuǎn)換(rewrite)到https,后來自動(dòng)化測試結(jié)果說響應(yīng)速度太慢,https比http慢慢30倍,心想怎么可能,鬼知道他們怎么測的。所以就試了一下部分頁面https(不能只針對某類動(dòng)態(tài)請求才加密)和雙向認(rèn)證。下面分節(jié)介紹。
默認(rèn)nginx是沒有安裝ssl模塊的,需要編譯安裝nginx時(shí)加入--with-http_ssl_module選項(xiàng)。
關(guān)于SSL/TLS原理請參考 這里,如果你只是想測試或者自簽發(fā)ssl證書,參考 這里 。
提示:nignx到后端服務(wù)器由于一般是內(nèi)網(wǎng),所以不加密。
1. 全站ssl
全站做ssl是最常見的一個(gè)使用場景,默認(rèn)端口443,而且一般是單向認(rèn)證。
server { listen 443; server_name example.com; root /apps/www; index index.html index.htm; ssl on; ssl_certificate ../SSL/ittest.pem; ssl_certificate_key ../SSL/ittest.key;# ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;# ssl_prefer_server_ciphers on;}如果想把http的請求強(qiáng)制轉(zhuǎn)到https的話:
server { listen 80; server_name example.me; rewrite ^ https://$server_name$request_uri? permanent;### 使用return的效率會(huì)更高 # return 301 https://$server_name$request_uri;}ssl_certificate證書其實(shí)是個(gè)公鑰,它會(huì)被發(fā)送到連接服務(wù)器的每個(gè)客戶端,ssl_certificate_key私鑰是用來解密的,所以它的權(quán)限要得到保護(hù)但nginx的主進(jìn)程能夠讀取。當(dāng)然私鑰和證書可以放在一個(gè)證書文件中,這種方式也只有公鑰證書才發(fā)送到client。
ssl_protocols指令用于啟動(dòng)特定的加密協(xié)議,nginx在1.1.13和1.0.12版本后默認(rèn)是ssl_protocols
SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注