天天看點

nginx 使用SSL對流量進行加密

說白了就是将我們常用的http請求轉變成https請求,那麼這兩個之間的差別簡單的來說兩個都是HTTP協定,隻不過https是身披SSL外殼的http.

HTTPS是一種通過計算機網絡進行安全通信的傳輸協定。它經由HTTP進行通信,利用SSL/TLS建立全通信,加密資料包,確定資料的安全性。

SSL(Secure Sockets Layer)安全套接層

TLS(Transport Layer Security)傳輸層安全

上述這兩個是為網絡通信提供安全及資料完整性的一種安全協定,TLS和SSL在傳輸層和應用層對網絡連接配接進行加密。

總結來說為什麼要使用https:

http協定是明文傳輸資料,存在安全問題,而https是加密傳輸,相當于 http+ssl,并且可以防止流量劫持。
      

Nginx要想使用SSL,需要滿足一個條件即需要添加一個子產品–with- http_ssl_module ,而該子產品在編譯的過程中又需要OpenSSL的支援.

nginx添加SSL的支援

(1)完成 --with-http_ssl_module子產品的增量添加

将原有/usr/local/nginx/sbin/nginx進行備份 
拷貝nginx之前的配置資訊 
在nginx的安裝源碼進行配置指定對應子產品 ./configure -- 
with-http_ssl_module 
通過make模闆進行編譯 
将objs下面的nginx移動到/usr/local/nginx/sbin下 
在源碼目錄下執行 make upgrade進行更新,這個可以實作不停機添 
加新子產品的功能 
      

Nginx的SSL相關指令

ssl:該指令用來在指定的伺服器開啟HTTPS,可以使用 listen 443 ssl,後面這種方式更通用些。

文法 ssl on | off;
預設值 ssl off;
位置 http,server
server{ 
listen 443 ssl; 
} 
      

ssl_certifificate:為目前這個虛拟主機指定一個帶有PEM格式證書的證書。

ssl_certifificate file;

ssl_certificate_key:該指令用來指定PEM secret key檔案的路徑

ssl_ceritifificate_key file;

ssl_session_cache:該指令用來配置用于SSL會話的緩存

ssl_sesion_cache off|none|[builtin[:size]]

[shared:name:size]

ssl_session_cache none;
http、server

off:禁用會話緩存,用戶端不得重複使用會話

none:禁止使用會話緩存,用戶端可以重複使用,但是并沒有在緩存中存儲會話參數

builtin:内置OpenSSL緩存,僅在一個工作程序中使用。

shared:所有工作程序之間共享緩存,緩存的相關資訊用name和size來指定

ssl_session_timeout:開啟SSL會話功能後,設定用戶端能夠反複使用儲存在緩存中的會話參數時間。

ssl_session_timeout time;
ssl_session_timeout 5m;

ssl_ciphers:指出允許的密碼,密碼指定為OpenSSL支援的格式

ssl_ciphers ciphers;
ssl_ciphers HIGH:!aNULL:!MD5;

可以使用openssl ciphers檢視openssl支援的格式。

ssl_prefer_server_ciphers:該指令指定是否伺服器密碼優先用戶端密碼

ssl_perfer_server_ciphers on| off;
ssl_perfer_server_ciphers off;

生成證書

方式一:使用阿裡雲/騰訊雲等第三方服務進行購買。

方式二:使用openssl生成證書

先要确認目前系統是否有安裝openssl

openssl version
      

安裝下面的指令進行生成

mkdir /root/cert 
cd /root/cert 
openssl genrsa -des3 -out server.key 1024 
openssl req -new -key server.key -out server.csr 
cp server.key server.key.org 
openssl rsa -in server.key.org -out server.key 
openssl x509 -req -days 365 -in server.csr -signkey 
server.key -out server.crt 
      

開啟SSL執行個體

server { 
listen 443 ssl; 
server_name localhost; 
ssl_certificate server.cert; 
ssl_certificate_key server.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; 
  }
}
      
上一篇: 淺談CDP技術

繼續閱讀