1. 程式人生 > >最新Https請求原理、OPenssl生成證書、nginx的https配置

最新Https請求原理、OPenssl生成證書、nginx的https配置

Https請求原理

我們都知道HTTPS能夠加密資訊,以免敏感資訊被第三方獲取。所以很多銀行網站或電子郵箱等等安全級別較高的服務都會採用HTTPS協議。
HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密資訊的模組。服務端和客戶端的資訊傳輸都會通過TLS進行加密,所以傳輸的資料都是加密後的資料。具體是如何進行加密,解密,驗證的,且看下圖。
這裡寫圖片描述
1. 客戶端發起HTTPS請求

這個沒什麼好說的,就是使用者在瀏覽器裡輸入一個https網址,然後連線到server的443埠。

2. 服務端的配置

採用HTTPS協議的伺服器必須要有一套數字證書,可以自己製作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。這套證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然後發給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。

3. 傳送證書

這個證書其實就是公鑰,只是包含了很多資訊,如證書的頒發機構,過期時間等等。

4. 客戶端解析證書

這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麼就生成一個隨即值。然後用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。

5. 傳送加密資訊

這部分傳送的是用證書加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通訊就可以通過這個隨機值來進行加密解密了。

6. 服務段解密資訊

服務端用私鑰解密後,得到了客戶端傳過來的隨機值(私鑰),然後把內容通過該值進行對稱加密。所謂對稱加密就是,將資訊和私鑰通過某種演算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密演算法夠彪悍,私鑰夠複雜,資料就夠安全。

7. 傳輸加密後的資訊

這部分資訊是服務段用私鑰加密後的資訊,可以在客戶端被還原

8. 客戶端解密資訊

客戶端用之前生成的私鑰解密服務段傳過來的資訊,於是獲取瞭解密後的內容。整個過程第三方即使監聽到了資料,也束手無策。
這裡寫圖片描述

OPenssl生成

在window上安裝openssl或者在虛擬機器的ubuntu系統下直接進行生成。為確保執行沒有問題,部分步驟操作完直接進行ls檢視操作

1、openssl       //檢視是否安裝了openssl
2、openssl genrsa -des3 -out danfeng.key 2048   
//key的生成 , 建立私鑰,過去的1024已經不適用了 
3、ls 4、openssl req -new -key danfeng.key -out danfeng.csr //csr的生成方法需要依次輸入國家,地區,組織,email。最重要的是有一個common name,可以寫你的名字或者域名。如果為了https申請,這個必須和域名吻合,否則會引發瀏覽器警報。 5、ls 6、less danfeng.csr //上面的步驟是伺服器端私鑰的生成和服務端證書的生成,下面是客戶端的 7、openssl rsa -in danfeng.key -out danfeng_nopass.key // 客戶端私鑰 8、openssl req -new -x509 -days 3650 -key danfeng_nopass.key -out danfeng.crt //自簽署證書 9、ls 10、less danfeng.crt

nginx的https配置

安裝nginx ,找到conf資料夾,將openssl生成的 danfeng.crt和danfeng_nopass.key放在它下面,並找到nginx.conf檔案,開啟後進行如下修改。

  # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl                  on;//開啟ssl
        ssl_certificate      danfeng.crt;//證書
        ssl_certificate_key  danfeng_nopass.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }