OpenSSL原理与实现
1. 概念
?
1.1. SSL(Secure Sockets Layer安全層套接字)/TLS(Transport Layer Security傳輸層套接字)。
最常見的應用是在網站安全方面,用于http數據傳輸的加密。
?
1.2. 安全的目標:保密性(confidentiality),完整性(integrity),可用性(availability)
?
1.3. 攻擊的類型:
威脅保密性的攻擊:竊聽、通信量分析;
威脅完整性的攻擊:更改、偽裝、重放、否認
威脅可用性的攻擊:拒絕服務(DoS)
?
1.4. 解決方案:技術(加密和解密)、服務(用于抵御攻擊的服務,也即是為了上述安全目標而特地設計的安全服務)
加密和解密:
傳統加密方法:替代加密方法、置換加密方法
現代加密方法:現代塊加密方法
服務:
認證機制
訪問控制機制
?
1.5. 在linux系統上的實現:OpenSSL(ssl), GPG(pgp)
?
1.6.?加密算法和協議:
1.6.1. 對稱加密:加密和解密使用同一個密鑰;
DES:Data Encryption Standard;?
3DES:Triple DES;
AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits)
Blowfish
Twofish
IDEA
RC6
CAST5
特性:
加密、解密使用同一個密鑰;
將原始數據分割成為固定大小的塊,逐個進行加密;
缺陷:
密鑰過多;
密鑰分發困難;
1.6.2. 公鑰加密:密鑰分為公鑰與私鑰
公鑰:從私鑰中提取產生;可公開給所有人;pubkey
私鑰:通過工具創建,使用者自己留存,必須保證其私密性;secret key;
特點:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然;
用途:
數字簽名:主要在于讓接收方確認發送方的身份;
密鑰交換:發送方用對方公鑰加密一個對稱密鑰,并發送給對方;
數據加密
算法:RSA, DSA, ELGamal
DSS: Digital Signature Standard
DSA:Digital Signature Algorithm
1.6.3. 單向加密:即提出數據指紋;只能加密,不能解密;
特性:定長輸出、雪崩效應;
功能:完整性;
算法:
md5:Message Digest 5, 128bits
sha1:Secure Hash Algorithm 1, 160bits
sha224, sha256, sha384, sha512
1.6.4. 密鑰交換: IKE(Internet Key Exchange)
公鑰加密算法:RSA
DH(Deffie-Hellman),ECDH(橢圓曲線DH),ECDHE(臨時橢圓曲線DH)
1.7.?PKI:Public Key Infrastructure
公鑰基礎設施:
簽證機構:CA
注冊機構:RA
證書吊銷列表:CRL
證書存取庫:
X.509v3:定義了證書的結構以及認證協議標準
版本號
序列號
簽名算法ID
發行者名稱
有效期限
主體名稱
主體公鑰
發行者的惟一標識
主體的惟一標識
擴展
發行者的簽名
1.8. 設計模式:分層設計
最底層:基礎算法原語的實現,aes, rsa, md5
向上一層:各種算法的實現;?
再向上一層:組合算法實現的半成品;
用各種組件拼裝而成的各種成品密碼學協議軟件;
?
2. 傳輸過程:
?
2.1?SSL會話主要三步:
客戶端向服務器端索要并驗正證書;
雙方協商生成“會話密鑰”;
雙方采用“會話密鑰”進行加密通信;
?
2.2.?SSL Handshake Protocol:
第一階段:ClientHello:
支持的協議版本,比如tls 1.2;
客戶端生成一個隨機數,稍后用戶生成“會話密鑰”
支持的加密算法,比如AES、3DES、RSA;
支持的壓縮算法;
第二階段:ServerHello
確認使用的加密通信協議版本,比如tls 1.2;
服務器端生成一個隨機數,稍后用于生成“會話密鑰”
確認使用的加密方法;
服務器證書;
第三階段:
驗正服務器證書,在確認無誤后取出其公鑰;(發證機構、證書完整性、證書持有者、證書有效期、吊銷列表)
發送以下信息給服務器端:
一個隨機數;
編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送;
客戶端握手結束通知;
第四階段:
收到客戶端發來的第三個隨機數pre-master-key后,計算生成本次會話所有到的“會話密鑰”;
向客戶端發送如下信息:
編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送;
服務端握手結束通知;
?
3. OpenSSL
3.1. 組件:libcrypto, libssl(主要由開發者使用),openssl(多用途命令行工具)
3.2. opensll命令:
從多子命令,分為三類:
標準命令
消息摘要命令(dgst子命令)
加密命令(enc子命令)
標準命令: enc, ca, req, genrsa, ...
3.2.1.?對稱加密:
工具: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
3.2.2.?單向加密:
工具:openssl dgst, md5sum, sha1sum, sha224sum, ...
dgst命令:
~]# openssl dgst -md5 /PATH/TO/SOMEFILE
3.2.3.?生成用戶密碼:
工具:passwd, openssl passwd
~]#?openssl passwd -1 -salt SALT
3.2.4.?生成隨機數:
工具:openssl rand
~]# openssl rand -hex NUM
~]# openssl rand -base NUM
3.2.5.?公鑰加密:
加密解密:
算法:RSA,ELGamal
工具:openssl rsautl, gpg
數字簽名:
算法:RSA, DSA, ELGamal
工具:
密鑰交換:
算法:DH
3.2.6.?生成密鑰:
生成私鑰: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提出公鑰: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
?
4. CA:公共信任的CA,私有CA;
4.1. 公共CA:買買買
4.2. 建立私有CA工具:openssl/OpenCA
4.2.1. openssl命令:
配置文件:/etc/pki/tls/openssl.cnf
4.2.1.1.?構建私有CA:
在確定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及文件即可;
步驟:
(1) 生成私鑰;
~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
(2) 生成自簽證書;
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-new:生成新證書簽署請求;
-x509:生成自簽格式證書,專用于創建私有CA時;
-key:生成請求時用到的私有文件路徑;
-out:生成的請求文件路徑;如果自簽操作將直接生成簽署過的證書;
-days:證書的有效時長,單位是day;
(3) 為CA提供所需的目錄及文件;
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial
要用到證書進行安全通信的服務器,需要向CA請求簽署證書:
步驟:(以httpd為例)
(1) 用到證書的主機生成私鑰;
~]# mkdir /etc/httpd/ssl?
~]# cd /etc/httpd/ssl
~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
(2) 生成證書簽署請求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
(3) 將請求通過可靠方式發送給CA主機;
(4) 在CA主機上簽署證書;
~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
查看證書中的信息:
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
4.2.1.2.?吊銷證書:
步驟:
(1) 客戶端獲取要吊銷的證書的serial(在使用證書的主機執行):
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
(2) CA主機吊銷證書
先根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致;
吊銷:
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
其中的SERIAL要換成證書真正的序列號;
(3) 生成吊銷證書的吊銷編號(第一次吊銷證書時執行)
# echo 01 > /etc/pki/CA/crlnumber
(4) 更新證書吊銷列表
# openssl ca -gencrl -out thisca.crl?
查看crl文件:
# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
轉載:https://www.cnblogs.com/demonzk/p/6485326.html
總結
以上是生活随笔為你收集整理的OpenSSL原理与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点餐系统源码|点餐系统小程序源码
- 下一篇: R-CNN算法优化策略