天天看點

Web Server之如何支援https

标簽(空格分隔): web https

概述

首先明确一個問題, 為什麼要使用https?https是基于SSL的http協定,用戶端和伺服器之間的資料是通過加密的方式傳輸的,差別于http的明文傳輸。設想一下這個場景,在傳輸過程中經過了一個代理,如果使用明文傳輸(http),那麼代理将擷取到傳輸過程中的所有資訊,是以對傳輸的資訊進行加密是很有必要的。實際情況就是這樣, 網絡資源在用戶端與服務端之間傳輸,必然會經過很多層中間代理,使用https能確定傳輸的安全性。

https的詳細資訊介紹不在我們本次讨論的範疇,有興趣的同學可以參考這個: http://blog.jobbole.com/110373/。

回歸到本文的主題,如何如何讓一個網站支援https?

申請證書

所謂證書就是指數字證書,好比一個機構或人的簽名,能夠證明這個結構或人的真實性。我們可以通過國際公認的證書頒發機構申請證書,這樣的證書是可以被用戶端識别的。本文也不做過多的介紹,假定我們證書申請好了,包括兩個部分.key、.pem,大緻情況如下:

Web Server之如何支援https
具體證書的生成可以參考本文:http://www.cnblogs.com/kyrios/p/tls-and-certificates.html

配置

本文講述通過nginx搭建https環境,可以做如下處理:

Nginx通過yum安裝,配置檔案路徑/etc/nginx
  • 1 将證書上傳到虛機,如

    /etc/nginx/cert/*

  • 2 修改nginx配置,如在中新增一個配置檔案www.shushanfx.com.conf:
server {
    listen  http2 default_server;
    listen [::]: ssl http2 default_server;
    # 使用你自己的域名
    server_name www.shushanfx.com;
    ssl on; 

    root /shushanfx/nginx/html;
    index index.html index.htm;

    ssl_certificate   "/etc/nginx/cert/214024137860950.pem";
    ssl_certificate_key  "/etc/nginx/cert/214024137860950.key";
    ssl_session_timeout m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1 TLSv1;
    ssl_prefer_server_ciphers on;
    location / {

    }
    error_page  /html;
        location = /x.html {
    }       

    error_page     /x.html;
        location = /x.html {
    }
}
           
  • 3 重新開機nginx

注意事項:

  1. nginx在預設情況下會關閉https,在搭建時需要確定安裝ngx_http_ssl_module,如果未安裝則需要添加該子產品。即重新編譯生成nginx代碼,并配置參數 –with-http_ssl_module

    [[email protected] nginx-1.10.2]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module

  2. 對于自己生成的證書,浏覽器預設是不識别的,需要手動接受加密證書。

參考文獻:

  1. HTTPS為什麼更安全,先看看這些: http://blog.jobbole.com/110373/
  2. 淺談https\ssl\數字證書: http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html
  3. 如何生成https證書: http://www.cnblogs.com/kyrios/p/tls-and-certificates.html

繼續閱讀