詳解Nginx服務(wù)器中配置全站HTTPS安全連接的方法
HTTPS就等于HTTP加上TLS(SSL),HTTPS協(xié)議的目標(biāo)主要有三個:
數(shù)據(jù)保密性。保證內(nèi)容在傳輸過程中不會被第三方查看到。就像快遞員傳遞包裹時都進行了封裝,別人無法知道里面裝了什么東西。
數(shù)據(jù)完整性。及時發(fā)現(xiàn)被第三方篡改的傳輸內(nèi)容。就像快遞員雖然不知道包裹里裝了什么東西,但他有可能中途掉包,數(shù)據(jù)完整性就是指如果被掉包,我們能輕松發(fā)現(xiàn)并拒收。
身份校驗。保證數(shù)據(jù)到達用戶期望的目的地。就像我們郵寄包裹時,雖然是一個封裝好的未掉包的包裹,但必須確定這個包裹不會送錯地方。
啟用HTTPS之前需要有證書,而證書需要首先在自己服務(wù)器上創(chuàng)建CSR,對應(yīng)的公鑰和私鑰。這里我全部都拿Nginx服務(wù)器舉例,Apache也不會差太多,都是基于openssl的。因為我只有一個主機域名www.dbjr.com.cn,所以證書方便選擇了COMODO的PositiveSSL,每年9刀。需要注意COMODO要求證書至少是2048位,見下面的命令。激活證書的時候需要注意common name那里要填寫自己的域名地址,我因為并不使用jb51.net,所以這里寫的就是www.dbjr.com.cn,需要注意這兩個主機地址是不同的。其他的組織名公司名什么的如果沒有就寫NA,不要留空。下面簡單說一下步驟
1、以root登錄,升級服務(wù)器。這里是為了解決OpenSSL的一個大漏洞CVE-2014-0224,因為ChangeCipherSpec消息的問題可能導(dǎo)致中間人攻擊,解密并修改被攻擊的服務(wù)器和客戶端之間的通信,從而獲得加密的數(shù)據(jù)。
查看OpenSSL版本,確認(rèn)至少在1.0.1h以上,
openssl version -a
如果沒有,升級服務(wù)器,以Debian為例
apt-get update apt-get upgrade
2、創(chuàng)建CSR和私鑰
openssl req -new -newkey rsa:2048 -nodes -keyout www.dbjr.com.cn.key -out www.dbjr.com.cn.csr
得到2個文件,私鑰www.dbjr.com.cn.key,CSR文件www.dbjr.com.cn.csr,其中CSR里面的內(nèi)容在激活證書的時候需要提交
3、購買證書,完成激活,下載證書文件
下載的證書文件通常是一個壓縮包,有些是2個文件,有些是4個文件
如果是2個文件,是這樣的:
- www_jb51_net.ca-bundle
- www_jb51_net.crt
如果是4個文件,通常都是這樣的:
- www_jb51_net.crt
- COMODORSADomainValidationSecureServerCA.crt
- COMODORSAAddTrustCA.crt
- AddTrustExternalCARoot.crt
其中www_slyar_com.ca-bundle就是自動合并了其他3個文件的產(chǎn)物,一個道理
4、合并證書,順序一定不能錯
cat www_jb51_net.crt www_slyar_com.ca-bundle > www.dbjr.com.cn.crt
或者
cat www_slyar_com.crt www_slyar_com.ca-bundle > www.dbjr.com.cn.crt
最后產(chǎn)生的www.dbjr.com.cn.crt是4個文件的合并,此文件與之前產(chǎn)生的www.dbjr.com.cn.key一起組成了Nginx需要使用的證書
5、把www.dbjr.com.cn.crt和www.dbjr.com.cn.key復(fù)制到Nginx的conf目錄下,比如/usr/local/nginx/conf/
cp www.dbjr.com.cn.crt www.dbjr.com.cn.key /usr/local/nginx/conf/
6、修改Nginx配置文件或者vhost/下的虛擬主機配置文件,啟用https,配置加密方式等
#合并80和443配置文件也可以,一起配置,最后強制轉(zhuǎn)移80到443就可以了 listen 80; listen 443; #指定證書文件 ssl_certificate www.dbjr.com.cn.crt; ssl_certificate_key www.dbjr.com.cn.key; #禁用不安全的SSLv1 2 3,只使用TLS ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; #RC4也是不安全的了,只能去掉 ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; #301轉(zhuǎn)移 if ($server_port = 80) { return 301 https://$server_name$request_uri; }
7、測試Nginx配置文件并重新reload配置文件
Nginx -t service nginx reload
這樣服務(wù)器的HTTPS就配置完了。
既然HTTPS非常安全,數(shù)字證書費用也不高,那為什么互聯(lián)網(wǎng)公司不全部使用HTTPS呢?原因主要有兩點:
HTTPS對速度的影響非常明顯。每個HTTPS連接一般會增加1-3個RTT,加上加解密對性能的消耗,延時還有可能再增加幾十毫秒。
HTTPS對CPU計算能力的消耗很嚴(yán)重,完全握手時,web server的處理能力會降低至HTTP的10%甚至以下。
HTTPS為什么會嚴(yán)重降低性能?主要是握手階段時的大數(shù)運算。其中最消耗性能的又是密鑰交換時的私鑰解密階段(函數(shù)是rsa_private_decryption)。這個階段的性能消耗占整個SSL握手性能消耗的95%。
然而隨著各大網(wǎng)站的相繼跟進與硬件的摩爾定律下,為了安全而做這點性能犧牲還是值得的。
- Nginx實現(xiàn)根據(jù)域名http、https分發(fā)配置示例
- Nginx配置多個HTTPS域名的方法
- 詳解Nginx配置SSL證書實現(xiàn)Https訪問
- Nginx配置https的實現(xiàn)
- nginx配置SSL證書實現(xiàn)https服務(wù)的方法
- Nginx配置SSL證書部署HTTPS網(wǎng)站的方法(頒發(fā)證書)
- 詳解nginx如何配置HTTPS
- nginx配置ssl證書實現(xiàn)https訪問的示例
- nginx配置ssl實現(xiàn)https訪問的步驟(適合新手)
- Nginx同時支持Http和Https的配置詳解
- nginx開啟https配置之后網(wǎng)頁無法訪問的問題處理解決
相關(guān)文章
Windows下用Nginx配置https服務(wù)器及反向代理的問題
這篇文章主要介紹了Windows下用Nginx配置https服務(wù)器及反向代理的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09Windows Server 2016 MySQL數(shù)據(jù)庫安裝配置詳細安裝教程
這篇文章主要介紹了Windows Server 2016 MySQL數(shù)據(jù)庫安裝配置詳細安裝教程,需要的朋友可以參考下2017-08-08Nginx Location指令URI匹配規(guī)則詳解小結(jié)
這篇文章主要介紹了Nginx Location指令URI匹配規(guī)則詳解小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Nginx服務(wù)器中的模塊編寫及相關(guān)內(nèi)核源碼初探
這篇文章主要介紹了Nginx服務(wù)器中的模塊編寫及相關(guān)源碼初探,文中以一個簡單的Hello world模塊的編寫來深入分析Nginx內(nèi)核所用到的基礎(chǔ)函數(shù),需要的朋友可以參考下2015-12-12nginx?添加http_stub_status_module模塊
本文主要介紹了nginx?添加http_stub_status_module模塊,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Nginx的location的常見規(guī)則優(yōu)先級問題
Nginx是反向代理和負載均衡的首選工具,nginx的location配置有許多細節(jié)內(nèi)容在網(wǎng)上不容易找到資料,或者解釋不清。本文對Nginx location規(guī)則優(yōu)先級介紹,需要的朋友參考下吧2021-08-08