OpenSSL由三部分組成:
libencrypto庫
libssl庫
openssl多用途命令行工具
加密算法和協議:
對稱加密:加密和解密使用同一個密鑰;
DES 3DES AES Blowfish Twofish IDEA RC6 CAST5
特性:
1、加密、解密使用同一個密鑰;
2、將原始數據分割成為固定大小的塊,逐個進行加密;
缺陷:
1、密鑰過多;
2、密鑰分發困難;
公鑰加密:密鑰分為公鑰與私鑰
公鑰:從私鑰中提取產生;可公開給所有人;public key
私鑰:通過工具創建,使用者自己留存,必須保證其私密性;secret key;
特點:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然;
用途:
數字簽名:主要在于讓接收方確認發送方的身份;
密鑰交換:發送方用對方公鑰加密一個對稱密鑰,并發送給對方;
數據加密
算法:RSA, DSA, ELGamal, DSS, DSA
單向加密:即提出數據指紋;只能加密,不能解密;
特性:定長輸出、雪崩效應;
功能:完整性;
算法:
md5:Message Digest 5, 128bits
sha1:Secure Hash Algorithm 1, 160bits
sha224, sha256, sha384, sha512
密鑰交換: IKE(Internet Key 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 => (p^y%g)^x=p^xy%g
B: (p^x%g)^y=p^xy%g
PKI:Public Key Infrastructure
公鑰基礎設施:
注冊機構:RA
證書吊銷列表:CRL
證書存取庫:
證書的結構以及認證協議標準:
版本號
序列號
簽名算法ID
發行者名稱
有效期限
主體名稱
主體公鑰
發行者的惟一標識
主體的惟一標識
擴展
發行者的簽名
SSL:Secure sockets Layer
TLS: Transport Layer Security
分層設計:
1、最底層:基礎算法原語的實現,aes, rsa, md5
2、向上一層:各種算法的實現;
3、再向上一層:組合算法實現的半成品;
4、用各種組件拼裝而成的各種成品密碼學協議軟件;
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
生成隨機數:
工具:openssl rand
~]# openssl rand -hex NUM
~]# openssl rand -base NUM
公鑰加密:
加密解密:
算法:RSA,ELGamal
工具:openssl rsautl, gpg
數字簽名:
算法:RSA, DSA, ELGamal
密鑰交換:
算法:DH
生成密鑰:
生成私鑰: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提出公鑰: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
隨機數生成器:
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞;
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞;
偽隨機數不安全;
熵池中隨機數的來源:
硬盤IO中斷時間間隔;
鍵盤IO中斷時間間隔;
CA:公共信任的CA,私有CA;
建立私有CA:
openssl
openCA
配置文件:/etc/pki/tls/openssl.cnf
構建私有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
吊銷證書:
步驟:
(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
原創文章,作者:忠神通,如若轉載,請注明出處:http://www.www58058.com/77178