說白了就是将我們常用的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;
}
}