欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx HTTPS實(shí)現(xiàn)原理及配置實(shí)踐

 更新時(shí)間:2023年09月14日 11:49:28   作者:Jiangxl~  
本文主要介紹了Nginx HTTPS實(shí)現(xiàn)原理及配置實(shí)踐,詳細(xì)的介紹了HTTPS原理,實(shí)現(xiàn)及其HTTPS單臺(tái)配置實(shí)踐,集群配置、優(yōu)化等,具有一定的參考價(jià)值,感興趣的可以了解一下

1.HTTPS基本概述

1.1.為何需要HTTPS

因?yàn)镠TTP采用的是明文傳輸數(shù)據(jù),那么在傳輸(賬號密碼、交易信息等敏感數(shù)據(jù))時(shí)不安全。容易遭到篡改
如果使用HTTPS協(xié)議,數(shù)據(jù)在傳輸過程中是加密的,能夠有效避免網(wǎng)站傳輸時(shí)信息泄露

1.2.什么是HTTPS

HTTPS安全的超文本傳輸協(xié)議,我們現(xiàn)在大部分站點(diǎn)都是通過HTTPS來實(shí)現(xiàn)站點(diǎn)數(shù)據(jù)安全。
早期網(wǎng)景公司設(shè)計(jì)了SSL(Secure Socket Layer)安全套接層協(xié)議,主要對HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密。那如何將站點(diǎn)變成安全的HTTPS站點(diǎn)呢?我們需要了解SSL(Secure Socket Layer)協(xié)議。
而現(xiàn)在很多時(shí)候我們使用的是TLS(Transport Layer Security)傳輸層安全協(xié)議來實(shí)現(xiàn)的加密與解密

1.3.TLS如何實(shí)現(xiàn)加密

TLS/SSL是如何實(shí)現(xiàn)HTTP明文消息被加密的,TLS/SSL工作在OSI七層模型中,應(yīng)用層與傳輸層之間。
1.提供數(shù)據(jù)安全:保證數(shù)據(jù)不會(huì)被泄露
2.提供數(shù)據(jù)的完整性:保證數(shù)據(jù)在傳輸過程中不會(huì)被篡改
3.對應(yīng)用層交給傳輸層的數(shù)據(jù)進(jìn)行加密與解密。

在這里插入圖片描述

2.HTTPS實(shí)現(xiàn)原理

2.1.加密模型-對稱加密

對稱加密:兩個(gè)想通訊的人持有相同的秘鑰,進(jìn)行加密與解密。如下:

  • bob將原始文檔通過秘鑰加密生成一個(gè)密文文檔。
  • alice拿到這個(gè)密文文檔以后,它可以用這把秘鑰還原為原始的明文文檔。

對稱加密究竟是如何實(shí)現(xiàn)的,我們可以以RC4這樣一個(gè)對稱加密序列算法來看一下。

  • 加密:秘鑰序列+明文=密文
  • 解密:秘鑰序列+密文=明文

在這里插入圖片描述

2.2.加密模型-非對稱加密

非對稱加密:它根據(jù)一個(gè)數(shù)學(xué)原理,創(chuàng)建一對秘鑰(公鑰和私鑰)公鑰加密,私鑰解密;

  • 私鑰:私鑰自己使用,不對外開放。
  • 公鑰:公鑰給大家使用,對外開放。

比如:alice有一對公鑰和私鑰,他可以將公鑰發(fā)布給任何人。假設(shè)Bob是其中一個(gè),當(dāng)Bob要傳遞一份加密文檔給alice,那么Bob就可以用alice的公鑰進(jìn)行加密,alice收到加密文檔后通過自己的私鑰進(jìn)行解密,獲取原始文檔。

注意:alice必須知道Bob就是Bob,也就是它收到的信息必須是Bob發(fā)來的,那么這個(gè)信任問題,在多方通訊的過程中,必須有一個(gè)公信機(jī)構(gòu)來驗(yàn)收雙方的身份,那么這個(gè)機(jī)構(gòu)就是CA機(jī)構(gòu)。

在這里插入圖片描述

2.3.身份驗(yàn)證機(jī)構(gòu)-CA

通訊雙方是如何驗(yàn)證雙方的身份?
CA架構(gòu)是可信任組織架構(gòu),主要用來頒發(fā)證書及驗(yàn)證證書。那CA機(jī)構(gòu)又是如何申請和頒發(fā)證書的呢?

