HTTP存在的問題nginx
一、沒法保證訪問到受信網站
當咱們要訪問一個網站時,如何才能保證這個網站就是咱們要的?假設場景以下:算法
二、沒法保證數據私密性和完整性
HTTP協議的數據在傳輸過程當中使用明文傳輸,很容易被抓取和篡改,可以使用tcpdump工具進行驗證。服務器
HTTPS的解決思路app
一、網站受信鑑權
引入第三方授信服務商,由授信服務商提供網站證書籤名,保證網站可信。tcp
二、數據私密性和完整性
HTTPS協議利用網站證書籤名來生成相應的公鑰和密鑰,對數據報文進行加解密處理。ide
HTTPS的流程和原理工具
以app<- - - ->server爲例網站
前提
向第三方授信服務商購買證書,或在服務器生成本地證書,並將證書放到網站服務器的指定路徑下,同時將證書發給客戶端app保存在本地。加密
https的工做流程
一、校驗服務器:客戶端向CA機構認證服務器信息
二、協商會話密鑰:客戶端和服務器協商會話加密密鑰
三、加密通信:客戶端和服務器使用會話密鑰加密數據報文
spa
注:因爲非對稱加密的算法複雜,佔用較多CPU資源,實際使用時會放棄第七、8兩步。
HTTPS的配置
以本地自簽名證書爲例
證書生成
因爲沒有向第三方申請證書,咱們使用openssl生成本地證書來演示https的配置。
nginx配置https端口轉發
一、nginx須要安裝支持ssl的模塊。
二、在nginx配置文件中新增https端口轉發配置
證書生成
一、製做證書私鑰:
>openssl genrsa -des3 -out test_yunqixin_service.crt 1024
二、使用證書私鑰製做解密後的證書私鑰:
>openssl rsa -in test_yunqixin_service.crt -out test_yunqixin_service_nopass.key
三、使用證書私鑰生成證書籤名:
>openssl req -new -key test_yunqixin_service.crt -out test_yunqixin_service.csr
提示輸入證書信息:Common Name (eg, your name or your server's hostname) []:
此處咱們輸入網站域名:test.yunqixin.site,這很重要,必須輸入證書綁定的域名。
四、使用證書私鑰和簽名生成證書crt文件:
>openssl x509 -req -days 10000 -in test_yunqixin_service.csr -signkey test_yunqixin_service_nopass.key -out test_yunqixin_service.crt
證書生成
通過上面四個步驟,獲得.crt文件和.key文件,內容以下。
這兩個文件也是須要配置到nginx的配置文件裏面。
nginx配置https端口轉發
一、ssl配置:端口(默認443)、ssl協議及版本、ssl加密方式、證書路徑
二、nginx轉發配置:與http轉發配置一致
https效果