HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL。 它是一個(gè)URI scheme(抽象標(biāo)識符體系),句法類同http:體系。用于安全的HTTP數(shù)據(jù)傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在HTTP與TCP之間)。這個(gè)系統(tǒng)的最初研發(fā)由網(wǎng)景公司(Netscape)進(jìn)行,并內(nèi)置于其瀏覽器Netscape Navigator中,提供了身份驗(yàn)證與加密通訊方法?,F(xiàn)在它被廣泛用于萬維網(wǎng)上安全敏感的通訊,例如交易支付方面。 1、SSL加密 SSL是Netscape公司所提出的安全保密協(xié)議,在瀏覽器(如Internet Explorer、Netscape Navigator)和Web服務(wù)器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之間構(gòu)造安全通道來進(jìn)行數(shù)據(jù)傳輸,SSL運(yùn)行在TCP/IP層之上、應(yīng)用層之下,為應(yīng)用程序提供加密數(shù)據(jù)通道,它采用了RC4、MD5以及RSA等加密算法,使用40 位的密鑰,適用于商業(yè)信息的加密。同時(shí),Netscape公司相應(yīng)開發(fā)了HTTPS協(xié)議并內(nèi)置于其瀏覽器中,HTTPS實(shí)際上就是HTTP over SSL,它使用默認(rèn)端口443,而不是像HTTP那樣使用端口80來和TCP/IP進(jìn)行通信。HTTPS協(xié)議使用SSL在發(fā)送方把原始數(shù)據(jù)進(jìn)行加密,然后在接受方進(jìn)行解密,加密和解密需要發(fā)送方和接受方通過交換共知的密鑰來實(shí)現(xiàn),因此,所傳送的數(shù)據(jù)不容易被網(wǎng)絡(luò)黑客截獲和解密。 然而,加密和解密過程需要耗費(fèi)系統(tǒng)大量的開銷,嚴(yán)重降低機(jī)器的性能,相關(guān)測試數(shù)據(jù)表明使用HTTPS協(xié)議傳輸數(shù)據(jù)的工作效率只有使用HTTP協(xié)議傳輸?shù)氖种?。假如為了安全保密,將一個(gè)網(wǎng)站所有的Web應(yīng)用都啟用SSL技術(shù)來加密,并使用HTTPS協(xié)議進(jìn)行傳輸,那么該網(wǎng)站的性能和效率將會大大降低,而且沒有這個(gè)必要,因?yàn)橐话銇碚f并不是所有數(shù)據(jù)都要求那么高的安全保密級別 2、TLS加密 TLS:安全傳輸層協(xié)議 TLS:Transport Layer Security 安全傳輸層協(xié)議(TLS)用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。該協(xié)議由兩層組成: TLS 記錄協(xié)議(TLS Record)和 TLS 握手協(xié)議(TLS Handshake)。較低的層為 TLS 記錄協(xié)議,位于某個(gè)可靠的傳輸協(xié)議(例如 TCP)上面。 目前SSL加密免費(fèi)證書有很多,一般包括Let’s Encrypt,StartSSL,COMODO PositiveSSL,CloudFlare SSL,Wosign沃通SSL(原來免費(fèi),現(xiàn)在收費(fèi)),等等,在這里推薦大家使用Let’s Encrypt ,下面小編寫下自己網(wǎng)站使用Let’s Encrypt配置的過程。 1、首先我們到https://github.com/certbot/certbot Let‘s Encrypt網(wǎng)站下載項(xiàng)目,如果您的機(jī)器上已安裝git,可以直接clone到本地,這里小編就直接下載了 下載Let’s Encrypt資源 2、下載之后,我們將這個(gè)文件上傳到服務(wù)器,解壓到某個(gè)目錄下。例如我的解壓到/opt 3、解壓之后我們把文件重命名為letsencrypt,然后進(jìn)入這個(gè)目錄執(zhí)行這個(gè)命令,這個(gè)命令意思是自動(dòng)安裝相關(guān)依賴,讓客戶端將引導(dǎo)您完成交互式獲取和安裝證書的過程。 ./certbot-auto --help all 4、您也可以從命令行準(zhǔn)確地告訴它您希望它執(zhí)行的操作。舉例來說,如果你想獲得一個(gè)證書的example.com, www.example.com以及other.example.com,使用Apache插件都獲取并安裝證書,你可以這樣做:(執(zhí)行這個(gè)命令前提具備完整插件支持的網(wǎng)絡(luò)服務(wù)器,如果沒有,可以使用“獨(dú)立”或“webroot”插件獲取證書,參見步驟5,6 這里小編采用的是webroot 的方式) ./certbot-auto --apache -d example.com -d www.example.com -d other.example.com (你運(yùn)行該命令的第一次,它將使一個(gè)帳戶,并要求郵件并同意了讓我們加密用戶協(xié)議,您可以自動(dòng)化那些(–emai和–agree-tos) 5、如果您想使用尚未具備完整插件支持的網(wǎng)絡(luò)服務(wù)器,則仍然可以使用“獨(dú)立”模式獲取證書,多個(gè)域名使用多個(gè)-d參數(shù),也可以用“,”分割,例如:”-d ,www.” ./certbot-auto certonly --standalone --email admin@example.com -d example.com -d www.example.com -d other.example.net 6、如果您想使用尚未具備完整插件支持的網(wǎng)絡(luò)服務(wù)器,則仍然可以使用“webroot”模式獲取證書:(前提要保證服務(wù)器能夠訪問到-w所指定的目錄下) ./certbot-auto certonly --webroot -w /var/www/html -d www. 7、執(zhí)行步驟6后可能出現(xiàn)如下錯(cuò)誤404的錯(cuò)誤,按照路徑錯(cuò)誤地址創(chuàng)建相應(yīng)目錄./well-known/acme-challenge創(chuàng)建到這里后面就不需要了。創(chuàng)建完成后再次執(zhí)行步驟6命令即可,沒有出現(xiàn)這個(gè)問題請忽略。 8、生成成功后會自動(dòng)保存在/etc/letsencrypt目錄下生成證書文件,目錄結(jié)構(gòu)如圖,這時(shí)候我們可以根據(jù)生成的證書配置服務(wù)器了,這里建議把把證書備份哈! SSL證書Nginx配置 1、有了證書之后,我們準(zhǔn)備開始配置,配置之前我們需要準(zhǔn)備dhparam.pem文件: sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 執(zhí)行后會顯示 This is going to take a long time.......+...........................+............................+............................+............++*++*++* 那么這些打印的內(nèi)容是什么呢? dhparam 算法是在 2^4096 個(gè)數(shù)字中找出兩個(gè)質(zhì)數(shù),所以需要的時(shí)間挺長?!?. 意思是有可能的質(zhì)數(shù),+ 是正在測試的質(zhì)數(shù),* 是已經(jīng)找到的質(zhì)數(shù)。這就涉及到前向安全性(Forward Secrecy)的概念,客戶端和服務(wù)器協(xié)商一個(gè)永不重用的密鑰,并在會話結(jié)束時(shí)銷毀它。服務(wù)器上的 RSA 私鑰用于客戶端和服務(wù)器之間的 Diffie-Hellman 密鑰交換簽名。從 Diffie-Hellman 握手中獲取的預(yù)主密鑰會用于之后的編碼。因?yàn)轭A(yù)主密鑰是特定于客戶端和服務(wù)器之間建立的某個(gè)連接,并且只用在一個(gè)限定的時(shí)間內(nèi),所以稱作短暫模式(Ephemeral)。 如果使用前向安全機(jī)制,攻擊者取得了一個(gè)服務(wù)器的私鑰,他是不能解碼之前的通訊信息的。這個(gè)私鑰僅用于 Diffie Hellman 握手簽名,并不會泄露預(yù)主密鑰。Diffie Hellman 算法會確保預(yù)主密鑰絕不會離開客戶端和服務(wù)器,而且不能被中間人攻擊所攔截。 所有版本的 nginx 都依賴于 OpenSSL 給 Diffie-Hellman 的輸入?yún)?shù)。如果不特別聲明,將使用 OpenSSL 的默認(rèn)設(shè)置,1024 位密鑰。這絕壁是不安全的,因?yàn)槲覀冋谑褂?2048 位證書,所以要有一個(gè)更強(qiáng)大的 DH(更多詳細(xì)描述請前往:https://www./nginx-add-ssl/ ) 2、接下來我們配置Nginx服務(wù)器,首先修改server,請求80端口重定向到https這個(gè)域名 server { listen 80; return 301 https://www.$request_uri; server_name www.; …….. 接下來我們配置nginx,添加server,根據(jù)自己實(shí)際情況配置 server { listen 443 ssl; server_name www.; ssl_certificate /ssl/live/www./fullchain.pem; ssl_certificate_key /ssl/live/www./privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers ‘ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA’; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security max-age=15768000; # The rest of your server block root /var/www/html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; #root /var/www/html; #index index.php index.html index.htm; } location ~ .*\.(js|css|png|jpg|gif)$ { if (-f $request_filename) { expires 1d; break; } } 配置好后重啟nginx,在瀏覽器訪問: 最后,點(diǎn)擊證書信息后可知是3個(gè)月的期限,到期后可以通過執(zhí)行腳本./certbot-auto renew來更新證書就可以了,哈哈,是不是很方便呢!以上就是SSL在Nginx服務(wù)器上配置的過程,供大家參考,謝謝! |
|