我們首先需要申請證書,需要進(jìn)行登記,登記我是誰,我是什么組織,我想做什么,到了登記機(jī)構(gòu)在通過CSR發(fā)給CA,CA中心通過后,CA中心會(huì)生成一對公鑰和私鑰,那么公鑰會(huì)在CA證書鏈中保存,公鑰和私鑰證書訂閱人拿到后,會(huì)將其部署的WEB服務(wù)器上。
1.當(dāng)瀏覽器訪問我們的https站點(diǎn)時(shí),它會(huì)去請求我們的證書
2.Nginx會(huì)將我們的公鑰證書回傳給瀏覽器
3.瀏覽器會(huì)去驗(yàn)證我們的證書是否是合法的、是否是有效的
4.CA機(jī)構(gòu)會(huì)將過期的證書放置在CRL服務(wù)器,那么CRL服務(wù)的驗(yàn)證效率是非常差的,所以CA又推出了OCSP響應(yīng)程序性能還不是很高。
5.Nginx會(huì)有一個(gè)OCSP的開頭,當(dāng)我們開啟后,Nginx會(huì)主動(dòng)上OCSP上查詢,這樣大量的客戶端直接從Nginx獲取,證書是否有效。

2.4.HTTPS通訊原理

HTTPS加密過程,HTTPS采用混合加密算法,即對稱加密、和非對稱加密
通信前準(zhǔn)備工作:申請域名對應(yīng)的證書,并將其部署在Nginx服務(wù)器中。
1)第一步客戶端向服務(wù)端發(fā)送Client Hello消息,這個(gè)消息里包含了一個(gè)客戶端生成的隨機(jī)數(shù)Random1、客戶端支持的加密套件和客戶端支持TLS協(xié)議版本等信息
2)服務(wù)端會(huì)向客戶端發(fā)送Server Hello消息,返回自己的公鑰證書,挑選一個(gè)合適的加密套件、另外還會(huì)生成一份隨機(jī)數(shù)Random2推送給客戶端。至此客戶端和服務(wù)端都擁有了兩個(gè)隨機(jī)數(shù)(Random1+Random2)
3)客戶端收到服務(wù)端傳來的公鑰證書后,先從CA驗(yàn)證該證書的合法性(CA公鑰去解密公鑰證書),驗(yàn)證通過后取出證書中的服務(wù)端公鑰,再生成一個(gè)隨機(jī)數(shù)Random3,再用服務(wù)端公鑰非對稱加密Random3.
4)服務(wù)端用自己的私鑰解出客戶端生成的Random3。至此,客戶端和服務(wù)端都擁有Random1+Random2+Random3,兩邊根據(jù)同樣的算法生成一份秘鑰,握手結(jié)束后的應(yīng)用層數(shù)據(jù)都是使用這個(gè)秘鑰進(jìn)行對稱加密。

3.HTTPS擴(kuò)展知識(shí)

3.1.HTTPS證書類型

在這里插入圖片描述

3.2.HTTPS購買建議

保護(hù)1個(gè)域名 www.wzx.net
保護(hù)5個(gè)域名 www images cdn test m
通配符域名 *.wzx.net

3.3.HTTPS顏色標(biāo)識(shí)

Https不支持續(xù)費(fèi),證書到期需要重新申請新并進(jìn)行替換。
Https不支持三級域名解析,如test.m.wzx.net *.m.wzx.net
Https顯示綠色,說明整個(gè)網(wǎng)站的url都是https的,并且都是安全的
Https顯示黃色,說明網(wǎng)站代碼中有部分URL地址是Http不安全協(xié)議的
Https顯示紅色,要么證書是假的,要么證書已經(jīng)過期

4.HTTPS單臺(tái)配置實(shí)踐

4.1.配置SSL語法

#官方示例
worker_processes auto;
http {
    ...
    server {
            listen            443 ssl;
            keepalive_timeout 70;
            ssl_protocols     TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers       AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
            ssl_certificate   /usr/local/nginx/conf/cert.pem;
            ssl_certificate_key /usr/local/nginx/conf/cert.key;
            ssl_session_cache shared:SSL:10m;
            ssl_session_timeout  10m;
            ...
    } 
}

4.2.創(chuàng)建SSL證書

1.創(chuàng)建證書存儲(chǔ)目錄

[root@nginx1 ~]# mkdir -p /etc/nginx/ssl_key
[root@nginx1 ~]# cd /etc/nginx/ssl_key/

