日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx 配置 SSL 及 HTTPS 协议通信过程

發布時間:2025/3/15 Nginx 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx 配置 SSL 及 HTTPS 协议通信过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

基礎知識

1.1 公鑰密碼體制(public-key cryptography)

公鑰密碼體制分為三個部分,公鑰、私鑰、加密解密算法,它的加密解密過程如下:

加密:通過加密算法和公鑰對內容(或者說明文)進行加密,得到密文。加密過程需要用到公鑰。

解密:通過解密算法和私鑰對密文進行解密,得到明文。解密過程需要用到解密算法和私鑰。注意,由公鑰加密的內容,只能由私鑰進行解密,也就是說,由公鑰加密的內容,如果不知道私鑰,是無法解密的。

公鑰密碼體制的公鑰和算法都是公開的(這是為什么叫公鑰密碼體制的原因),私鑰是保密的。大家都以使用公鑰進行加密,但是只有私鑰的持有者才能解密。在實際的使用中,有需要的人會生成一對公鑰和私鑰,把公鑰發布出去給別人使用,自己保留私鑰。

1.2 對稱加密算法(symmetric key algorithms)

在對稱加密算法中,加密使用的密鑰和解密使用的密鑰是相同的。也就是說,加密和解密都是使用的同一個密鑰。因此對稱加密算法要保證安全性的話,密鑰要做好保密,只能讓使用的人知道,不能對外公開。這個和上面的公鑰密碼體制有所不同,公鑰密碼體制中加密是用公鑰,解密使用私鑰,而對稱加密算法中,加密和解密都是使用同一個密鑰,不區分公鑰和私鑰。密鑰,一般就是一個字符串或數字,在加密或者解密時傳遞給加密/解密算法。前面在公鑰密碼體制中說到的公鑰、私鑰就是密鑰,公鑰是加密使用的密鑰,私鑰是解密使用的密鑰。

1.3 非對稱加密算法(asymmetric key algorithms)

在非對稱加密算法中,加密使用的密鑰和解密使用的密鑰是不相同的。前面所說的公鑰密碼體制就是一種非對稱加密算法,他的公鑰和是私鑰是不能相同的,也就是說加密使用的密鑰和解密使用的密鑰不同,因此它是一個非對稱加密算法。

1.4 RSA簡介

RSA 是一種公鑰密碼體制,現在使用得很廣泛。如果對 RSA 本身有興趣的,可以查詢 RSA 相關的具體介紹。

RSA 密碼體制是一種公鑰密碼體制,公鑰公開,私鑰保密,它的加密解密算法是公開的。由公鑰加密的內容可以并且只能由私鑰進行解密,并且由私鑰加密的內容可以并且只能由公鑰進行解密。也就是說,RSA 的這一對公鑰、私鑰都可以用來加密和解密,并且一方加密的內容可以由并且只能由對方進行解密。

1.5 簽名和加密

我們說加密,是指對某個內容加密,加密后的內容還可以通過解密進行還原。 比如我們把一封郵件進行加密,加密后的內容在網絡上進行傳輸,接收者在收到后,通過解密可以還原郵件的真實內容。

這里主要解釋一下簽名,簽名就是在信息的后面再加上一段內容,可以證明信息沒有被修改過,怎么樣可以達到這個效果呢?一般是對信息做一個 hash 計算得到一個hash值,注意,這個過程是不可逆的,也就是說無法通過 hash 值得出原來的信息內容。在把信息發送出去時,把這個 hash 值加密后做為一個簽名和信息一起發出去。 接收方在收到信息后,會重新計算信息的 hash 值,并和信息所附帶的hash值(解密后)進行對比,如果一致,就說明信息的內容沒有被修改過,因為這里 hash 計算可以保證不同的內容一定會得到不同的 hash 值,所以只要內容一被修改,根據信息內容計算的 hash 值就會變化。當然,不懷好意的人也可以修改信息內容的同時也修改hash值,從而讓它們可以相匹配,為了防止這種情況,hash 值一般都會加密后(也就是簽名)再和信息一起發送,以保證這個 hash 值不被修改。

