摘要:常見的對稱加密算法密鑰長度可選等非對稱加密非對稱加密,密鑰成對出現(xiàn),一公一私。申請者將自己的公鑰和個人站點(diǎn)信息發(fā)送給,請求其做認(rèn)證。定義了證書的結(jié)構(gòu)以及認(rèn)證協(xié)議標(biāo)準(zhǔn),目前使用的是第三版。
對稱加密
對稱加密中加密和解密使用相同的密鑰,加解密速度快,算法公開,計(jì)算量小。
使用對稱加密,交易雙方都使用同樣鑰匙,安全性得不到保證;每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發(fā)收信雙方所擁有的鑰匙數(shù)量呈幾何級數(shù)增長,密鑰管理成為用戶的負(fù)擔(dān)。對稱加密算法在分布式網(wǎng)絡(luò)系統(tǒng)上使用較為困難,主要是因?yàn)槊荑€管理困難,使用成本較高。
常見的對稱加密算法:
DES(Data Encryption Standard)
3DES
AES(Advanced Encryption Standard)密鑰長度可選128/192/258/384/512 bits
RC2、RC4、RC5、Blowfish 等
非對稱加密非對稱加密,密鑰成對出現(xiàn),一公一私。公鑰(public key)公開給所有人,而私鑰自己保存,必須保證其私密性,如對私鑰加密或設(shè)置權(quán)限。
Bob將信息使用 Alice 的公鑰加密后發(fā)送給Alice,Alice 使用私鑰解密加密的文檔。非對稱加密同樣也可以認(rèn)證身份,Alice 用自己的私鑰加密信息,如果 Bob 能用 Alice 的公鑰解密,則身份認(rèn)證成功。
非對稱加密的三種用途:
數(shù)字簽名:用于讓接收方確認(rèn)發(fā)送方的身份,并確認(rèn)數(shù)據(jù)沒有篡改
密鑰交換:發(fā)送方用對方的公鑰加密一個對稱密鑰,并發(fā)送給對方
數(shù)據(jù)加密
常見的非對稱加密算法:
RSA:加密、解密、簽名
DSA:簽名
中間人攻擊Man-in-the-middle attack
Alice向 Bob 索取他的公鑰,Bob 將他的公鑰發(fā)送給 Alice,并且此時 Mallory 攔截到 Bob 的公鑰
Mallory 將自己的公鑰發(fā)送給 Alice,Alice 認(rèn)為 Mallory 的公鑰就是 Bob 的公鑰
Alice 用 Mallory 的公鑰加密并將信息發(fā)送給 Bob,Mallory 攔截 Alice 信息,并解密
Mallory 將消息查看或者修改后,使用之前攔截的 Bob公鑰再次加密后,發(fā)送給 Bob
Bob 收到消息后,相信這是 Alice 發(fā)來的信息
單向加密單向加密只能加密,不能解密,又稱為提取數(shù)據(jù)指紋。單向加密的作用是保證數(shù)據(jù)的完整性,單向加密會定長輸入,當(dāng)原有數(shù)據(jù)被改變后,輸出會完全變化,又稱為雪崩效應(yīng)。
常見的單向加密算法:
md5:128bit,按4位二進(jìn)制組合成一個16進(jìn)制數(shù),結(jié)果由32個十六進(jìn)制數(shù)組成的數(shù)字串
sha1:160bit
sha224、sha256、sha384、sha512
PKI公鑰基礎(chǔ)設(shè)施PKI 公鑰基礎(chǔ)設(shè)施是抵御中間人攻擊的一種認(rèn)證技術(shù),方法是 PKI 的相互認(rèn)證的機(jī)制。
只要能安全的傳輸公鑰,就能避免中間人攻擊。要保證公鑰不被替換,就需要一個可信的認(rèn)證機(jī)構(gòu)對公鑰進(jìn)行公證。
PKI 的主要的四個組件:
簽證結(jié)構(gòu):CA,生成數(shù)字證書
登記機(jī)構(gòu):RA,接收證書請求,驗(yàn)證請求者身份,相當(dāng)于 CA 的前端代理
證書吊銷列表:CRL,保存證書頒發(fā)機(jī)構(gòu) CA 已經(jīng)吊銷的證書序列號和吊銷日期
PKI 存取庫:對用戶申請、證書、密鑰、CRL 和日志信息進(jìn)行存儲和管理
CA是有公信力的認(rèn)證中心。申請者將自己的公鑰和個人(站點(diǎn))信息發(fā)送給CA,請求其做認(rèn)證。CA進(jìn)行驗(yàn)證后,將申請人的信息和公鑰使用Hash算法提取消息摘要,然后CA使用自己的私鑰對消息摘要進(jìn)行加密形成數(shù)字簽名。CA將申請者的個人信息和申請者的公鑰加上數(shù)字簽名形成了數(shù)字證書,并發(fā)送給申請者。X.509定義了證書的結(jié)構(gòu)以及認(rèn)證協(xié)議標(biāo)準(zhǔn),目前使用的是第三版。
發(fā)送方發(fā)送信息時同時也發(fā)送自己的數(shù)字證書,當(dāng)接收方收到信息和數(shù)字證書時,接收方使用Hash算法對證書中的個人信息和公鑰進(jìn)行提取指紋,然后使用CA的公鑰對數(shù)字簽名進(jìn)行解密,對比自己生成的消息摘要和解密出來的數(shù)字簽名是否一致,如果一致,則發(fā)送方的公鑰可用。
CA本身也有證書來證明自己的身份,并且CA是一種樹形結(jié)構(gòu),高級別的CA會給低級別的CA做信用背書,操作系統(tǒng)和瀏覽器已經(jīng)內(nèi)置了頂層的CA證書。
CA 參與的安全通信過程:
首先保證CA為通信雙方都認(rèn)可的機(jī)構(gòu)
通信雙方向CA申請數(shù)字證書,包含了各自的公鑰
CA對通信雙方進(jìn)行合法性驗(yàn)證,通過則使用CA的私鑰對申請文件進(jìn)行加密(數(shù)字簽名),并將數(shù)字簽名和個人信息整理為一個數(shù)字證書
通信雙方下載各自由CA簽發(fā)的數(shù)字證書
當(dāng)發(fā)送方要發(fā)送信息時,首先向接收方請求其數(shù)字證書
接收方利用CA的公鑰檢查接收到的數(shù)字證書是否合法,并得到接收方的公鑰
發(fā)送方利用散列函數(shù)對明文數(shù)據(jù)提取指紋,然后通過程序隨機(jī)生成一個session key,利用這個session key對明文數(shù)據(jù)進(jìn)行對稱加密,最后發(fā)送方用接收方的公鑰對session key進(jìn)行非對稱加密
發(fā)送方將自己的證書和加密后的文件(包含session key)發(fā)送給接收方
接收方用CA的公鑰驗(yàn)證發(fā)送方數(shù)字證書的合法性,包括用CA的公鑰解密數(shù)字證書、用相同的簽名算法ID提取指紋并與簽名比對、數(shù)字證書的有效期、證書的主體名和被訪問的主機(jī)名或人名是否相同以及證書是否在吊銷列表中。
如果合法,則利用自己的私鑰對session key進(jìn)行解密得到明文數(shù)據(jù),然后利用散列函數(shù)對明文數(shù)據(jù)提取指紋,將自己得到的指紋與發(fā)送方發(fā)來的指紋進(jìn)行對比,如果一致,則沒有被篡改,安全通信完成。
以上,對稱加密和非對稱加密解決了數(shù)據(jù)的保密性,單向加密解決了數(shù)據(jù)的完整性,使用 PKI 解決了數(shù)據(jù)的可用性或者是來源合法性。這樣就建立了一個安全的通信。
SSL/TLS1994年,NetScape公司設(shè)計(jì)了SSL協(xié)議(Secure Sockets Layer)的1.0版,但是未發(fā)布,設(shè)計(jì) SSL 的目的是是為了對http報(bào)文進(jìn)行加密,隨后又陸續(xù)發(fā)布了2.0和3.0。1999年,互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織ISOC接替NetScape公司,發(fā)布了SSL的升級版TLS (Transport Layer Security)1.0版,目前 TLS 的版本是TLS 1.3。
SSL/TLS發(fā)生作用的位置在 ISO/OSI 參考模型中的表示層、TCP/IP 模型中的應(yīng)用層。
SSL協(xié)議分為兩部分:Handshake protocol和Record Protocol。
Handshake Protocol用來在通信雙方協(xié)商出一個安全的會話密鑰以供后續(xù)對稱加密中使用。Record Protocol則定義了傳輸?shù)姆庋b格式。
SSL/TLS協(xié)議通信的大概過程:
客戶端向服務(wù)端索要公鑰(證書)并驗(yàn)證
雙方協(xié)商生成“會話密鑰”
后續(xù)使用“會話密鑰”加密通信
首先,客戶端發(fā)出請求(ClientHello),將本地支持的加密套件(Cipher Suit)的列表,也就是本地支持的加密算法、支持的TLS版本、支持的壓縮方法發(fā)送到服務(wù)端。另外產(chǎn)生一個隨機(jī)數(shù)發(fā)送到服務(wù)端,同時保存在本地一個副本,稍后用于生成會話密鑰。
然后,服務(wù)端回應(yīng)(ServerHello),將服務(wù)端的數(shù)字證書發(fā)送給客戶端,并確認(rèn)使用的加密通信協(xié)議版本(也就是安全套件)、服務(wù)器生成的隨機(jī)數(shù)、確認(rèn)使用的加密算法。
其次,客戶端收到服務(wù)端證書根據(jù)證書鏈驗(yàn)證真實(shí)性后,得到服務(wù)器的可信公鑰,然后再發(fā)送一個新的隨機(jī)數(shù)、編碼改變通知(隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送)、客戶端握手結(jié)束通知。
最后,服務(wù)端收到第三個隨機(jī)數(shù)后,計(jì)算生成本次會話使用的會話密鑰,然后發(fā)送編碼改變通知和服務(wù)器握手結(jié)束通知。
隨后的通信使用的http協(xié)議,然后使用會話密鑰加密。
TLS 安全密碼套件
密鑰交換
身份驗(yàn)證
對稱加密算法、強(qiáng)度、分組模式
簽名 hash 算法
使用私有 CA 實(shí)現(xiàn) https 站點(diǎn)建立私有 CA
1.安裝 openssl:yum install openssl -y
2.生成 CA 的密鑰對:(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
3.生成自簽證書和相關(guān)文件:openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
req:生成證書簽署請求
-new:新請求
-key ...:指定私鑰文件
-out .../-x509:生成自簽署證書的位置和格式
-days:有效天數(shù)
4.初始化 CA 工作環(huán)境: touch /etc/pki/CA/{index.txt,serial};echo 01/etc/pki/CA/serial
與 CA 配置的相關(guān)文件是/etc/pki/tls/openssl.cnf ,index.txt是數(shù)據(jù)庫索引文件, serial 是用來記錄簽證相關(guān)信息的。
站點(diǎn)申請證書
1.安裝 openssl
2.生成密鑰,保存在服務(wù)配置文件目錄下
mkdir /usr/nginx-1.14.2/conf/ssl ln -s /usr/nginx-1.14.2/conf/ssl/ /etc/nginx/ssl (umask 077;openssl genrsa -out /etc/nginx/ssl/nginx.key 2048)
3.生成證書簽署請求:openssl req -new -key /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.csr
需要注意的是,填寫的信息需要與 CA 端保持一致,Organization Name 也必須保持一致。
4.將簽署請求文件 nginx.csr發(fā)送給 CA 服務(wù)
CA 簽署請求文件
1.簽署請求文件:openssl ca -in /tmp/nginx.csr -out /tmp/nginx.crt -days 365
2.將證書發(fā)送給請求客戶端
3.其他:CA 吊銷證書openssl ca -revoke nginx.crt
站點(diǎn)部署證書
將證書保存在/etc/nginx/ssl/目錄下,由于之前編譯安裝的 nginx,默認(rèn)沒有將ssl_module編譯,所以需要重新將帶有 ssl 模塊一同編譯nginx。
回到 Nginx 源碼目錄下,加上 SSL 模塊,再次編譯:
./configure --prefix=/usr/nginx-1.14.2/ --with-http_ssl_module make
由于當(dāng)前操作是升級操作,之前使用的 Nginx 配置文件等不能被覆蓋,所以不能使用make install,需要備份原nginx 二進(jìn)制文件,將新的 nginx 二進(jìn)制文件覆蓋即可
cp /usr/nginx-1.14.2/sbin/nginx /usr/nginx-1.14.2/sbin/nginx.without_ssl.bak cp /tmp/nginx-1.14.2/objs/nginx /usr/nginx-1.14.2/sbin/nginx
objs/nginx是新編譯的 nginx 程序,覆蓋原 nginx 程序,啟動 nginx。
修改nginx配置文件,開啟 https
server { listen 443; #監(jiān)聽端口為443 server_name devops.yellowdog.com; ssl on; #開啟 ssl ssl_certificate /etc/nginx/ssl/nginx.crt; #證書位置 ssl_certificate_key /etc/nginx/ssl/nginx.key; #私鑰位置 ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; #指定密碼為 openssl 支持的格式 ssl_ciphers HIGH:!aNull:!MD5; #密碼加密方式 ssl_prefer_server_ciphers on; #依賴 SSLv3和 TLSv1協(xié)議的服務(wù)器密碼將優(yōu)先于客戶端密碼 location / { alias dlib/; #根目錄相對位置 } }
另外還設(shè)置將80端口的訪問重定向至443端口
server { listen 80; server_name devops.yellowdog.com; rewrite ^(.*)$ https://$server_name$1 permanent; }總結(jié)
部署 https 站點(diǎn)總體不難,但重點(diǎn)要理解安全通信中的原理。
推薦文章:圖解openssl實(shí)現(xiàn)私有CA
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40380.html
摘要:然后再將這兩個文件夾給定權(quán)限和所有權(quán)上面的就是默認(rèn)的用戶組合用戶名。 原文來自: https://www.codecasts.com/blo... 在維護(hù) codecasts 期間,遇到很多次一個 nginx 如何配置多個站點(diǎn) 的問題,我通常的回復(fù)就是:多添加一個 server 的 block 配置就好了,然而很多同學(xué)還是沒能配置成功,今天我們仔細(xì)來看看在 一臺 Ubuntu 的服務(wù)器...
摘要:是一款輕量級的服務(wù)器反向代理服務(wù)器及電子郵件代理服務(wù)器,并在一個協(xié)議下發(fā)行。表明它使用了,但存在不同于的默認(rèn)端口及一個加密身份驗(yàn)證層在與之間?,F(xiàn)在它被廣泛用于萬維網(wǎng)上安全敏感的通訊,例如交易支付方面。 Nginx Nginx是一款輕量級的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個BSD-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上...
閱讀 1947·2021-11-24 09:39
閱讀 3320·2021-09-22 14:58
閱讀 1178·2019-08-30 15:54
閱讀 3331·2019-08-29 11:33
閱讀 1800·2019-08-26 13:54
閱讀 1609·2019-08-26 13:35
閱讀 2479·2019-08-23 18:14
閱讀 776·2019-08-23 17:04