2.使用openssl命令充當(dāng)CA權(quán)威機(jī)構(gòu)創(chuàng)建證書(類似黑戶)

[root@nginx1 /etc/nginx/ssl_key]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
.................................................................................................................................................................................................+++
.........................+++
e is 65537 (0x10001)
#記住配置密碼,我這里是123456
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

3.生成自簽證書,同時(shí)去掉私鑰的密碼

[root@nginx1 /etc/nginx/ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
..............................................+++
.............+++
writing new private key to 'server.key'
-----
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) []:WH
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:hhhh
Organizational Unit Name (eg, section) []:hhhh
Common Name (eg, your name or your server's hostname) []:s.wzx.net
Email Address []:wzx@qq.com
#req  --->用于創(chuàng)建新的證書
#new  --->表示創(chuàng)建的是新證書
#x509 --->表示定義證書的格式為標(biāo)準(zhǔn)格式
#key  --->表示調(diào)用的私鑰文件信息
#out  --->表示輸出證書文件信息
#days --->表示證書的有效期
[root@nginx1 /etc/nginx/ssl_key]# ls
server.crt  server.key

4.3.配置SSL場景

[root@nginx1 /etc/nginx/conf.d]# vim s.wzx.net.conf
server {
        listen 443 ssl;
        server_name s.wzx.net;
        ssl on;
        ssl_certificate /etc/nginx/ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
        location / {
                root /code4;
                index index.html;
        }
}

準(zhǔn)備對應(yīng)的站點(diǎn)目錄,并重啟Nginx服務(wù)
[root@nginx1 /etc/nginx/conf.d]# mkdir /code4
[root@nginx1 /etc/nginx/conf.d]# echo "https...." >/code4/index.html
[root@nginx1 /etc/nginx/conf.d]# systemctl restart nginx

4.4.訪問驗(yàn)證SSL

瀏覽器輸入https://s.wzx.net訪問,由于該證書非第三方權(quán)威機(jī)構(gòu)頒發(fā),而是我們自己簽發(fā)的,所以瀏覽器會(huì)警告

在這里插入圖片描述

4.5.強(qiáng)制跳轉(zhuǎn)Https

如果用戶忘記在瀏覽器地址欄輸入https://協(xié)議那么將不會(huì)跳轉(zhuǎn)至https站點(diǎn);
所以建議新增如下配置,將用戶訪問http請求強(qiáng)制跳轉(zhuǎn)https

[root@nginx1 /etc/nginx/conf.d]# vim s.wzx.net.conf
server {
        listen 443 ssl;
        server_name s.wzx.net;
        ssl on;
        ssl_certificate /etc/nginx/ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
        location / {
                root /code4;
                index index.html;
        }
}
server {
        listen 80;
        server_name s.wzx.net;
        return 302 https://$server_name$request_uri;
}
[root@nginx1 /etc/nginx/conf.d]# systemctl restart nginx

5.HTTPS集群配置實(shí)踐

5.1.環(huán)境準(zhǔn)備

主機(jī)名IP主機(jī)名
db-nfs192.168.146.176nginx-proxy
nginx2192.168.146.175nginx-web01
nginx1192.168.146.101nginx-web02

5.2.配置應(yīng)用節(jié)點(diǎn)

#配置所有后端節(jié)點(diǎn),監(jiān)控80端口即可;

[root@nginx1 /etc/nginx/conf.d]# vim s.wzx.net.conf
server {
        listen 80;
        server_name s.wzx.net;
        root /code/wordpress;
        location / {
                index index.html;
        }
}
root@nginx1 /etc/nginx/conf.d]# systemctl restart nginx

5.3.配置負(fù)載均衡

1.創(chuàng)建ssl證書

[root@db-nfs ~]# mkdir /etc/nginx/ssl_key -p
[root@db-nfs ~]# cd /etc/nginx/ssl_key/
[root@db-nfs /etc/nginx/ssl_key]# openssl genrsa -idea -out server.key 2048
[root@db-nfs /etc/nginx/ssl_key]# openssl req -days 36500 -x509 -sha256 \
> -nodes -newkey rsa:2048 -keyout server.key -out server.crt

2.nginx負(fù)載均衡配置文件如下

