首頁 > 軟體

Nginx設定HTTPS的方法步驟

2022-03-21 13:04:13

背景

HTTP

超文字傳輸協定,是一個基於請求與響應,無狀態的,應用層的協定,常基於TCP/IP協定傳輸資料,網際網路上應用最為廣泛的一種網路協定,所有的WWW檔案都必須遵守這個標準。設計HTTP的初衷是為了提供一種釋出和接收HTML頁面的方法。

優點

  • 支援客戶/伺服器模式
  • 簡單快速:伺服器當用戶端請求服務時,只需傳送請求方法和路徑
  • 靈活: HTTP 允許任何型別的資料物件的傳輸
  • 無連線:限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
  • 無狀態:協定對於事務處理沒有記憶能力,伺服器不知道使用者端是什麼狀態。我們給伺服器傳送 HTTP 請求之後,伺服器根據請求,會給我們傳送資料過來,但是,傳送完,不會記錄任何資訊。HTTP 是一個無狀態協定,這意味著每個請求都是獨立的,Keep-Alive 沒能改變這個結果。

缺點

  • HTTP協定傳輸資料,都是通過明文的方式在網際網路上傳遞(如賬號、密碼、身份資訊、瀏覽器記錄和交易記錄)
  • 任何人都可以輕鬆攔截、竊取或篡改資料,可能造成你的隱私資料洩露(中間人攻擊)

HTTPS

HTTPS (全稱:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全為目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性 [1] 。HTTPS 在HTTP 的基礎下加入SSL,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL。 HTTPS 存在不同於 HTTP 的預設埠及一個加密/身份驗證層(在 HTTP與 TCP 之間)。這個系統提供了身份驗證與加密通訊方法。它被廣泛用於全球資訊網上安全敏感的通訊,例如交易支付等方面 。

原理圖如下:

簡單來說,https是在http的基礎上新增了證書來驗證安全性,使用者端拿到了https的證書會向證書伺服器去驗證證書的真偽,這樣就可避免中間人攻擊。在向證書伺服器驗證證書後,使用者端就能拿到伺服器的公鑰,同時使用者端也會生成這次自己的私鑰和公鑰,在請求傳輸的過程中會使用伺服器公鑰將資料和使用者端公鑰進行加密,這種加密是非對稱加密的(很難破解),伺服器擁有私鑰可以將資料進行解密。伺服器返回資料時會使用使用者端的公鑰進行加密,這樣只有使用者端才能使用私鑰解密資料。這個過程是安全的。

設定過程

這裡我使用的是nginx伺服器設定域名htpps(設定SSL證書)

域名證書申請

我是使用騰訊雲購買的域名:sunbt.ltd

國內伺服器使用域名時需要備案,這裡我預設都已經備案

進入騰訊的SSL證書管理頁面,申請對應的域名證書

下載對應的證書,這裡我選擇NGINX版本的

編輯nginx.conf檔案

將證書解壓放到伺服器對應位置上

新增如下內容:

server {
        #SSL 存取埠號為 443
        listen 443 ssl; 
        #填寫繫結證書的域名
        server_name www.sunbt.ltd; 
        #證書檔名稱
        ssl_certificate /usr/local/nginx/conf/ssl/www.sunbt.ltd_bundle.crt; 
        #私鑰檔名稱
        ssl_certificate_key /usr/local/nginx/conf/ssl/www.sunbt.ltd.key; 
        ssl_session_timeout 5m;
        #請按照以下協定設定
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
        #請按照以下套件設定,設定加密套件,寫法遵循 openssl 標準。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        location @router {
            rewrite ^.*$ /index.html last;
         }
        location / {
                root /usr/local/nginx/html/web/blog; # /vue/dist/ 打包後的dist目錄
                try_files $uri $uri/ @router; # 指向下面的 @router否則會出現 404
                index index.html index.htm;
        }

    }

讓http請求跳轉到https

修改設定如下:

server {
    listen 80;
    #填寫繫結證書的域名
    server_name cloud.tencent.com; 
    #把http的域名請求轉成https
    return 301 https://$host$request_uri; 
}

到此這篇關於NGINX設定HTTPS的文章就介紹到這了,更多相關NGINX設定HTTPS內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com