CA(簽證機構)如何發揮作用?
1.通信雙方互相交換證書;
2.雙方驗證證書的真僞;
3.雙方協商加密算法;
4.用CA頒發的公鑰解密證書的中CA的簽名,能解密說明證書來源可靠;
5.用CA的加密算法加密證書,並取得特徵值;與解密出來的特徵值進行比較,如果相同,說明證書完整性有保證;
6.檢查證書的有效期是否合法,如果在有效期內,則證書可用;
7.檢查證書的主體名稱和此次通信的目標是否能夠對應;
8.檢查證書是否被吊銷;
能夠實現上述安全加密功能的協議:
SSL:Security Socket Layer,安全套接字層;
TLS:Transport Layer Security,傳輸層安全協議;
SSL/TLS的handshake的四個階段:
1.客戶端向服務器索要證書並驗證證書;
發送Client Hello的消息,此消息主要內容:
支持的協議的版本,如:SSL v3.0或TLS v1.2;
客戶端生成一個隨機數,稍後用於生成回話密鑰;
支持的加密算法,如:DES,3DES,AES,RSA,....
支持的壓縮算法,如:gzip,bzip2,deflate,...
2.雙方協商生成會話密鑰:
發送Server Hello消息,此消息主要內容:
確認使用的協議的版本,如:TLS v1.2
服務器也生成一個隨機數,稍後用於生成會話密鑰;
確認加密算法和壓縮算法;
服務器的證書;
3.雙方採用以及生成的會話密鑰進行安全加密的數據通信:
客戶端驗證服務器證書,在確認無誤後,取出其中的服務器公鑰;
驗證服務器證書的步驟:
驗證發證機構(CA);
驗證證書的完整性;
驗證證書的持有者信息;
驗證證書的有效期;
驗證CA的吊銷列表中是否有此證書;
客戶端發送信息給服務器端;
客戶端再次生成一個隨機數,用於公鑰加密;
編碼格式的變更通知,表示以後的信息都將採用雙方已經協商好的加密算法和壓縮算法;
客戶端握手結束;
服務器收到客戶端發送來的第三個隨機數(Pre_Master_key),計算生成此次會話用到的會話密鑰,向客戶端發送相關信息;
編碼格式的變更通知,表示以後的信息都將採用雙方已經協商好的加密算法和壓縮算法;
服務器端握手結束;
4.雙方互相結束通信:
SSL/TLS的handshake的四個階段:
1.Client Hello
2.Server Hello
3.通信雙方採用已經生成的會話密鑰進行安全加密的數據通信;
4.雙方結束通信;
實現SSL/TLS協議的應用程序:OpenSSL
OpenSSL:開源的實現SSL/TLS協議的事實的標準;
主要有三部分組成:
1)libcrypto:實現加密和解密算法的庫;
2)libssl:實現SSL協議/TLS協議功能的庫;
3)openssl:多用途命令行工具;
openssl命令行工具:
衆多的子命令實現各種安全加密功能;
標準命令:
enc, dgst, ca, req, genrsa, rand, rsa, x509, passwd, ...
對稱加密命令:enc
提供對稱加密算法,以進行數據或文件的手動加密;
格式:openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] [-a/-base64] [-salt]
-ciphername:加密算法的名稱
-in filename:openssl要讀取的文件路徑;
-out filename:加密或解密操作後用於保存結果的文件路徑;
-e:加密操作
-d:解密操作
-a/-base64:用純文本格式進行密文編碼;
-salt:隨機加鹽;
示例:# openssl enc -e -des3 -in ytc.txt -a -out ytc1.txt(加密)
cat ytc1.txt
U2FsdGVkX1/PqNTpFQqp/nFppi3xdBEIIyaasE5rNwc=
# openssl enc -d -des3 -out ytc.txt -a -in ytc1.txt(解密)
單向解密命令:dgst
示例:
~]# openssl dgst -sha1 fstab
生成隨機數命令:rand
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
示例:# openssl rand -base64 16
JFPWNuu5WzXqfIk7luSBWA==
生成帶鹽的密碼:passwd
openssl passwd -1 -salt SALT_STRING
示例:
~]# openssl passwd -1 -salt 01234567
公鑰加密算法:genrsa
生成rsa加密算法的私鑰;
openssl genrsa [-out filename] [-des] [-des3] [-idea] [-f4] [-3] [numbits]
出於安全考慮,需要給創建的私鑰賦予只有擁有者才能讀寫其他任何人都不能讀寫的權限;建議使用下列方法生成私鑰:
~]# (umask 077 ; openssl genrsa -out /tmp/my.key 4096)
~]# (umask 077 ; openssl genrsa > /tmp/my.key 4096)
從以及生成的私鑰文件中抽取公鑰:rsa
openssl rsa [-in filename] [-out filename] [-pubout]
-pubout:抽取公鑰
-in filename:私鑰文件的路徑
-out filename:公鑰文件的路徑
示例:
~]# openssl rsa -in my.key -out mykey.pub -pubout
利用openssl建立私有CA步驟:
1.創建CA的私鑰文件:
(umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2.生成自簽證書:
openssl req命令:
openssl req [-out filename] [-new] [-key filename] [-x509] [-days n]
3.完善目錄及文本文件結構:
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial
在CA上查看證書內容:
openssl x509 -in /etc/pki/CA/cacert.pem -noout -serial -subject
吊銷證書:必須在CA上執行;
1.獲取客戶端證書對應的序列號:
openssl x509 -in /etc/pki/CA/certificate -noout -serial
2.吊銷證書:
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
注意:上述命令中的"SERIAL"要換成準備吊銷的證書的序列號;
3.生成吊銷證書的吊銷索引文件;僅需要第一次吊銷證書時執行此操作:
echo "SERIAL" > /etc/pki/CA/crl/crlnumber
4.更新證書吊銷列表:
openssl ca -genctl -out /etc/pki/CA/crl/ca.crl
5.查看CRL:
openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text