1 證書
之前我們使用的是自簽名的SSL證書,對于瀏覽器來說是無效的。使用權威機構頒發(fā)的SSL證書瀏覽器才會認為是有效的,這里給大家推薦兩種申請免費SSL證書的方法,一種是從阿里云申請,https://common-buy.aliyun.com/?spm=5176.2020520163.0.0.e8f856a74ReRXh&commodityCode=cas 鏈接地址
另一種是從FreeSSL申請。
使用acme.sh自動申請證書
acme.sh腳本實現(xiàn)了acme協(xié)議, 可以從letsencrypt生成免費的證書。一般我們申請的證書有效期都是1年,過期就要重新申請了,使用acme.sh腳本可以實現(xiàn)到期自動申請,再也不用擔心證書過期了!
騰訊云申請
2 nginx配置
server {
listen 80;
server_name www.domain.com ;
rewrite ^(.*)$ https://$server_name$1 permanent;
#rewrite ^(.*)$ https://$host$1;
# return 301 $scheme://$server_name$request_uri;
#rewrite ^(.*)$ https://www.xxx.com$1;
}
server {
listen 443 ssl http2;
server_name www.domain.com;
ssl_certificate /usr/local/key/1_www.domain.com_bundle.crt;
ssl_certificate_key /usr/local/key/2_www.domain.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
注意
Nginx 1.15.0以上版本請使用listen 443 ssl代替listen 443和ssl on
–with-http_ssl_module
3 參數(shù)
SSL常用命令
1)ssl
該指令用來指定服務器開啟HTTPS,可以使用 listen 443 ssl,后面這種方式更通用些
配置格式:
server{
listen 443 ssl;
}
2)ssl_certificate
為當前這個虛擬主機指定一個帶有PEM格式證書的證書
3) ssl_certificate_key
該指令用來指定PEM secret key文件的路徑
4) ssl_session_cache
該指令用來配置用于SSL會話的緩存
5) off
禁用會話緩存,客戶端不得重復使用會話
6) none
禁止使用會話緩存,客戶端可以重復使用,但是并沒有在緩存中存儲會話參數(shù)
7) builtin
內(nèi)置OpenSSL緩存,僅在一個工作進程中使用
8)shared
所有工作進程之間共享緩存,緩存的相關信息用name和size來指定
9)ssl_session_timeout
開啟SSL會話功能后,設置客戶端能夠反復使用儲存在緩存中的會話參數(shù)時間
- ssl_ciphers
指出允許的密碼,密碼指定為OpenSSL支持的格式(可以使用openssl ciphers查看openssl支持的格式)
ssl_prefer_server_ciphers
該指令指定是否服務器密碼優(yōu)先客戶端密碼
4 自定義證書
mkdir /root/cert
cd /root/cert
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
5 nginx配置參數(shù)詳解
server{
listen 443 ssl;
server_name ab.text.com ; #指定域名(也可以是ip)多個域名用空格隔開
ssl_certificate /opt/app/nginx/conf/cert/ngxdefault.crt; #添加server.pem訪問路勁(第一個證書文件路勁)
ssl_certificate_key /opt/app/nginx/conf/cert/ngxdefault.key; #添加server.key訪問路勁(第二個證書文件訪問路勁)
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; #是一種加密算法
ssl_protocols TLSv1.1 TLSv1.2; #啟用指定協(xié)議(使用哪種加密協(xié)議支持ssl版本)
ssl_prefer_server_ciphers on; #指定在使用SSLv3和TLS協(xié)議時,服務器密碼應優(yōu)先于客戶端密碼。)
ssl_session_cache shared:SSL:10m; #1m大約可以存儲4000個TLS握手,當某個https連接在規(guī)定時間重連時,可以通過session_cahce重用TLS秘鑰,也就是client只要發(fā)起一次http請求就可以再次進行連接。根據(jù)TLS通訊過程,如果你的https開啟了session_cache,在第二步,server獲取到client請求就會去讀取session_cache文件,如果存在client的key就直接復用,進行數(shù)據(jù)傳輸。
設置存儲會話參數(shù)的高速緩存的類型和大小。緩存可以是以下任何一種類型:
off
嚴禁使用會話緩存:nginx明確告訴客戶端會話可能不會被重用。
none
會話緩存的使用被輕輕地禁止:nginx告訴客戶端會話可能被重用,但實際上不會將會話參數(shù)存儲在緩存中。
builtin
建立在OpenSSL中的緩存; 僅由一個工作進程使用。緩存大小在會話中指定。如果沒有給出大小,則等于20480個會話。內(nèi)置緩存的使用可能導致內(nèi)存碎片。
shared
所有工作進程之間共享的緩存。緩存大小以字節(jié)為單位指定; 一兆字節(jié)可以存儲大約4000個會話。每個共享緩存都應該有一個任意的名字。具有相同名稱的緩存可以在多個虛擬服務器中使用。
兩種緩存類型都可以同時使用,例如:
ssl_session_cache builtin:1000 shared:SSL:10m;
注意:但只使用沒有內(nèi)置緩存的共享緩存應該更有效率。
ssi on; #服務器嵌套,主要是實現(xiàn)網(wǎng)站的內(nèi)容更新,時間和日期的動態(tài)顯示,以及執(zhí)行shell和CGI腳本程序等復雜的功能。
ssi_silent_errors on; #默認是off,開啟后在處理SSI文件出錯時不輸出錯誤提示:”[an error occurred while processing the directive] ”
#ssi_types #默認是支持ssi_types text/html 如果需要shtml支持,則需要設置:ssi_types text/shtml
#適用于http,server,location等模塊
}
6 https工作流程
7 https協(xié)議
HTTP協(xié)議是由HTTP協(xié)議和SSL/TLS協(xié)議共同組建提供加密傳輸及身份驗證的網(wǎng)絡協(xié)議,信息傳輸是通過HTTP協(xié)議來完成,身份加密及驗證是通過TLS協(xié)議來完成,其中對稱加密及非對稱加密都是屬于TLS協(xié)議的算法。
目前主流TLS協(xié)議版本是TLS1.2,主推版本是TLS1.3,反正是TLS1.1,TLS1.2,TLS1.3共存。
TLS 1.3 是時隔九年對 TLS 1.2 等之前版本的新升級,也是迄今為止改動最大的一次。針對目前已知的安全威脅,IETF 正在制定 TLS 1.3 的新標準,使其有望成為有史以來最安全,但也最復雜的 TLS 協(xié)議。
簡單來說TLS1.3無論在安全加密,數(shù)據(jù)傳輸方面完虐TLS1.2,不過現(xiàn)在還處于草案階段,雖然被很多瀏覽器支持,但是不建議部署在生產(chǎn)服務上。
TLS的通訊過程
8 實現(xiàn)https的算法種類
什么是對稱加密?
client 通過算法F根據(jù)秘鑰A對數(shù)據(jù)進行加密,那么server端就可以通過算法F根據(jù)秘鑰A對數(shù)據(jù)進行解密,整個加密解密過程都是使用一個私鑰,所以被稱為對稱加密。
根據(jù)算法規(guī)則,client跟server都是使用通過一個秘鑰進行解密加密,如果秘鑰被截取很容易造成數(shù)據(jù)泄露。
同時如果服務端每次都針對不同的客戶端存儲一個私聊,當客戶端數(shù)量龐大時,光服務器的存儲的私鑰都能造成server成本劇增。
什么是非對稱加密?
client向server請求公鑰,對數(shù)據(jù)進行加密,在將加密的數(shù)據(jù)發(fā)送給server,然后server通過秘鑰進行解密,得到原始數(shù)據(jù),但是是加密是通過公鑰,解密是通過私鑰,整個加密解密過程,秘鑰是不同的,熟稱非對稱加密。
在整個非對稱加密過程中,公鑰及私鑰都是server端的,基本保證數(shù)據(jù)由client傳輸?shù)絪erver是安全的,但是由server發(fā)向client的數(shù)據(jù)就不能使用公鑰進行加密,所以這部分數(shù)據(jù)傳輸是不安全的。
從對稱加密及非對稱加密的原理來看,單獨的其中一個都沒法滿足要求,那么就結合2者的優(yōu)勢。
9 https簡易工作流程
總的思路:利用非對稱加密的方式,使celient與server協(xié)商一個臨時key,然后通過對稱加密的方式將協(xié)商的key進行數(shù)據(jù)傳輸。
1.client利用非對稱加密的方式向server端獲取公鑰,并且server端會返回它公鑰 #此時 server 存在一個公鑰及私鑰 client 存在 公鑰
2.client隨機將數(shù)據(jù)A通過公鑰進行加密為D1發(fā)給sever端
3.server端通過私鑰對D1進行解密得到數(shù)據(jù)A,并且與client進行協(xié)商,以A作為臨時key進行數(shù)據(jù)傳輸。
4.當整個數(shù)據(jù)傳輸完成,臨時Key A 將被從服務器里刪除。
通過https的流程可以看出只要有公鑰及私鑰就可以實現(xiàn)安全傳輸,從原理上分析是沒有問題的,
但是存在個問題,如果在中間插入第三者A,那么對于client而言,A就是server,那么怎么能最大限度的避免這個問題了?
那就需要引入數(shù)字簽名的概念了。
10 什么是數(shù)字簽名
B1現(xiàn)在手上有2把要是,分別是公鑰及私鑰。然后分別把公鑰送給了B2,B3,B4。
現(xiàn)在B2決定給B1寫一份私密性,并且使用公鑰進行加密,這個時候,也只有B1通過私鑰進行解密才能得到信的內(nèi)容。
B1看到信的內(nèi)容后,決定在回一封信,但是需保證B2拿到的信是完整的,那就對信的摘要進行哈希運算,
得帶一個值 就是 "數(shù)字簽名",然后將這個值(簽名)使用私鑰進行加密,最后將數(shù)字簽名,信一起發(fā)給B2.
B2收到B1的信后,獲取信件及數(shù)字簽名。然后使用公鑰對信的摘要進行解密,在進行哈希運算,
如果跟B1發(fā)送的一樣,則信沒有被修改,是完整的,在通過協(xié)商的私鑰對信的內(nèi)容進行解密,得到信的內(nèi)容。
在B1給信使用哈希運算及使用私鑰加密的過程就叫數(shù)字簽名。
11 什么是CA
CA是頒發(fā)證書的權威機構,主要功能是負責證書簽發(fā),證書認證,證書管理。
12 什么是數(shù)字證書
數(shù)字證書主要是用來認證公鑰持有者的身份合法的電子文檔,已防止第三方冒充。
數(shù)字證書是由CA機構頒發(fā)的證書,包含證書頒發(fā)機構名稱,有效期限,證書的公鑰,證書的主題,簽名所使用的算
法,準確來說是由PKI體系規(guī)范了證書內(nèi)容。
當然一般的數(shù)字證書都是要錢的,同時在阿里云,騰訊云也可以申請單域名的數(shù)字證書,這個是免費的,名額有限。
13 從CA方面簽發(fā)證書的過程
簽發(fā)過程:
(CA)
1.服務機構向CA申請ssl證書,需提供一些相關證書驗證信息,申請的證書級別不同需要驗證的證書信息就不同,費用也不同,比如
在騰訊云申請免費的ssl證書,只需提供域名及對應的郵箱。
2.CA機構對你的提供的信息進行驗證,驗證成功過后,生成ssl證書。當前證書只包含你申請的一些信息,例如:證書簽發(fā)人,簽發(fā)地
址,簽發(fā)時間,有效期,證書持有者基本信息
3.CA使用hash算法對證書進行計算,得到一個hash值,稱呼為 數(shù)字摘要(也叫數(shù)字指紋),這個hash算法也叫指紋算法。
4.CA機構通過自己的私鑰對數(shù)字摘要,指紋算法進行加密,形成數(shù)字簽名。
5.CA機構將數(shù)字簽名+數(shù)字證書+元數(shù)據(jù)組合一起,形成一個 有簽名的數(shù)字證書
5.然后將數(shù)字證書+服務機構私鑰+CSR文件打包發(fā)送給服務機構。
驗證證書:
(client)
1.當client向server端發(fā)起https請求時,server會將CA機構頒布的證書文件+數(shù)字簽名發(fā)送給client。
2.客服端通過內(nèi)置信任的CA機構公鑰對數(shù)字前面進行解密
3.然后采取同樣的算法對證書進行哈希運算,得到哈希值,如果與發(fā)過來的摘要一樣,代表證書是可信的,只要證書的任意值被修改,
hash值就會變化。
4.驗證通過后,client就可以跟server進行正常的https請求流程了。
注:在整個過程中,CA的公鑰是內(nèi)置在瀏覽器或者操作系統(tǒng)的,主要用來解密數(shù)字簽名。而服務器的公鑰是存在ssl證書里的,主要用于
秘鑰協(xié)商。
14 防止中間人攻擊
那就得靠這個CA簽發(fā)的數(shù)字簽名,因為CA機構的私鑰就只有他自己,而別人沒有的,如果中間人對證書傳輸?shù)淖C書進行修改,在進行
加密,client就算利用中間人的公鑰進行解密,也會發(fā)現(xiàn)數(shù)字簽名的哈希值不對等,因此判定證書被修改。
hash算法可以保證值的唯一性,不可修改性,只要文件的一個字符出現(xiàn)變化,hash值也會隨之出現(xiàn)變化,當然也不是絕地安全的,根據(jù)
hash算法的不同,可以定義不同安全的級別。
15 SSL證書類型
一般來說SSL證書分為3類,分別是域名型(DV)SSL證書,企業(yè)型(OV)SSL證書,增強型(EV)SSL證書。
域名型SLL證書又稱DV 證書,安全等級一般,證書頒布機構只要驗證網(wǎng)站的真實性即可頒布此證書保護網(wǎng)站,進行網(wǎng)站重要信息加密,一般用于軟件下載站。
企業(yè)型SSL證書又稱OV 證書,安全等級高于DV證書,申請者需要填寫一些組織機構資料提交于證書頒布機構,經(jīng)過通過證書頒布機構嚴格審核,方可頒布。在整個過程中,證書機構不僅要確定網(wǎng)站的真實性,還要對您提交資料信息的準確性進行多方查驗,均沒問題方可通過,適合用于電商類型網(wǎng)站。文章來源:http://www.zghlxwxcb.cn/news/detail-479804.html
增強型SSL證書又稱EV證書,安全等級最高,申請條件更復雜,驗證流程更多,并且使用增強型SSL證書的網(wǎng)站,在網(wǎng)址前端會變成綠色,很好辨認,一般用于銀行證券等機構。文章來源地址http://www.zghlxwxcb.cn/news/detail-479804.html
到了這里,關于Nginx配置https及證書的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!