ssl
加密算法和協議:
對稱加密:加密和解密使用同一個密鑰;
依賴於:算法和密鑰;
安全性依賴於密鑰,而非算法
非對稱加密:公鑰加密
密鑰對兒:私鑰和公鑰
私鑰:secret key,僅允許個人使用;
公鑰:public key,公開給所有獲取;
公鑰從私鑰中提取而來;使用公鑰加密的數據,只能使用與此公鑰配對兒的私鑰解密;反之亦然;
用處:
身份認證:私鑰擁有者用自己的私鑰加密的數據,只要用其公鑰能解密,即可認證其身份;
密鑰交換:與被通信方通信之前,首先獲取到對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,併發送給對方;
數據加密:
算法:
RSA
DSA
ELGamal
特性:
1、密鑰長度較大,例如512bits, 2048bits, 4096bits
2、加密解密分別使用密鑰對兒中的密鑰相對進行;
3、常用於數據簽名和密鑰交換;
單向加密:提出數據的特徵碼;
特性:
1、定長輸出:無論原來的數據是多大級別,其加密結果長度一樣;
2、雪崩效應:原始數據微小改變,將會導致結果巨大變化;
3、不可逆:
算法:
MD5:128bits定長輸出;
SHA1:160bits定長輸出;
SHA256
SHA384
SHA512:
CRC32
密碼保存路徑/etc/shadow:
$#$#######$##############################################
用處:
1、數據完整性;
一次加密通信過程
發送者:
1、使用單向加密算法提取生成數據的特徵碼;
2、使用自己的私鑰 加密 特徵碼附加在數據後面;
3、生成用於對稱加密的臨時密鑰;
4、用此臨時密鑰 加密數據和已經使用私鑰加密後的特徵碼;
5、使用接收方的公鑰加密此臨時密鑰,附加在對稱加密後的數據後方;
接收方:
1、使用自己的私鑰解密加密的臨時密鑰;從而獲得對稱密鑰;
2、使用對稱密鑰解密對稱加密的 數據和私鑰加密的特徵碼密文;從而獲得數據和特徵碼密文;
3、使用發送方的公鑰解密特徵碼密文,從而獲得從計算生成的特徵碼;
4、使用與對方同樣的單向加密算法計算數據的特徵碼,並與解密而來的進行比較;
數字證書:
簽證機構:CA
註冊機構:RA
證書吊銷列表:CRL
功用:保證公鑰信息安全分發;
openssl的組成部分:
libcrypto:加密、解密庫文件;
libssl: ssl協議實現
openssl:多用途命令行工具,每種功能都使用專用的子命令來實現
加密文件(對稱加密):
工具:openssl enc, gpg(注:隨便輸入錯誤openssl+錯誤輸入能得到幫助)
算法:des, des3, aes, blowfish, twofish, idea, cast5
enc工具:
man enc
-e:對輸入數據進行加密
-salt:隨機數加密
-in:需要加密的文件
-out:加密後輸出路徑
-a:編譯成ASCII碼存放
# openssl enc -e -CIPHERNAME (算法名)-a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMECIPHERFILE
# openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/TO/SOMEFILE
單向加密:
算法:md5, sha1
工具:openssl dgst, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum
# openssl dgst -CIPHERNAME(如:sha1 md5)/PATH/TO/SOMEFILE...
MAC: 消息認證碼,單向加密的一種延伸應用,用於實現在網絡通信中保證所傳輸的數據的完整性;
機制:
CBC-MAC
HMAC:使用md5或sha1算法
生成用戶密碼:
# openssl passwd -1 -salt 8bits隨機數
生成隨機數:
# openssl rand 【-hex|-base64 】NUM
OpenSSL(2)
公鑰加密:
工具:gpg, openssl rsautl
數字簽名:RSA, DSA, ELGamal
DSA: Digital(數字) Signature(簽名) Algorithm(算法)
DSS: Digital Signature Standard
密鑰交換:
公鑰加密、DH
生成密鑰對兒:
操作過程:生成私鑰,從私鑰中提取公鑰;
# openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUM_BITS
注意:在bash命令行上放在小括號中執行的命令,其實是通過打開一個子shell進程進行的;
#(umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEYFILE NUM_BITS)
從私鑰中手動提取公鑰:
# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
-pubout :輸出公鑰信息
隨機數生成器:
random, urandom
熵池:保存硬件中斷產生的隨機數
/dev/random:僅從熵池中返回隨機數,當熵池中的隨機數耗盡時,取隨機數的進程將會被阻塞;
/dev/urandom:先從熵池中取隨機數,當熵池中的隨機耗盡時,就通過僞隨機數生成器生成隨機數;
X.509 v3數字證書的格式:
CA通過證書證實他人的公鑰信息,證書上有ca的簽名
獲取證書的方法:
向RA註冊
建立私有CA:
OpenSSL
OpenCA
使用OpenSSL構建私有CA:
1、生成私鑰;
2、生成自簽署證書;
(1) 私鑰用於簽發證書時,向證書添加數字簽名使用;
(2) 證書:每個通信方都導入此證書至“受信任的證書頒發機構”;
配置文件:/etc/pki/tls/openssl.cnf
工作目錄:/etc/pki/CA/
建立私有CA:
信息輸入錯誤 ctrl鍵刪除
1、生成私鑰文件: /etc/pki/CA/private/cakey.pem
# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2、生成自簽證書
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days #
-new: 生成新的證書籤署請求;
-key:私鑰文件路徑,用於提取公鑰;
-days N: 證書有效時長,單位爲“天”;
-out:輸出文件保存位置;
-x509:直接輸出自簽署的證書文件,通常只有構建CA時才這麼用;
3、提供輔助文件 注:一定要創建啊!!!!
# touch /etc/pki/CA/index.txt
# echo 01 > /etc/pki/CA/serial
給節點發證書:
1、節點申請證書
在證書申請的主機上進行如下步驟:
(1) 生成私鑰;
(2) 生成證書籤署請求;
注意:
(a) 其中的subject信息部分,要與CA的保持一致;
(b) Common Name要使用此主機在通信真實使用名字;
(3) 把請求發送給CA;
2、CA簽發證書
(1) 驗正請求者信息
(2) 簽署證書
# openssl ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N
(3) 把簽署好的證書發還給請求者
數字證書一般.crt結尾 證書請求.csr結尾
吊銷證書:
1、獲取吊銷證書的序列號;
# openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject
2、實現證書吊銷
(1) 吊銷證書
# openssl ca -revoke /PATH/FROM/CRT_FILE
(2) 生成吊銷證書的編號
echo 01 > /etc/pkie/CA/crlnumber
(3) 更新證書吊銷列表
# openssl crl -gencrl -out THISCA.crl