https的簡單介紹和nginx搭建

一、https簡介

簡單的說,https就是http的基礎上增加ssl/tsl,其中tsl是ssl的升級版協議名稱,現在用的大部分都已經是tsl協議了。這裏不深究ssl/tsl這個協議了,深究也不會哈,

二、https涉及到的常用加密算法

1.對稱加密算法

加密與解密祕鑰相同,算法具體的實現這裏不做介紹

des(data 已經不安全了) ,3des(des的加強版,兼容des)

aes(advanced 128位,192位,256位)推薦使用

2.非對稱加密算法

rsa(名字來自於三個發明開發者的姓氏)

3.單向散列函數

MD5(message digest)

SHA-1 SHA-2(使用最多)

三、消息認證

消息認證碼mac(message authenticaation code)確認完整性並進行認證的技術,實現散列函數+對稱加密,通信時會將消息和mac碼都發送,驗證收到的mac碼和本地生產的mac碼是否相同來確認消息的完整性和認證。但是沒有第三方認證,存在抵賴,一方否認。還有就是祕鑰分發困難

四、數字簽名與CA證書

解決了向大家告訴我是誰的問題,利用到了非對稱加密中的私鑰來證明自己,大家可以使用公鑰來解析,也就是利用了私鑰加密來證明了自己,而公鑰解密就不可否認了,但是這裏公鑰可能變中間者替換,從而導致整個消息被替換,於是產生了公鑰與域名綁定綁定的CA證書,CA證書是實現https通信的基礎,CA就是解決你就是你的問題,其實自己可以實現自己證明自己,只不過操作系統和瀏覽器不認識,所有的被信任的CA證書都是根證書,或者根證書信任的子證書,而且還是花錢的。CA也叫證書授權中心

五、自己生成證書與部署nginx

都知道ssl/tsl是協議,是一種規則,具體到軟件上可以是openssl,下面就是利用openssl工具在linux生成自己頒發的證書

命令行敲入 openssl進入openssl模式

1.生成非對稱祕鑰對,公鑰的信息是保存在私鑰裏面的,隨後會讓你輸入密碼並確定密碼

genrsa -des3 -out server.key 2048  這裏使用的2048位rsa算法生成私鑰比對私鑰進行3des加密,也就是說生成的祕鑰是加密過的,

2.生成CSR(證書籤名請求),這個是包裝自己的私鑰一遍向CA機構發送,這是要輸入自己網站的信息,根據提示一步步填

req -new -key server.key -out server.csr

3.爲避免生成的server.key使用時反覆輸入密碼,這裏解密出來

   rsa -in server.key -out server.key

4.生成自簽名證書,server.crt就是自己生成的證書

 x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

5.nginx的配置,這裏只展示nginx https的配置


# Settings for a TLS enabled server.

    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/pki/nginx/server.crt";
        ssl_certificate_key "/etc/pki/nginx/server.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }
        location /avatar {
            expires 24h;
            root /my/project/img;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

其中ssl_certificate 和ssl_certificate_key 分別是證書的位置和私鑰的位置,此時就可以實現https協議訪問了,但是瀏覽器會提示證書無效之類的警告。一直忽略也可以實現https通信,

六、使用wireShark抓包工具對同一個接口不同協議交互時的區別

wireShark與fiddler抓包原理不一樣,wireShark是抓網卡,fiddler是軟代理

1.http請求時,可以看到tcp的三次握手和四次揮手,而且http是明文的

2.https請求時,依然有tcp的三次握手和四次揮手(截圖只展示了一部分),但是沒有了http協議 而是TLSV1.2協議,https協議體現是在瀏覽器認識這個協議,其實使用TSL通信的,如果用在郵件上也可使用ssl/tsl,則發送的郵件也是加密的

只簡要拿出tls協議的部分,b爲瀏覽器,s爲客戶端,我的理解是先商量一下咱倆都支持加密嗎,對應到端口也就是兩臺機器上的進程程序,瀏覽器得至服務器支持加密,把祕鑰發給服務器,並以後發送的application data我都是加密了的,服務收到了祕鑰,並用祕鑰加密,同樣的方式也將application data的數據加密,這個祕鑰是客戶端生成的。

1.b-->s Client Hello 

2.s-->b Server Hello

3.b-->s Client Key Exchange,change cipher spec,Encrypted Handshake message 

4.b-->s Application Data

5.b-->s Application Data

6.s-->b New Session Ticket,Change Cipher spec,Encrypted Handshake Message

7.s-->b  Application Data

8.s--b> Application Data

9.s-->b  Application Data

10.s--b> Application Data

11.s--b> Application Data

12.s--b> Encrypted Alert 

七.使用正式的證書

在阿里雲上可以申請免費的CA證書,而且是可信的,但是也要走購買ssl證書流程,只不過支付的是0元,是Symantec廠商生成的,下載證書後,將.pem的證書代替第五部.crt的證書,將.key的私鑰代替.key的文件,nginx -s reload即可。

八、https總結

https的傳輸過程應用到了對稱加密,非對稱加密,單向散列函數加密技術,數據傳輸中其實使用的是對稱加密,且祕鑰有客戶端生成,而ca證書是解決公鑰的可信度問題,使用可信的公鑰對自己生成的密碼加密進行分發到服務器,因爲私鑰只有服務器有,所以這個密碼只有服務器可以獲取,完成了對稱加密密碼分發困難的解決。但是https也不是絕對安全的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章