[root@db-nfs /etc/nginx/ssl_key]# vim /etc/nginx/conf.d/proxy.conf
upstream site {
        server 192.168.146.101:80 max_fails=2 fail_timeout=10s;
        server 192.168.146.175:80 max_fails=2 fail_timeout=10s;
}
server {
        listen 443;
        server_name s.oldxu.net;
        ssl on;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate ssl_key/server.key;
        location / {
                proxy_pass http://site;
                include proxy_params;
        }
}
server {
        listen 80;
        server_name s.oldxu.net;
        return 302 https://$server_name$request_uri;
}

6.HTTPS場景配置實(shí)踐

6.1.場景實(shí)踐-1

模擬銀行網(wǎng)站場景
1.用戶訪問網(wǎng)站主站,使用http協(xié)議提供訪問。
2.當(dāng)用戶點(diǎn)擊登陸時(shí),則網(wǎng)站會(huì)跳轉(zhuǎn)至一個(gè)新的域名,并使用的是https提供安全訪問。
1.主頁展示 http://yh.wzx.net(提供網(wǎng)頁瀏覽)
2.模擬登錄 http://yh.wzx.net/login (相當(dāng)于點(diǎn)擊了登錄的按鈕)
3.登錄頁面 http://star.oldxu.net (提供安全登錄)

1.配置http://star.wzx.net

[root@nginx1 ~]# vim /etc/nginx/conf.d/star.wzx.net.conf
server {
        listen 443 ssl;
        server_name star.wzx.net;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
        root /code/login;
        location / {
                index index.html;
        }
}
[root@nginx1 ~]# mkdir /code/login
[root@nginx1 /code/login]# echo "login......." > index.html
[root@nginx1 /code/login]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx1 /code/login]# systemctl restart nginx

2.配置http://yh.wzx.net(主頁頁面)

[root@nginx2 ~]# vim /etc/nginx/conf.d/yh.wzx.net.conf
server {
        listen 80;
        server_name yh.wzx.net;
        root /code;
        location / {
                index index.html;
        }
        location /login {
                return 302 https://star.wzx.net;
        }
}
[root@nginx2 ~]# mkdir /code
[root@nginx2 ~]# echo "yh" >/code/index.html
[root@nginx2 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx2 ~]# systemctl restart nginx

6.2.場景實(shí)踐-2

需求:希望用戶訪問網(wǎng)站的所有url走h(yuǎn)ttps協(xié)議,但訪問s.wzx.net/abc時(shí)走h(yuǎn)ttp協(xié)議

[root@db-nfs /etc/nginx/conf.d]# cat proxy_agent.wzx.net.conf
upstream webs {
        server 192.168.146.101:80;
        server 192.168.146.175:80;
}
server {
        listen 443 ssl;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate ssl_key/server.key;
        server_name agent.wzx.net;
        location / {
                proxy_pass http://webs;
                include proxy_params;
        }
}
server {
        listen 80;
        server_name agent.wzx.net;
        if ($request_uri !~* "^/abc") {
                return 302 https://$http_host$request_uri;
        }
        location / {
                proxy_pass http://webs;
                include proxy_params;
        }
}

7.HTTPS優(yōu)化配置實(shí)踐

7.1.優(yōu)化基本概述

SSL的運(yùn)行計(jì)算需要消耗額外的CPU資源,SSL通訊過程中【握手】階段的運(yùn)算最占用CPU資源,有如下幾個(gè)方面可以進(jìn)行調(diào)整與優(yōu)化。
1.設(shè)置worker進(jìn)程數(shù)設(shè)置為等于CPU處理器的核心數(shù)。worker_processes auto
2.啟用keepalive長連接,一個(gè)連接發(fā)送更多個(gè)請求
3.啟動(dòng)shared回話緩存,所有worker工作進(jìn)程之間共享的緩存,避免進(jìn)行多次SSL【握手】
4.禁用builtin內(nèi)置于的緩存,僅能供一個(gè)worker工作進(jìn)程使用,使用shared緩存即禁止builtin

7.2.優(yōu)化配置實(shí)例

