您好,登錄后才能下訂單哦!
這篇文章主要介紹“Web服務器在Nginx環境下怎么實現安全證書Https的配置”,在日常操作中,相信很多人在Web服務器在Nginx環境下怎么實現安全證書Https的配置問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Web服務器在Nginx環境下怎么實現安全證書Https的配置”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1、先說說Nginx-HTTPS加密技術
超文本傳輸安全協議(HTTPS)是以安全為目標的HTTP通道,簡單來說就是HTTP安全版。https由兩個部分組成:HTTP+SSL/TLS,在http基礎上加上了一層加密信息模塊,服務端和客戶端的信息插損胡都會通過TLS進行加密,傳輸的數據都是加密后的數據。
為了解決HTTP協議的這些缺陷,需要使用另一種協議:HTTPS。為了數據傳輸的安全性,HTTPS在http的基礎上加了SSL協議,SSL依靠證書驗證身份,并為瀏覽器和服務器之間通信加密。
SSL證書是一種數字證書,使用Secure Socket Layer協議在瀏覽器和web服務器之間建立一條安全通道,從而實現數據信息在客戶端和服務器之間的加密傳輸,保證雙方傳遞信息的安全性,不可被第三方竊聽,而且用戶可以通過服務器證書驗證所訪問網站是否真實可靠。
加密的HTTPS和HTTP的區別:超文本傳輸協議HTTP協議被用于在web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的加密數據,如果攻擊者截取了web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀取其中信息,因此,http協議不適合傳輸一些銘感信息。
HTTPS加密,解密,驗證完成過程如圖所示:
首先客戶端發送請求,服務端接受到請求之后并申請生成公私秘鑰,同時將公鑰證書發送給客戶端,客戶端收到之后并通過TLS進行解析驗證,如果證書沒有問題就會在客戶端生成一個加密隨機值,將隨機值發送給服務端,服務端接收到之后,用自己的私鑰解密,從而得到這個隨機值,然后通過這個隨機值對內容進行對稱加密。服務端將用私鑰加密后的信息發送給客戶端,最后,客戶端用之前生成的私鑰來解密服務器端發過來的信息,獲取解密后的內容。
1)客戶端向服務端發起HTTPS請求,用戶在瀏覽器輸入https網址,然后連接到Nginx server的443端口2)服務端采用https協議有一套數字證書,該證書可以自行配置,也可以向證書管理組織去申請,該證書其本質是公鑰和私鑰3)將公鑰傳送給客戶端,證書包含了很多信息,例如,證書的頒發機構,過期時間等等4)客戶端解析證書,由客戶端的TLS完成,首先會驗證公鑰是否有效,比如頒發的機構,過期時間等,如果發生異常,則會彈出警告信息,提示證書存在問題,如果證書沒有問題,就會隨機生成數值,然后用證書對該隨機數值進行加密5)將證書加密后的隨機值傳送到服務器,讓服務器獲取該隨機值,后續客戶端和服務端可以通過該隨機值來進行加密解密6)服務端用私鑰解密后,得到了客戶端傳過來的隨機值,然后把內容通過該值進行了對稱加密7)服務端將私鑰加密后的信息發給客戶端8)客戶端用之前生成的私鑰來解密服務端發送過來的信息,獲取解密后的內容。
2、關于SSL證書
互聯網的安全通信,是建立在SSL/TLS協議之上,SSL/TLS協議的基本思路是采用公鑰加密法,也就是,客戶端先向服務器端索取公鑰,然后用公鑰加密信息,服務器收到密文后,用自己的私鑰解密。通過這種加解密機制,可以保障所有信息都是加密傳播,無法竊聽,同時,傳輸具有校驗機制,一旦信息被篡改,可以立刻發現,最后,通過身份證書機制,可以防止身份被冒充。由此可知,SSL證書主要有兩個功能:加密和身份認證。
目前市面上的SSL證書都是通過第三方SSL證書機構頒發的,常見可靠的第三方 SSL證書頒發機構有DigiCert、GeoTrust、GlobalSign、Comodo等。
根據不同使用環境,SSL證書可分為如下幾種:
企業級別:EV(Extended Validation)、OV(Organization Validation)? 個人級別:IV(Identity Validation)、DV(Domain Validation)。
其中 EV、OV、IV 需要付費,企業用戶推薦使用EV或OV證書,個人用戶推薦使用IV證書,DV證書雖有免費的可用,但它是最低端的SSL證書。它不顯示單位名稱,也不能證明網站的真實身份,只能驗證域名所有權,僅起到加密傳輸信息的作用,適合個人網站或非電商網站。
3、使用OpenSSL生成私鑰文件和CSR文件
Nginx配置HTTPS并不復雜,主要有兩個步驟:簽署第三方可信任的 SSL證書和配置 HTTPS,下面依次介紹。
要配置HTTPS需要用到一個私鑰文件(以.key結尾)和一個證書文件(以.crt結尾) ,而證書文件是由第三方證書頒發機構簽發的,要讓第三方證書頒發機構簽發證書文件,還需要給他們提供一個證書簽署請求文件(以.csr結尾)。下面簡單介紹下私鑰文件和csr文件。
私鑰文件:以.key結尾的一個文件,由證書申請者生成,它是證書申請者的私鑰文件,和證書里面的公鑰配對使用,在 HTTPS 握手通訊過程中需要使用私鑰去解密客戶端發來的經過證書公鑰加密的隨機數信息,它是HTTPS加密通訊過程非常重要的文件,在配置HTTPS的時候要用到。CSR文件:CSR全稱是Cerificate Signing Request,即證書簽署請求文件,此文件里面包含申請者的DN(Distinguished Name,標識名)和公鑰信息,此文件由證書申請者生成,同時需要提供給第三方證書頒發機構。證書頒發機構拿到CSR文件后,使用其根證書私鑰對證書進行加密并生成CRT證書文件,CRT文件里面包含證書加密信息以及申請者的DN及公鑰信息,最后,第三方證書頒發機構會將CRT文件發給證書申請者,這樣就完成了證書文件的申請過程。
在申請SSL證書之前,證書申請者需要先生成一個私鑰文件和一個CSR文件,可通過openssl命令來生成這兩個文件,操作如下:
[root@iZ23sl33esbZ ~]# openssl req -new -newkey rsa:2048 -sha256 -nodes -out iivey.csr -keyout iivey.key -subj "/C=CN/ST=beijing/L=beijing/O=iivey Inc./OU=Web Security/CN=iivey.com"
上面這個命令會生成一個CRS文件iivey.csr和私鑰文件iivey.key。其中,相關字段含義如下:
C字段:即Country,表示單位所在國家,為兩位數的國家縮寫,如CN表示中國? ST字段: State/Province,單位所在州或省? L字段: Locality,單位所在城市/或縣區? O字段: Organization,此網站的單位名稱 OU字段: Organization Unit,下屬部門名稱;也常常用于顯示其他證書相關信息,如證書類型,證書產品名稱或身份驗證類型或驗證內容等? CN字段:Common Name,網站的域名。
接著,將生成的CSR文件提供給CA機構,簽署成功后,CA機構就會發給我們一個CRT證書文件,假定這個文件是iivey.crt,在獲得SSL證書文件后,就可以在Nginx配置文件里配置HTTPS了。
4、Nginx下配置SSL證書
要開啟HTTPS服務,其實就是在Nginx上開啟一個443監聽端口,下面是HTTPS服務在Nginx下的配置方式,這里僅列出了server段的配置:
server { listen 443; server_name www.iivey.com; index index.php index.html; root /data/webhtdocs/iivey; ssl on; ssl_certificate iivey.crt; ssl_certificate_key iivey.key; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-Xss-Protection 1; }
簡單介紹下上面每個配置選項的含義:
ssl on:表示啟用SSL功能。
ssl_certificate:用來指定CRT文件的路徑,可以是相對路徑,也可以是絕對路徑,本例是相對路徑,iivey.crt文件放在和nginx.conf同級目錄下。
ssl_certificate_key:用來指定秘鑰文件的路徑,可以是相對路徑,也可以是絕對路徑,本例是相對路徑,iivey.key文件放在和nginx.conf同級目錄下。
ssl_prefer_server_ciphers on:設置協商加密算法時,優先使用我們服務端的加密套件,而不是客戶端瀏覽器的加密套件。
ssl_protocols:此指令用于啟動特定的加密協議,這里設置為“TLSv1 TLSv1.1 TLSv1.2”,TLSv1.1與TLSv1.2要確保openssl版本大于等于openssl1.0.1 ,SSLv3也可以使用,但是有不少被攻擊的漏洞,所以現在很少使用了。
ssl_ciphers:選擇加密套件和加密算法,不同的瀏覽器所支持的套件和順序可能會有不同。這里選擇默認即可。
add_header X-Frame-Options DENY:這是個增強安全性的選項,表示減少點擊劫持。
add_header X-Content-Type-Options nosniff:同樣是增強安全性的選項,表示禁止服務器自動解析資源類型。
add_header X-Xss-Protection 1:同樣是增強安全性的選項,表示防止XSS攻擊。
5、驗證HTTPS功能
Nginx的https配置完成后,需要測試下配置是否正常,這里提供兩種方式,第一種方式是直接通過瀏覽器訪問https服務,這里使用火狐瀏覽器進行測試,如果https配置正常的話,應該會直接打開頁面,而不會出現如下界面:
出現這個界面,說明https沒有配置成功,需要檢查https配置是否正確。而在打開https頁面后,可能還會出現一種情況,如下圖所示:
這個現象是能夠打開https界面,但是瀏覽器地址欄左邊的小鎖是灰色,并且有個黃色的感嘆號,這說明這個網站的頁面中可能引用了第三方網站的圖片、js、css等資源文件,https認為頁面有引用第三方網站資源的情況是不安全的,所以才出現了警告提示。解決這個問題很簡單,將頁面上所有引用第三方網站的資源文件下載到本地,然后通過本地路徑進行引用即可。
修改所有資源文件到本地服務器后,再次通過https方式進行訪問,瀏覽器地址欄左邊的小鎖自動變成綠色,并且感嘆號消失,如下圖所示:
至此,nginx下配置https服務已經正常運行。
在瀏覽器下可以查看證書信息(證書廠商、證書機構、證書有效期等),點擊瀏覽器地址欄的綠鎖,選擇查看證書,即可查看證書詳細信息,如下圖所示:
到此,關于“Web服務器在Nginx環境下怎么實現安全證書Https的配置”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。