?

HTTPS 的通信過程

HTTPS 是 HTTP 的安全版本,它可以通過 SSL / TLS 連接保護在線傳輸的任何通信。簡而言之,HTTPS=HTTP+SSL。如果想要建立 HTTPS 連接,則首先必須從受信任的證書頒發機構(CA)Gworg 機構注冊 SSL證書。安裝 SSL 證書后,網站地址欄 HTTP 后面就會多一個 "S",還有綠色安全鎖標志。

SSL(Secure Sockets Layer,安全套接字層)協議,及其繼任者 TLS(Transport Layer Security,傳輸層安全)協議,是為網絡通信提供安全及數據完整性的一種安全協議。

1)瀏覽器發送一個 HTTPS 的請求給服務器;

2)服務器要有一套數字證書,可以自己制作,也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面,這套證書其實就是一對公鑰和私鑰;

3)服務器會把公鑰傳輸給客戶端;

4)客戶端(瀏覽器)收到公鑰后,會驗證其是否合法有效,無效會有警告提醒,有效則會生成一串隨機數,并用收到的公鑰加密;

5)客戶端把加密后的隨機字符串傳輸給服務器;

6)服務器收到加密隨機字符串后,先用私鑰解密(公鑰加密,私鑰解密),獲取到這一串隨機數后,再用這串隨機字符串加密傳輸的數據(該加密為對稱加密,所謂對稱加密,就是將數據和私鑰也就是這個隨機字符串通過某種算法混合在一起,這樣除非知道私鑰,否則無法獲取數據內容);

7)服務器把加密后的數據傳輸給客戶端;

8)客戶端收到數據后,再用自己的私鑰也就是那個隨機字符串解密;

9)客戶機和服務器都知道了對稱密鑰,并用它來加密會話期間的最終用戶。(流程圖如下所示)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

2.1?client訪問url,

一種是?https://www.domain.com/...訪問直接走443端口到server;

另一種是http://www.domain.com/....訪問走80端口到server被nginx的rewrite成https://www.domain.com/...重新走443到server;

server部署了nginx監聽了80和443端口,80的全部重新轉換到443,這一步多了個重定向;

?

二、自己生成 SSL 證書

如果準備給 Nginx 安裝 SSL 證書,默認情況下,SSL 模塊是不被編譯的,需要在編譯 Nginx 時使用 --with-http_ssl_module 參數,而該編譯模塊需要 OpenSSL 庫文件,一般需要安裝 openssl 與 openssl-devel 軟件。

# cd /usr/local/src/nginx-1.12.2

# ./configure --prefix=/usr/local/nginx --with-http_ssl_module

# make

# make install

2.1 生成帶密碼私鑰 key

進入到 nginx.conf 所在的目錄,源碼安裝后,該文件目錄為 /usr/local/nginx/conf,如果是 yum安裝,該文件目錄為 /etc/nginx,進入目錄后,創建 ssl_cert 目錄,在該目錄中生成相應的密鑰,如下:

[root@masternode /]# cd /etc/nginx [root@masternode nginx]# mkdir ssl_cert [root@masternode nginx]# cd ssl_cert [root@masternode ssl_cert]# pwd /etc/nginx/ssl_cert [root@masternode ssl_cert]# openssl genrsa -des3 -out tmp.key 2048 Generating RSA private key, 2048 bit long modulus ..............+++ ............................................................+++ e is 65537 (0x10001) Enter pass phrase for tmp.key: Verifying - Enter pass phrase for tmp.key: [root@masternode ssl_cert]# ls -l total 4 -rw-r--r-- 1 root root 1751 Sep 21 23:45 tmp.key

生成私鑰文件時需要輸入密碼,每次用瀏覽器訪問 HTTPS 都需要輸入密鑰是不現實的,需要轉換私鑰,取消密碼,如下步驟。

2.2 轉換成無密碼私鑰 key

