基于Nginx實(shí)現(xiàn)HTTPS網(wǎng)站設(shè)置的步驟
:
首先在這里簡單說一下為什么現(xiàn)在都在使用 HTTPS 協(xié)議:
其實(shí)使用 HTTPS 協(xié)議最大的原因就是因?yàn)?HTTP 協(xié)議不安全,因?yàn)?HTTP 數(shù)據(jù)傳輸時是:明文傳輸數(shù)據(jù) 也就是說當(dāng)客戶端在輸入用戶名和密碼時,都會顯示出來。而 HTTPS 協(xié)議的話則是 密文傳輸數(shù)據(jù) 就是在傳輸數(shù)據(jù)時會進(jìn)行加密。
HTTPS 解決數(shù)據(jù)傳輸安全問題的方案:就是使用加密算法,具體來說就是混合加密算法,也就是對稱加密算法和非對稱加密算法的混合使用。
加密算法:
- 對稱加密:加密和解密都是使用同一密鑰;常見的對稱加密算法有 DES、3DES 和 AES 等。
- 非對稱加密:加密和解密需要使用兩個不同的密鑰,公鑰和私鑰。常用的非對稱加密算法是 RSA 算法。
一、HTTPS 簡介
HTTPS 其實(shí)是有兩部分組成:HTTP + SSL/TLS,也就是在 HTTP 上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳遞都會通過 TLS 進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。
HTTPS 協(xié)議原理:
- 客戶端通過 HTTPS 協(xié)議訪問服務(wù)端的 443 端口;
- 服務(wù)端會向客戶端進(jìn)行回應(yīng),并且發(fā)送證書,也就是公鑰;
- 客戶端在收到證書后,會向 CA 請求判斷證書是否有效,如果無效,客戶端就會提示警告信息,提示此證書不安全;
- 證書有效的話,客戶端就會生成一個隨機(jī)值;
- 客戶端會用服務(wù)端發(fā)送來的證書向隨機(jī)值進(jìn)行加密然后發(fā)送給服務(wù)端;
- 服務(wù)端收到后,會使用本地的私鑰解開,從而獲得客戶端的隨機(jī)值。在服務(wù)端發(fā)送數(shù)據(jù)時,會使用隨機(jī)值對發(fā)送的數(shù)據(jù)進(jìn)行加密也就是再生成一個相當(dāng)于是公鑰,而隨機(jī)值就是私鑰;
- 服務(wù)端向客戶端發(fā)送被加密的數(shù)據(jù);
- 客戶端收到數(shù)據(jù)后會使用隨機(jī)值進(jìn)行解密,從而成功傳輸數(shù)據(jù)。
二、Nginx 實(shí)現(xiàn) HTTPS 網(wǎng)站設(shè)置
1.安裝 Nginx
[root@Nginx ~]# yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl [root@Nginx ~]# wget http://www.nginx.org/download/nginx-1.18.0.tar.gz [root@Nginx ~]# ls anaconda-ks.cfg nginx-1.18.0.tar.gz [root@Nginx ~]# tar zxf nginx-1.18.0.tar.gz -C /usr/src/ [root@Nginx ~]# cd /usr/src/nginx-1.18.0/ [root@Nginx nginx-1.18.0]# useradd -M -s /sbin/nologin nginx [root@Nginx nginx-1.18.0]# ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-file-aio \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_flv_module \ --with-http_ssl_module \ --with-pcre && make && make install [root@Nginx nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ [root@Nginx nginx-1.18.0]# cd [root@Nginx ~]# nginx [root@Nginx ~]# netstat -anpt | grep 80
2.創(chuàng)建服務(wù)器證書密鑰文件
[root@Nginx ~]# openssl genrsa -des3 -out server.key 1024 ... Enter pass phrase for server.key: # 輸入密碼 Verifying - Enter pass phrase for server.key: # 確認(rèn)密碼
3.創(chuàng)建服務(wù)器證書的申請文件
[root@Nginx ~]# openssl req -new -key server.key -out server.csr Enter pass phrase for server.key: # 輸入前面創(chuàng)建的密碼 ... Country Name (2 letter code) [XX]:CN # 國家代號. 中國輸入 CN State or Province Name (full name) []:BeiJing # 省的全名. 拼音 Locality Name (eg, city) [Default City]:BeiJing # 市的全名. 拼音 Organization Name (eg, company) [Default Company Ltd]:Coco # 公司英文名 Organizational Unit Name (eg, section) []: # 可以不輸入 Common Name (eg, your name or your server's hostname) []:www.Coco.com # 域名 Email Address []:ChenZhuang1217@163.com # 電子郵箱. 可隨意填 ... A challenge password []: # 可以不輸入 An optional company name []: # 可以不輸入
備份一份服務(wù)器密鑰文件
[root@Nginx ~]# cp server.key server.key.org
去除文件口令
[root@Nginx ~]# openssl rsa -in server.key.org -out server.key Enter pass phrase for server.key.org: # 輸入密碼
4.生成證書文件
[root@Nginx ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt Signature ok subject=/C=CN/ST=BeiJing/L=BeiJing/O=Coco/CN=www.Coco.com/emailAddress=ChenZhuang1217@163.com Getting Private key
5.修改 Nginx 主配置文件
[root@Nginx ~]# mkdir -p /usr/local/nginx/conf/ssl [root@Nginx ~]# cp server.crt server.key /usr/local/nginx/conf/ssl/ [root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 443; # 監(jiān)聽端口 ssl on; # 開啟 SSL ssl_certificate ssl/server.crt; # PS:我這里是相對路徑. 你們可以使用絕對路徑 ssl_certificate_key ssl/server.key; # 系統(tǒng)會在 /usr/local/nginx/conf/ 目錄中尋找 server_name www.Coco.com; # 證書對應(yīng)的域名 ... } [root@Nginx ~]# nginx -s reload # 重啟 Nginx 服務(wù)
nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl"
:因?yàn)榘姹靖哂?1.15
不過可以正常啟動。
驗(yàn)證:訪問剛才設(shè)置的域名 https://www.Coco.com/
實(shí)現(xiàn)客戶端訪問 http
往 https
跳轉(zhuǎn):
這里說一下為什么要往配置文件里面再添加一個
server
,因?yàn)?http
協(xié)議使用的是 80 端口,而https
協(xié)議使用的則是 443 端口
那么如果想要實(shí)現(xiàn)
http
跳轉(zhuǎn)到https
,則需要配置兩個虛擬主機(jī)(基于不同端口),然后使用rewrite
來進(jìn)行跳轉(zhuǎn)。
錯誤配置:
在同一個 server
中開啟多個端口,邏輯上來說其實(shí)并沒有什么問題,但是當(dāng)配置 rewrite
時,那么問題就出現(xiàn)了。
問題:當(dāng)客戶端訪問 http
是會進(jìn)行跳轉(zhuǎn),但是訪問 https
也會跳轉(zhuǎn),這就導(dǎo)致了重定向次數(shù)過多。
server { listen 80; listen 443; server_name www.Coco.com; root html; index index.html index.htm; rewrite ^(.*)$ https://$host$1 permanent; }
正確配置:
將 80 端口和 443 端口區(qū)分開,簡單來說就是配置基于不同端口的虛擬主機(jī)。
這樣即可實(shí)現(xiàn)訪問 80 端口進(jìn)行跳轉(zhuǎn),而訪問 443 端口,則直接進(jìn)行訪問。
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.Coco.com; rewrite ^(.*)$ https://$host$1 permanent; ... } server { listen 443; ssl on; ssl_certificate ssl/server.crt; ssl_certificate_key ssl/server.key; server_name www.Coco.com; ... } [root@localhost ~]# nginx -s reload
驗(yàn)證:訪問 http://www.Coco.com
到此這篇關(guān)于基于Nginx實(shí)現(xiàn)HTTPS網(wǎng)站設(shè)置的步驟的文章就介紹到這了,更多相關(guān)Nginx HTTPS網(wǎng)站設(shè)置內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。