1. 程式人生 > 實用技巧 >Nginx系列:https配置

Nginx系列:https配置

有HTTP了,為什麼需要HTTPS

主要原因是HTTP資料傳輸時沒有對資料進行加密,所以導致資料不安全。而HTTPS在HTTP上加了一層,對資料進行加密,這樣就保證了資料的安全性。防止傳輸的資料過程中被不法分子盜用、劫持、篡改,而導致資料資訊的洩露。

HTTPS協議的實現

對傳輸內容進行加密以及身份驗證

  • 對稱加密:加密祕鑰和解密祕鑰是一樣的

  • 非對稱加密:加密金鑰與解密金鑰是不一樣的,但是是成對的。

  • HTTPS加密協議原理

中間人偽造客戶端和服務端:(中間人可以偽裝成客戶端和服務端,中間人可以對資料進行劫持,不安全)

HTTPS的CA簽名證書:(服務端和客戶端通過實現約定好的證書進行認證,都會對證書進行校驗,所以中間人沒法劫持資料,故安全)

0x01:先驗證Nginx安裝情況

在【Nginx系列:Nginx原始碼安裝】 文章中,知道安裝Nginx時,必須首先安裝openssl openssl-devel依賴 模組,而這兩個模組就是HTTPS需要使用者的類庫;所以毫無疑問安裝Nginx時,Linux系統肯定安裝了這兩個模組;

Nginx的https需要安裝with-stream_ssl_preread_module目錄,在nginx的原始碼目錄執行以下命令,可以看出nginx預設並不會安裝stream_ssl_preread_module模組的,需要重新編譯安裝一下

catauto/options|grepYES|grepssl

安裝一下stream_ssl_preread_module模組

./configure--prefix=/usr/local/nginx--user=nginx\
--group=nginx--with-http_secure_link_module\
--with-http_stub_status_module--with-stream_ssl_preread_module
--with-http_ssl_modulemake
cdobjs/
mvnginx/usr/local/nginx/sbin/

0x02:生成祕鑰和CA證書

  • 生成key祕鑰

先進入Nginx的安裝目錄,然後生成一個目錄,存放金鑰和CA證書

cd/usr/local/nginx/conf/
mkdirhttpsKeys
cdhttpsKeys

先看下openssl命令的基本用法

基本語法:
opensslgenrsa[args][numbits]
說明:
args1對生成的私鑰檔案是否要使用加密演算法進行對稱加密:
-des:CBC模式的DES加密
-des3:CBC模式的3DES加密
-aes128:CBC模式的AES128加密
-aes192:CBC模式的AES192加密
-aes256:CBC模式的AES256加密
args2對稱加密密碼
-passoutpasswords
其中passwords為對稱加密(des、3des、aes)的密碼(使用這個引數就省去了console互動提示輸入密碼的環節)
args3輸出檔案
-outfile:輸出證書私鑰檔案
[numbits]:金鑰長度,理解為私鑰長度

使用如下命令生成key祕鑰

opensslgenrsa-idea-outjesonc.key2048

執行以上命令需要輸入金鑰key的密碼,這裡使用密碼:admin,最終在當前目錄生成一個jesonc.key的金鑰檔案。

  • 生成證書籤名請求檔案(csr檔案)

根據金鑰檔案jesonc.key生成證書籤名請求檔案jesonc.csr

opensslreq-new-keyjesonc.key-outjesonc.csr

執行命令的過程中需要根據提示輸入一些相關的資訊,最終會在當前目錄生成jesonc.csr檔案。

  • 生成證書籤名檔案(CA檔案)

生成證書籤名檔案(CA檔案),有效期設定為10年,這個有效期根據自己的要求設定。

opensslx509-req-days3650-injesonc.csr\
-signkeyjesonc.key-outjesonc.crt

0x03:nginx配置https

Nginx配置HTTPS的基本語法如下

ssl開關:

配置語法:listen443ssl;#1.1版本後這樣寫

ssl證書檔案

配置語法:ssl_certificate file;
預設狀態:-
配置方法:http、server

ssl密碼檔案

配置語法:ssl_certificate_key file;
預設狀態:ssl off;
配置方法:http、server

在server模組新增如下配置

listen443 ssl;
server_namelocalhost;

ssl_session_cacheshared:SSL:10m;
ssl_session_timeout10m;

ssl_certificate/usr/local/nginx/conf/httpsKeys/jesonc.crt;#證書路徑
ssl_certificate_key/usr/local/nginx/conf/httpsKeys/jesonc.key;#請求認證key的路徑

啟動Nginx

啟動Nginx時需要輸入密碼,這時因為生成證書籤名請求檔案(csr檔案)在A challenge password時我輸入了密碼。這個密碼可以不輸入。

驗證是否可以訪問,雖然目前自簽名的證書已經不能使用;但是nginx的HTTPS大致是這樣配置的。