worker_processes auto;
http {
    ...
    server {
        listen 443 ssl;
        server_name www.example.com;
        ssl_certificate www.example.com.crt;
        ssl_certificate_key www.example.com.key;
        ssl_protocols TLSv1.2;
        ssl_prefer_server_ciphers on;
        #Nginx決定使用哪些協(xié)議與瀏覽器進(jìn)行通訊
        keepalived_timeout 70;
        #設(shè)置長連接
        #默認(rèn)不開啟session_cache: a握手后,關(guān)閉瀏覽器,再次訪問,需要重新握手;
        #建立握手后如果連接斷開,在session_timeout時(shí)間內(nèi)再次連接,無需再次建立握手,可直接復(fù)用之間緩存的連接
        ssl_session_cache shared:SSL:10m;
        #1M緩存空間能存儲(chǔ)4000個(gè)會(huì)話數(shù)量;
        ssl_session_timeout 1440m;
        #配置會(huì)話超時(shí)時(shí)間(默認(rèn)5分鐘)
    }
}

 到此這篇關(guān)于Nginx HTTPS實(shí)現(xiàn)原理及配置實(shí)踐的文章就介紹到這了,更多相關(guān)Nginx HTTPS實(shí)現(xiàn)及配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你使用Nginx限制百度蜘蛛頻繁抓取的問題

    教你使用Nginx限制百度蜘蛛頻繁抓取的問題

    這篇文章主要介紹了使用Nginx限制百度蜘蛛頻繁抓取的問題,百度蜘蛛對網(wǎng)站的抓取頻率高和抓取量驟增導(dǎo)致服務(wù)器負(fù)載高,經(jīng)常收到警告信息,每分鐘允許百度蜘蛛抓取200次,超過頻率限制的返回503,對Nginx限制蜘蛛頻繁抓取相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-01-01
  • Nginx的配置文件結(jié)構(gòu)和各種配置指令

    Nginx的配置文件結(jié)構(gòu)和各種配置指令

    Nginx是一款高性能的Web服務(wù)器和反向代理服務(wù)器,常常被用作Web服務(wù)器、負(fù)載均衡器、反向代理和緩存服務(wù)器等,本文將詳細(xì)介紹Nginx的配置文件結(jié)構(gòu)和各種配置指令,幫助你理解和正確配置Nginx?服務(wù)器
    2024-03-03
  • Nginx基于漏桶算法配置限流詳解

    Nginx基于漏桶算法配置限流詳解

    這篇文章主要為大家介紹了Nginx基于漏桶算法配置限流詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Nginx服務(wù)器的安裝與一些基本配置總結(jié)

    Nginx服務(wù)器的安裝與一些基本配置總結(jié)

    這篇文章主要介紹了Nginx服務(wù)器的安裝與一些基本配置總結(jié),包括靜態(tài)化與負(fù)載均衡等重要設(shè)置的方法記錄,需要的朋友可以參考下
    2015-11-11
  • nginx反向代理后無限重定向的問題解決方法

    nginx反向代理后無限重定向的問題解決方法

    這篇文章主要為大家介紹了nginx反向代理后無限重定向的問題解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Jenkins實(shí)現(xiàn)集群化管理以及流水線項(xiàng)目配置

    Jenkins實(shí)現(xiàn)集群化管理以及流水線項(xiàng)目配置

    這篇文章主要為大家介紹了Jenkins基本概念,配置實(shí)現(xiàn)集群化管理以及配置流水線項(xiàng)目的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • nginx前綴匹配的實(shí)現(xiàn)

    nginx前綴匹配的實(shí)現(xiàn)

    在nginx的配置文件中,很容易的看到location的模塊,本文主要介紹了nginx前綴匹配的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Nginx如何設(shè)置域名轉(zhuǎn)發(fā)到服務(wù)器指定的端口

    Nginx如何設(shè)置域名轉(zhuǎn)發(fā)到服務(wù)器指定的端口

    這篇文章主要介紹了Nginx如何設(shè)置域名轉(zhuǎn)發(fā)到服務(wù)器指定的端口,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Windows環(huán)境實(shí)現(xiàn)Nginx配置及開機(jī)自啟動(dòng)

    Windows環(huán)境實(shí)現(xiàn)Nginx配置及開機(jī)自啟動(dòng)

    本文主要介紹了Windows環(huán)境實(shí)現(xiàn)Nginx配置及開機(jī)自啟動(dòng),通過兩種方式可以實(shí)現(xiàn)nginx的開機(jī)自啟動(dòng),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • nginx 多個(gè)location轉(zhuǎn)發(fā)任意請求或訪問靜態(tài)資源文件的實(shí)現(xiàn)

    nginx 多個(gè)location轉(zhuǎn)發(fā)任意請求或訪問靜態(tài)資源文件的實(shí)現(xiàn)

    這篇文章主要介紹了nginx 多個(gè)location轉(zhuǎn)發(fā)任意請求或訪問靜態(tài)資源文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論