nginx https服務(wù)
- http不安全,被中間人盜用,信息泄漏肮蛹,內(nèi)容劫持,篡改创南。
- https 對(duì)傳輸?shù)膬?nèi)容進(jìn)行加密以及身份的驗(yàn)證
加密方式 對(duì)稱加密:
image
非對(duì)稱加密
image
https加密原理
- 發(fā)起ssl連接伦忠,非對(duì)稱加密
- 服務(wù)端將公鑰發(fā)送給客戶端
- 客戶端用公鑰對(duì)對(duì)稱加密的密碼進(jìn)行加密 發(fā)送給服務(wù)端
- 之后客戶端和服務(wù)端進(jìn)行對(duì)稱密鑰傳輸數(shù)據(jù)
“非對(duì)稱加密”的加密算法,特點(diǎn)是私鑰加密后的密文稿辙,只要是公鑰昆码,都可以解密,但是公鑰加密后的密文邻储,只有私鑰可以解密
image
以上的傳送方式對(duì)于 偽裝程中間人(客戶端赋咽,服務(wù)端)的還是可以劫持?jǐn)?shù)據(jù),所以就利用了CA簽名證書
服務(wù)端發(fā)送給客服端的是CA簽名證書,客服端對(duì)數(shù)字證書進(jìn)行CA校驗(yàn),校驗(yàn)成功吨娜,則利用公鑰加密脓匿,校驗(yàn)失敗,則停止回話
Nginx配置https
生成CA證書
//查看是否安裝openssl
openssl version / rpm -qa|grep open
//確認(rèn)nginx是否編譯安裝了 --with-http_ssl_module
nginx -V
//進(jìn)入到nginx.conf目錄
cd /etc/nginx/
//創(chuàng)建目錄并進(jìn)入
mkdir ssl_key
//生成key密鑰
openssl genrsa -idea -out applelife.key 1024
//之后提示輸入密碼,輸入設(shè)置 需要自己記住萌壳,后面會(huì)用到
//生成證書簽名請(qǐng)求文件(csr文件)
openssl req -new -key applelife.key -out applelife.csr
//輸入上面設(shè)置的密碼
//輸入相關(guān)的信息 CN ,chongqing,chongqing,...
//最后的時(shí)候會(huì)要求輸入一個(gè)密碼亦镶,這個(gè)是在修改csr文件需要的日月,在不嚴(yán)格的情況下袱瓮,可以為空
//最后會(huì)有兩個(gè)文件 applelife.key applelife.csr
//基于上面的兩個(gè)文件缤骨,生成證書簽名文件(CA文件)
//days 3650 簽名證書的過期時(shí)間
openssl x509 -req -days 3650 -in applelife.csr -signkey applelife.key -out applelife.crt
//需要輸入 key的密碼
nginx配置
//語法 是否開啟
Syntax: ss|on|off;
Default:ssl off;
Context:http,server
#證書文件
Syntax:ssl_certificate file;
Default:-
Context:http,server
#key文件
Syntax:ssl_certificate_key file;
Default:-
Context:http,server
//示例
server {
...
listen 443;
server_name www.applelife.com;
ssl on;
#證書文件
ssl_certificate /etc/nginx/ssl_key/applelife.crt;
#key文件
ssl_certificate_key /etc/nginx/ssl_key/applelife.key;
#測(cè)試驗(yàn)證key
#ssl_certificate_key /etc/nginx/ssl_key/appleno.key;
...
location / {
...
}
}
其他命令
//停止 需要輸入設(shè)置的key密碼
nginx -s stop -c /etc/nginx/nginx.conf
//啟動(dòng)
nginx -c /etc/nginx/nginx.conf
//檢查語法
nignx -tc /etc/nginx/nginx.cof
//查看端口是否啟用
netstat -luntp |grep 443
注意
//驗(yàn)證的時(shí)候記得輸入 https
配置蘋果要求證書
- 服務(wù)器所有的連接使用TLS1.2以上的版本(openssl1.0.2)
- https證書必須使用SHA256以上的哈希算法簽名
- Https證書必須使用RSA 2048位 或ECC 256以上的公鑰算法
- 使用前向加密技術(shù)
//查看ssl版本
openssl version
//查看證書算法,位數(shù)
openssl x509 -noout -text -in ./applelife.crt
//直接使用key生成 crt證書尺借,在這個(gè)過程中需要輸入相關(guān)的信息即可
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout applelife.key out applelife.crt
//之后修改nginx配置文件即可
//reload 服務(wù)
nginx -s reload -c /etc/nginx/nginx.conf
這種配置方式绊起,在重啟停止nginx不需要輸入key的密碼,因?yàn)樵谏傻臅r(shí)候配置了一個(gè)參數(shù) -keyout 重新生成新的文件
生成沒有保護(hù)碼的key
//生成沒有保護(hù)碼 key 的方式
openssl rsa -in ./applelife.key -out ./applelife_nopass.key
Https優(yōu)化
- 激活keepalive長(zhǎng)連接
- 設(shè)置ssl session緩存
//示例
server {
listen 443;
server_name 192.33.2.1 applelife.com;
#讓長(zhǎng)連接保持更長(zhǎng)
keepalive 100;
ssl on;
#設(shè)置緩存10M 大約可以存儲(chǔ) 8000到10000 個(gè)會(huì)話
ssl_session_cache shared:SSL:10m;
#配置10分鐘 session過期
ssl_session_timeout 10m;
#證書文件
ssl_certificate /etc/nginx/ssl_key/applelife.crt;
#key文件
ssl_certificate_key /etc/nginx/ssl_key/applelife.key;
}