[root@masternode ssl_cert]# openssl rsa -in tmp.key -out moonxy.key Enter pass phrase for tmp.key: writing RSA key [root@masternode ssl_cert]# ls -l total 8 -rw-r--r-- 1 root root 1679 Sep 21 23:46 moonxy.key -rw-r--r-- 1 root root 1751 Sep 21 23:45 tmp.key [root@masternode ssl_cert]# rm -f tmp.key [root@masternode ssl_cert]# ls -l total 4 -rw-r--r-- 1 root root 1679 Sep 21 23:46 moonxy.key

將帶密碼的 tmp.key 刪除,只保留無密碼的 moonxy.key 私鑰。

2.3 生成證書請求文件

[root@masternode ssl_cert]# openssl req -new -key moonxy.key -out moonxy.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:HongKong Locality Name (eg, city) [Default City]:HongKong Organization Name (eg, company) [Default Company Ltd]:moonxy Organizational Unit Name (eg, section) []:Linux Common Name (eg, your name or your server's hostname) []:masternode Email Address []:moonxy@qq.comPlease enter the following 'extra' attributes to be sent with your certificate request A challenge password []:20190922 An optional company name []:amxx [root@masternode ssl_cert]# ls -l total 8 -rw-r--r-- 1 root root 1119 Sep 22 15:55 moonxy.csr -rw-r--r-- 1 root root 1679 Sep 21 23:46 moonxy.key

生成證書請求文件 moonxy.csr 后,我們將拿它和私鑰 moonxy.key 文件一起生成最終的證書文件,也就是公鑰。

2.4 生成公鑰證書文件

[root@masternode ssl_cert]# openssl x509 -req -days 365 -in moonxy.csr -signkey moonxy.key -out moonxy.crt Signature ok subject=/C=CN/ST=HongKong/L=HongKong/O=moonxy/OU=Linux/CN=masternode/emailAddress=moonxy@qq.com Getting Private key [root@masternode ssl_cert]# ls -l total 12 -rw-r--r-- 1 root root 1298 Sep 22 16:02 moonxy.crt -rw-r--r-- 1 root root 1119 Sep 22 15:55 moonxy.csr -rw-r--r-- 1 root root 1679 Sep 21 23:46 moonxy.key

這樣最終生成了 CRT 證書文件 moonxy.crt,也就是上面提到的公鑰。

三、Nginx 配置 SSL

在?/etc/nginx/vhost(如果是編譯安裝,通常為 /usr/local/nginx/conf/vhost)目錄下創建新的配置文件 ssl.conf,并添加如下內容:

[root@masternode vhost]# vim /etc/nginx/vhost/ssl.conf server {listen 443;server_name moonxy.com;index index.html index.php;root /data/www/nginx/moonxy;ssl on;ssl_certificate ssl_cert/moonxy.crt;ssl_certificate_key ssl_cert/moonxy.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; }

然后檢查配置文件語法,創建 index.html 并啟動 nginx 服務,如下:

[root@masternode vhost]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@masternode vhost]# mkdir -p /data/www/nginx/moonxy [root@masternode vhost]# vim /data/www/nginx/moonxy/index.html This is SSL test for moonxy.com [root@masternode vhost]# systemctl start nginx [root@masternode vhost]# ps aux |grep nginx root 8810 0.0 0.2 125008 2144 ? Ss 16:31 0:00 nginx: master process /usr/sbin/nginx nginx 8811 0.0 0.3 125404 3192 ? S 16:31 0:00 nginx: worker process root 8813 0.0 0.0 112708 976 pts/0 R+ 16:31 0:00 grep --color=auto nginx

然后在本地 hosts 文件中配置域名映射:

C:\Windows\System32\drivers\etc 192.168.150.140 www.moonxy.com moonxy.com

使用 Chrome 瀏覽器訪問 https://moonxy.com。

?

四、通過阿里云申請證書

可以通過阿里云申請免費的賽門鐵克(Sysmantec)SSL 證書,注意右側顯示的購置費用為 0.00,如下


?

總結

以上是生活随笔為你收集整理的Nginx 配置 SSL 及 HTTPS 协议通信过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。