OpenSSL是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能以及ssl協定,并提供程式供測或其他目的使用。
傳輸層協定:TCP, UDP, SCTP
port:程序位址,程序向核心注冊使用某端口(獨占)
同一主機上的程序間通信:IPC , message queue,shm,semerphor
不同主機上的程序間通信:socket
監聽模式:LISTEN(ip:port)
SSL:Secure Socket Layer
http --> ssl --> https
安全的目标:
保密性:confidentiality
完整性:integrity
可用性:availability
攻擊類型:
威脅保密性的攻擊:竊聽、通信量分析;
威脅完整性的攻擊:更改、僞裝、重放、否認
威脅可用性的攻擊:拒絕服務(DoS)
解決方案:
技術(加密和解密)、服務(用于抵禦攻擊的服務,也即是為了上述安全目标而特地設計的安全服務)
加密和解密:
傳統加密方法:替代加密方法、置換加密方法
現代加密方法:現代塊加密方法
服務:
認證機制
通路控制機制
密鑰算法和協定
對稱加密
公鑰加密
單向加密
認證協定
Linux系統:OpenSSL(ssl),GPG(pgp)
OpenSSL由三部分組成:
libencrypto庫
libssl庫
openssl多用途指令行工具
加密算法和協定:
對稱加密:加密和解密使用同一個密鑰;
DES:Data EncryptionStandard;
3DES:triple DES
AES:Advanced EncryptionStandard;(128bits,192bits,256bits,384bits)
Blowfish
Twofish
IDEA
RC6
CAST5
特性:
1. 加密、解密使用同一個密鑰
2. 将原始資料分割稱為固定大小的塊,組個進行加密;
缺陷:
1. 密鑰過多;
2. 密鑰分發困難;
公鑰加密:密鑰分為公鑰與私鑰
公鑰:從私鑰中提取産生;可公開給所有人;pubkey
私鑰:通過工具建立,使用者自己留存,必須保證其私密性;secret key
特點:用公鑰加密的資料,隻能使用與之配對的私鑰解密;反之亦然;
用途:
數字簽名:主要在于讓接收方确認發送方的身份;
密鑰交換:發送方用對方公鑰加密一個對稱密鑰,并發送給對方;
資料加密
算法:RSA,DSA,ELGamal
DSS:Digital SignatureStandard
DSA:Digital SignatureAlgorithm
單向加密:即提出資料指紋;隻能加密不能解密;
特性:定長輸出、雪崩效應;
功能:保證資料完整性;
算法:
md5:message digest 5, 128bits
sha1:secure hashalgorithm 1, 160bits
sha224,sha256,sha384,sha512
密鑰交換:IKE(InternetKey Exchange)
DH(deffie-Hellman)
A: p,g
B: p,g
A:x --> p^x%g==>B
A:(p^y%g)^x=p^yx%g
B: y
--> p^y%g ==>A
B: (p^x%g)^y=p^xy%g
PKI:Public Key Infrastructure
公鑰基礎設施:
簽證機構:CA
注冊機構:RA
證書吊銷清單:CRL
證書存取庫:
x.509v3:定義了證書的結構以及認證協定标準
版本号
序列号
簽名算法ID
發行者名稱
有效期限
主體公鑰
發行者的唯一辨別
擴充
發行者的簽名
SSL:Secure sockets Layer
Netscape: 1994
V1.0, V2.0, V3.0
TLS:Transport Layer security
IETF:1999
V1.0, V1.1, V1.2, V1.3
分層設計:
1. 最底層:基礎算法原語的實作,aes,rsa,md5
2. 向上一層:各種算法的實作;
3. 再向上一層;組合算法實作的半成品;
4. 用各種元件拼裝而成的各種成品密碼學協定軟體;
SSL/TLS
SSL:安全套接字層(ssl 1.0,ssl2.0,ssl3.0)
TLS:傳輸層安全(tls 1.0,tls1.1,tls 1.2,tls 1.3)
SSL會話的主要三步:
用戶端向伺服器端索要并驗證證書;
雙方協商生成“會話密鑰”;
雙方采用“會話密鑰”進行加密通信;
SSL Handshake Protocol:ssl握手協定
第一階段:ClientHello
支援協定的版本,比如tls 1.2;
用戶端生成一個随機數,稍後使用者生成“會話密鑰”
支援的加密算法,比如AES、3DES、RSA;
支援的壓縮算法;
第二階段:serverhello
确認使用的加密通信協定版本,比如tls 1.2;
伺服器端生成一個随機數,稍後用于生成“會話密鑰”
确認使用的加密方法;
伺服器證書;
第三階段:
驗證伺服器證書,在确認無誤後取出其公鑰;(發證機構、證書完整性、證書持有者、證書有效期、吊銷清單)
發送以下資訊給伺服器端:
一個随機數;
編碼變更通知,表示随後的資訊都将用雙方商定的加密方法和密鑰發送;
用戶端握手結束通知;
第四階段:
收到用戶端發來的第三個随機數pre-master-key後,計算生成本次會話所有用到的“會話密鑰”;
向用戶端發送如下資訊;
編碼變更通知,表示随後的資訊都将用雙方商定的加密方法和密鑰發送;
服務端握手結束通知;
Openssl(2)
元件:
libcrypto,libssl主要由開發者使用;
openssl:多用途指令行工具;
openssl:
從多子指令,分為三類:
标準指令
消息摘要指令(dgst子指令)
加密指令(enc子指令)
标準指令:enc,ca,req,genrsa,…
對稱加密:
工具:openssl enc gpg
支援的算法:3des,aes,blowfish,towfish
enc指令:
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
單向加密:
工具:openssl dgst,md5sum,sha1sum,sha224sum,…
dgst指令:~]#openssl dgst –md5/path/to/somefile
一般可以驗證檔案的完整性。
生成使用者密碼:
工具:passwd,openssl passwd
openssl passwd -1 –salt SALT
Note:salt不同,相同的密碼,輸出也不同。
生成随機數:
工具:openssl rand
~]# openssl rand -hex NUM
~]# openssl rand -base NUM
公鑰加密:
加密解密:
算法:RSA,ELGamal
工具:openssl rsautl,gpg
數字簽名:
算法:RSA,DSA,ELGamal
密鑰交換:
算法:DH
生成密鑰:
生成私鑰:#(umask077 ;openssl genrsa –out /path/to/private_key_fileNUM_BITS)
提出公鑰:#openssl rsa –in /path/from/private_key_file -pubout
Linux系統上的随機數生成器:
/dev/random:僅從熵池傳回随機數;随機數用盡,阻塞;
/dev/urandom:從熵池傳回随機數;随機數用盡,會利用軟體生成僞随機數,非阻塞;僞随機數不安全;
熵池中随機數的來源;
磁盤IO中斷時間間隔
鍵盤IO中斷時間間隔
CA:
公共信任的CA,私有CA;
建立私有CA:
openssl
OpenCA
openssl指令:
配置檔案:/etc/pki/tls/openssl.cnf
建構私有CA示例:準備兩台主機,一台作CA主機192.168.19.128,一台作使用者主機192.168.19.134(證書請求主機)
建構私有CA:在确定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及檔案即可;
步驟:
1) 生成私鑰:
~]# (umask077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
<a href="https://s5.51cto.com/wyfs02/M00/A6/EA/wKioL1ndubOiOZU4AACrEAT01YY890.png-wh_500x0-wm_3-wmp_4-s_3207608040.png" target="_blank"></a>
2) 生成自簽證書;
~]# opensslreq -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem-days 3655
-new:生成新證書簽署請求;
-x509:生成自簽格式證書,專用于建立私有CA;
-key:生成請求時用到的私鑰檔案路徑;
-out:生成的請求檔案路徑;如果自簽操作将直接生成簽署過的證書
-days:證書的有效時長,機關為day;
<a href="https://s2.51cto.com/wyfs02/M01/08/38/wKiom1neKM_R4sxrAAHPJSwhJY0215.png-wh_500x0-wm_3-wmp_4-s_2572943916.png" target="_blank"></a>
3) 為CA提供所需的目錄及檔案;
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial
<a href="https://s2.51cto.com/wyfs02/M01/A6/EA/wKioL1nduc6Q28Q9AAAhE2Qs3kA768.png-wh_500x0-wm_3-wmp_4-s_3787356178.png" target="_blank"></a>
要用到證書進行安全通信的伺服器,需要向CA請求簽署證書;
步驟:(以httpd為例)
1) 用到證書的主機生成私鑰:
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]#(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
<a href="https://s3.51cto.com/wyfs02/M02/A6/EA/wKioL1ndudjytRR6AAE0ZlrWCfw993.png-wh_500x0-wm_3-wmp_4-s_1741989941.png" target="_blank"></a>
2) 生成證書簽署請求
<a href="https://s5.51cto.com/wyfs02/M00/08/38/wKiom1neKPCD7AMdAACD1smZHgA458.png-wh_500x0-wm_3-wmp_4-s_3489779625.png" target="_blank"></a>
3) 将請求通過可靠方式發給CA主機;
<a href="https://s1.51cto.com/wyfs02/M00/08/38/wKiom1neKPii-VhDAAAk5t7Q4dc737.png-wh_500x0-wm_3-wmp_4-s_326682746.png" target="_blank"></a>
可在CA主機上檢視請求主機發送的證書請求;
<a href="https://s2.51cto.com/wyfs02/M00/A6/EA/wKioL1ndufTBnZmkAADlzA1NWrY877.png-wh_500x0-wm_3-wmp_4-s_1015762267.png" target="_blank"></a>
4) 在CA主機上簽署證書;
~]# opensslca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
<a href="https://s2.51cto.com/wyfs02/M01/A6/EA/wKioL1nduf3AyNh6AACBiPHTaOw223.png-wh_500x0-wm_3-wmp_4-s_3445423831.png" target="_blank"></a>
檢視 證書資訊:
~]# openssl x509 -in/etc/pki/CA/certs/httpd.crt -noout -serial -subject
5) CA所在的主機将簽署完的證書,發送回請求主機;
<a href="https://s4.51cto.com/wyfs02/M02/A6/EA/wKioL1nduhPx6mxAAAAgzAG2VWI980.png-wh_500x0-wm_3-wmp_4-s_999637115.png" target="_blank"></a>
吊銷證書:
步驟:
1) 用戶端擷取要吊銷證書的serial(在使用證書的主機執行):
~]#openssl x509 –in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
<a href="https://s1.51cto.com/wyfs02/M02/A6/EA/wKioL1nduhuif-McAAAgFZTFZZQ477.png-wh_500x0-wm_3-wmp_4-s_3449890346.png" target="_blank"></a>
2) CA主機吊銷證書
先根據客戶送出的serial和subject資訊,對比其與本機資料庫index.txt中存儲的是否一緻;
吊銷:
#openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.PEM
其中的 SERIAL要換成證書真正的序列号;
3) 生成吊銷證書的吊銷編号(第一次吊銷證書時執行)
echo 01 >/etc/pki/CA/crlnumber
<a href="https://s1.51cto.com/wyfs02/M00/A6/EA/wKioL1ndujuQKtvmAAATOwBIFak440.png-wh_500x0-wm_3-wmp_4-s_3233925964.png" target="_blank"></a>
4) 更新吊銷證書清單
#openssl ca–gencrl -out thisca.crl
<a href="https://s1.51cto.com/wyfs02/M00/A6/EA/wKioL1ndukWQA_PfAAAWzkcluCM673.png-wh_500x0-wm_3-wmp_4-s_2958463214.png" target="_blank"></a>
檢視crl檔案:
#openssl crl –in /path/from/crl_file.crl -noout –text
本文轉自 claude_liu 51CTO部落格,原文連結:http://blog.51cto.com/claude666/1971422,如需轉載請自行聯系原作者