大家好!分享即關(guān)懷,我們很樂(lè)意與你分享其他的一些知識(shí)。我們準(zhǔn)備了一個(gè) Nginx 指南,分為三個(gè)系列。如果你已經(jīng)知道一些 Nginx 知識(shí)或者想擴(kuò)展你的經(jīng)驗(yàn)和認(rèn)知,這個(gè)再合適不過(guò)了。
我們將告訴你 Nginx 的運(yùn)作模式、蘊(yùn)含的概念,怎樣通過(guò)調(diào)優(yōu) Nginx 來(lái)提高應(yīng)用性能,或是如何設(shè)置它的啟動(dòng)和運(yùn)行。
這個(gè)教程有三個(gè)部分:
基本概念—— 這部分需要去了解 Nginx 的一些指令和使用場(chǎng)景,繼承模型,以及 Nginx 如何選擇 server 塊,location 的順序。
性能—— 介紹改善 Nginx 速度的方法和技巧,我們會(huì)在這里談及 gzip 壓縮,緩存,buffer 和超時(shí)。
SSL 安裝—— 如何配置服務(wù)器使用 HTTPS
創(chuàng)建這個(gè)系列,我們希望,一是作為參考書,可以通過(guò)快速查找到相關(guān)問(wèn)題(比如 gzip 壓縮,SSL 等)的解決方式,也可以直接通讀全文。為了獲得更好的學(xué)習(xí)效果,我們建議你在本機(jī)安裝 Nginx 并且嘗試進(jìn)行實(shí)踐。
SSL 和 TLS
SSL(Socket Secure Layer 縮寫)是一種通過(guò) HTTP 提供安全連接的協(xié)議。
SSL 1.0 由 Netscape 開(kāi)發(fā),但由于嚴(yán)重的安全漏洞從未公開(kāi)發(fā)布過(guò)。SSL 2.0 于 1995 年發(fā)布,它存在一些問(wèn)題,導(dǎo)致了最終的 SSL 3.0 在 1996 年發(fā)布。
TLS(Transport Layer Security 縮寫)的第一個(gè)版本是作為 SSL 3.0 的升級(jí)版而編寫的。之后 TLS 1.1 和 1.2 出來(lái)了?,F(xiàn)在,就在不久之后,TLS 1.3 即將推出(這確實(shí)值得期待),并且已經(jīng)被一些瀏覽器所支持。
從技術(shù)上講,SSL 和 TLS 是不同的(因?yàn)槊總€(gè)協(xié)議都描述了協(xié)議的不同版本),但其中使用的許多名稱是可以互換的。
基本 SSL/TLS 配置
為了處理 HTTPS 流量,你需要具有 SSL/TLS 證書。你可以通過(guò)使用 Let’s encrypt 以生成免費(fèi)的證書。
當(dāng)你擁有證書之后,你可以通過(guò)以下的方式輕易切換至 HTTPS:
開(kāi)始監(jiān)聽(tīng)端口 443(當(dāng)你輸入 https://sample.co時(shí)瀏覽器將使用的默認(rèn)端口)
提供證書及其密鑰
server{
listen443ssldefault_server;
listen[::]:443ssldefault_server;
ssl_certificate/etc/nginx/ssl/netguru.crt;
ssl_certificate_key/etc/nginx/ssl/netguru.key;
}
我們也想通過(guò)調(diào)整配置實(shí)現(xiàn):
僅使用 TLS 協(xié)議。由于眾所周知的漏洞,所有的 SSL 版本都將不再使用
使用預(yù)定義的安全的服務(wù)器密碼(類似于協(xié)議的情況 – 那些日子只有少數(shù)密碼被認(rèn)為是安全的)
請(qǐng)牢記,上述設(shè)置總是在變化的。時(shí)不時(shí)重新更新是個(gè)好主意。
ssl_protocolsTLSv1TLSv1.1TLSv1.2;
ssl_ciphersEECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5;
ssl_prefer_server_cipherson;
server{
listen443ssldefault_server;
listen[::]:443ssldefault_server;
ssl_certificate/etc/nginx/ssl/netguru.crt;
ssl_certificate_key/etc/nginx/ssl/netguru.key;
}
TLS 會(huì)話恢復(fù)
使用 HTTPS,在 TCP 之上需要增加 TLS 握手。這大大增加了此前實(shí)際數(shù)據(jù)傳輸?shù)臅r(shí)間。假設(shè)你從華沙請(qǐng)求 /image.jpg,并接入到柏林最近的服務(wù)器:
為了在 TLS 握手期間節(jié)省一個(gè) roundtrip 時(shí)間,以及生成新密鑰的計(jì)算開(kāi)銷,我們可以重用在第一個(gè)請(qǐng)求期間生成的會(huì)話參數(shù)??蛻舳撕头?wù)器可以將會(huì)話參數(shù)存儲(chǔ)在會(huì)話 ID 密鑰的后面。在接下來(lái)的 TLS 握手過(guò)程中,客戶端可以發(fā)送會(huì)話 ID,如果服務(wù)器在緩存中仍然有正確的條目,那么會(huì)重用前一個(gè)會(huì)話所生成的參數(shù)。
server{
ssl_session_cacheshared:SSL:10m;
ssl_session_timeout1h;
}
OCSP Stapling
SSL 證書可以隨時(shí)撤銷。瀏覽器為了知道給定的證書是否不再有效,需要通過(guò)在線證書狀態(tài)協(xié)議 (Online Certificate Status Protocol ,OCSP) 執(zhí)行額外的查詢。無(wú)需用戶執(zhí)行指定的 OCSP 查詢,我們可以在服務(wù)器上執(zhí)行此操作,緩存其結(jié)果,并在 TLS 握手期間為客戶端提供 OCSP 響應(yīng)。它被稱為OCSP stapling。
server{
ssl_staplingon;
ssl_stapling_verifyon;#verifyOCSPresponse
ssl_trusted_certificate/etc/nginx/ssl/lemonfrog.pem;#tellnginxlocationofallintermediatecertificates
resolver8.8.8.88.8.4.4valid=86400s;#resolutionoftheOCSPresponderhostname
resolver_timeout5s;
}
Security headers
有一些標(biāo)頭確實(shí)值得調(diào)整以提供更高的安全性。有關(guān)更多關(guān)于標(biāo)頭及其詳細(xì)信息,你絕對(duì)應(yīng)該查看OWASP 項(xiàng)目之安全標(biāo)頭。
HTTP Strict-Transport-Security
或簡(jiǎn)稱 HSTS,強(qiáng)制用戶代理在向源發(fā)送請(qǐng)求時(shí)使用 HTTPS。
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
X-Frame-Options
表示瀏覽器是否需要在一幀、一個(gè) iframe 或一個(gè)對(duì)象標(biāo)簽中渲染頁(yè)面。
add_header X-Frame-Options DENY;
X-Content-Type-Options
此選項(xiàng)將阻止瀏覽器在判斷文件類型時(shí)嗅探文件。文件將會(huì)按照 Content-Type 頭中聲明的格式轉(zhuǎn)譯。
add_header X-Content-Type-Options nosniff;
Server tokens
另一個(gè)很好的做法是在 HTTP 響應(yīng)頭字段中隱藏有關(guān) Web 服務(wù)器的信息:
Server : nginx/1.13.2
實(shí)現(xiàn)此功能可以通過(guò)禁用 server_tokens 指令:
server_tokens off;
附錄 :: Let’s Encrypt
安裝
最新的安裝包可以在這里找到。
為了測(cè)試使用暫存環(huán)境,不排除速率限制。
生成新證書
certbotcertonly--webroot--webroot-path/var/www/netguru/current/public/\
-dfoo.netguru.co\
-dbar.netguru.co
確保能夠正確更新。
certbot renew --dry-run
確保你在 crontab 添加了自動(dòng)更新。運(yùn)行 crontab -e,同時(shí)添加下邊一行代碼
3 * * * /usr/bin/certbot renew --quiet --renew-hook "/usr/sbin/nginx -s reload"
檢查 SSL 是否能夠通過(guò) ssllabs 正常運(yùn)行。
-
SSL
+關(guān)注
關(guān)注
0文章
126瀏覽量
25785 -
nginx
+關(guān)注
關(guān)注
0文章
154瀏覽量
12240 -
https
+關(guān)注
關(guān)注
0文章
52瀏覽量
6226
原文標(biāo)題:Nginx 教程(3):SSL 設(shè)置
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
RCB2系統(tǒng)服務(wù)器使用介紹
如何基于HTTP Web服務(wù)器示例實(shí)現(xiàn)TLS HTTPS服務(wù)器?
AT32基于mbed TLS的HTTPS服務(wù)器
np312-串口服務(wù)器使用說(shuō)明
如何配置設(shè)置建立dhcp服務(wù)器
![如何<b class='flag-5'>配置</b>設(shè)置建立dhcp<b class='flag-5'>服務(wù)器</b>](https://file1.elecfans.com//web2/M00/A4/4C/wKgZomUMM5KAWhMlAAANJR-Ex1M394.gif)
評(píng)論