SSL/TLS分析html
本文分爲六個部分,詳見思惟導圖。linux
1、SSL/TLS做用git
在瞭解做用前,先介紹什麼是SSL/TLS?SSL(Secure Sockets Layer)即安全套接字層,保障internet數據傳輸的安全性。TLS(Transport Layer Security)即安全傳輸層協議,保障應用程序之間通訊的安全性。算法
要了解SSL/TLS的做用要從網絡通訊風險着手,因此總結出了三大風險及其對應的解決方案。數據庫
參考連接:(http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html) 安全
2、歷史服務器
3、必須掌握的一些密碼學的概念網絡
下面是密碼學中的概念介紹。併發
4、SSL/TLS基本運做過程
dom
5、握手階段的詳細過程
客戶端服務端安全加密通訊有四次握手的過程,握手過程出如今上面運做流程的前兩個階段。握手過程是這樣的。
第一次握手也稱爲ClientHello,即客戶端像服務端問好。這可不是簡單的問好,此次問好包含了大量的信息。信息以下:
第二次握手也稱爲serhello,即服務端向客戶端問好。一樣,這也不是簡單的問好,也包含的大量的信息。信息以下:
第三次握手爲客戶端迴應。信息以下:
第四次握手爲服務端最後的迴應,信息以下:
6、OpenSSL
OpenSSL是SSL的開源實現方案。我將介紹以下的內容。
6.1 簡介
OpenSSL是一個開放源代碼的軟件庫包,應用程序可使用這個包來進行安全通訊,避免竊聽,同時確認另外一端鏈接者的身份。
6.2 組件
OpenSSL由如下三部分組成。libcryto這是一個具備通用功能的加密庫;libssl是實現SSL機制的安全通訊加密庫,實現TLS/SSL功能。經過libssl能夠實現遠程執行程序命令,傳輸文件等等。XSHELL,SecureCRTP,putty工具就是調用了這個庫實現遠程控制主機的功能;openssl是個多功能命令行工具、他能夠實現加密解密、甚至還能夠 當CA來用、可讓你建立證書、吊銷證書。
6.3 加密算法和協議
在這一小節,我瞭解如下四部分的信息。
6.3.1 單向加密
單向加密算法的介紹以及特性如圖所示。MD5加密算法即爲有名的數字摘要算法。簡單理解MD5算法簡單的來講就是把任意長度的字串變換成固定長度(一般是128位)的16進制串。
MD5的功能有:(1)一致性驗證(2)數字簽名(3)密碼存儲
(1)一致性驗證,簡單理解就是檢驗是否一致,好比說,你從網上下載一個文件,網站會給出這個文件的MD5值,經過這個MD5值來比對下載前源文件與下載後的文件是否一致。
(2)數字簽名,簡單理解就是經過MD5算法實現的簽名,做用是驗證身份。
參考連接:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
(3)密碼存儲,很好理解,就是將密碼經過MD5算法加密存儲。
SHA1加密算法會產生一個160位的消息摘要,因爲SHA1算法的雪崩效應(改變一位消息數據會使輸出值大幅度變更)與不可逆性,可用於驗證數據完整性與消息驗證。因爲對安全加密的要求性更高,後來又出現了更爲複雜的SHA224,256,384,512算法,其主要區別就是加密位數和安全性更高。
6.3.2 對稱加密
我將介紹對稱加密下面三個部分。主要介紹下實現對稱加密的命令 openssl enc。
openssl enc命令的使用能夠參考這裏:http://man.linuxde.net/openssl。
在linux系統環境下你也可使用man openssl查看openssl用法,其次你能夠經過openssl enc help查看命令選項以及參數。
對稱加密命令openssl的實踐應用(CentOS7.3實驗環境)
說明:示例爲加密/etc/fstable文件以及解密對應的文件
第一步:對/etc/fstab文件進行加密
說明:將/etc/fstab文件加密爲fstab.ciphertxt文件
第二步:對fstab.ciphertxt文件解密
說明:將fstab.ciphertxt文件解密爲當前目錄的fstab文件
第三步:測試加密文件
說明:用cat命令查看fstab.ciphertxt加密文件,出現亂碼;而查看解密的fstab文件則顯示正確信息,由此證實加密以及解密成功。
6.3.3 公鑰加密
公鑰加密特性及用途如圖所示:
有關RSA算法的介紹請戳這裏:
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
下面重點介紹RSA密鑰的生成方法
openssl genrsa的用法能夠參考:http://man.linuxde.net/openssl
在linux環境下你也可使用man openssl,其次你能夠經過openssl genrsa help查看命令選項以及參數。
私鑰公鑰生成的一次實踐
第一步:在linux環境CA中心生成私鑰
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey_new.pem 4096)
第二步:提取公鑰
6.3.4 公鑰基礎設施(pki)
PKI(Public Key Infrastructure)翻譯過來就是公鑰基礎設施,簡單理解就是利用公鑰技術對應用加密解密的基礎設施。它是一個提供安全服務的基礎設施,是CA的配置服務設置,同時也是電子商務的關鍵和基礎技術。
RA(Registration Authority)翻譯過來就是註冊受權中心。RA是證書註冊審批系統,該系統具備證書的申請、審批、下載、OCSP、LDAP等一系列功能,爲整個機構體系提供安全認證服務。
CRL(Certificate Revocation List )證書吊銷列表。當你的證書過時了,就被吊銷。這是一個由 CA 維護併發布的列出已被吊銷的證書的文檔。爲確保其完整性,CRL 是用 CA 的私鑰簽署的。
證書存取庫,即存取證書的一個庫。
X.509v3,定義了證書的結構以及認證協議標準。包括但不只限於如下內容:
版本號
序列號
簽名算法ID
發行者名稱
有效期限
主體名稱
主體公鑰
發行者的唯一標識
主體的唯一標識
擴展
發行者的簽名
6.4 OpenSSL命令
接下來詳細介紹openssl命令,重點放在命令的實踐上。
6.4.1 類型
openssl命令按照我本身的理解分爲了三種命令類型:標準命令,消息摘要命令以及加密命令。
標準命令有:enc, ca, req, genrsa等等。命令的介紹你能夠在linux系統中經過man openssl檢索關鍵字獲取。
enc負責密碼編碼與加密
ca負責證書認證管理。
req負責證書請求文件的管理。
genrsa負責生成RSA的私鑰。
下面咱們來看openssl命令的用法。
6.4.2 用法
openssl命令的應用之一是生成用戶密碼。應用工具或者你能夠稱爲命令有:
passwd, openssl passwd
paswwd是普通的加密方式,但實際上也足夠安全了。
openssl passwd採用哈希算法進行加密。
生成隨機數採用的工具是openssl rand,你能夠經過man sslrand採用命令的用法。
兩個例子
openssl rand -hex NUM
-hex表示每一個字符爲十六進制,至關於4位二進制,NUM表示隨機數的字節數,出現的字符數爲NUM的兩倍。
openssl rand -base NUM
-base表示每一個字符爲64爲64機制的字符,NUM表示隨機數的字節數,出現的字符數一樣爲爲NUM的兩倍。
linux系統上有隨機數的生成器設備
/dev/random設備:僅從熵池返回隨機數;隨機數用盡,阻塞;
/dev/urandom設備:從熵池返回隨機數;隨機數用盡,會利用軟件生成僞隨機數,非阻塞,產生的僞隨機數不安全。
那熵池的隨機數的來源從何而來,主要從這兩方面而來:
硬盤IO中斷時間間隔;
鍵盤IO中斷時間間隔;
6.4.2.4 CA介紹
CA內容介紹分爲以上四個部分。
CA(Certificate Authority)即數字證書認證機構,CA的類型有公有CA和私有CA。公有CA即公有數字證書認證機構,特色是權威安全。私有CA即私有的數字證書認證機構,私人擁有的,通常來講,安全性就有待考量了。下面咱們來創建一個私有CA來玩玩。
CA的配置文件是/etc/pki/tls/openssl.cnf,你能夠編輯配置文件對私有CA配置作出相應地修改。
建立私有CA的思路是這樣的:在CA主機上生成一個私鑰以及一個自簽證書,併爲CA提供所須要的目錄及文件。
接下來介紹創建私有CA的步驟
1.建立所須要的文件以及目錄
touch /etc/pki/CA/{serial,index.txt} 生成證書索引數據庫文件
echo 01 > /etc/pki/CA/serial 指定第一個頒發證書的序列號
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
建立證書,證書吊銷,新證書目錄
2.生成一個基於RSA算法的私鑰
cd /etc/pki/CA/
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
3. 生成自簽名的證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
參數說明
req:負責證書請求文件的管理
-new: 生成新證書籤署請求
-x509: 專用於CA生成自簽證書
-key: 生成請求時用到的私鑰文件
-days n:證書的有效期限
-out /PATH/TO/SOMECERTFILE: 證書的保存路徑
建立CA的實踐(詳細請參照上面步驟)
touch /etc/pki/CA/{serial,index.txt}
echo 01 > /etc/pki/CA/serial
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
cd /etc/pki/CA/
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
成功建立RSA私鑰
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
分別輸入你的國家,省份,城市,公司,部分,服務器地域名以及郵箱地址。這樣一個私有的CA就建立成功了。私有CA證書路徑爲/etc/pki/CA/cacert.pem,若是其餘服務器想認證這個證書只要取得這個證書文件便可。
接下來在上面實驗的基礎上再介紹一個簽署證書的示例
簽署證書的思路如上圖所示,咱們只須要按照步驟來實踐便可。
注:(本示例主要以httpd服務爲例,由於模擬創建一個基於https的站點要用到)
(1)主機A生成私鑰
mkdir /etc/httpd/ssl #建立存儲私鑰的目錄
cd /etc/pki/CA #注意:只有再CA目錄中才能生成私鑰
(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
(2) A主機生成證書籤署請求
openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
填上相應的信息,注意國家,省份,城市,公司,部門信息應該保持一致,才能合理地簽署請求。
(3) 將請求發送給CA主機B
mkdir /CA_csr #建立存儲CA簽署請求的目錄
scp /etc/httpd/ssl/httpd.csr CA主機IP:/CA_csr
(4) 在CA主機B上籤署證書
openssl ca -in /CA_csr/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
統統選擇y,表示選擇贊成簽署證書。
(5)將簽署的證書發送給須要受權的主機
scp /etc/pki/CA/certs/httpd.crt 目標主機ip:/etc/httpd/ssl/
成功將簽署的證書傳送給主機A。
(6)查看證書中的信息(CA主機B中)
openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
吊銷證書步驟
A 在客戶端獲取要吊銷的證書的serial
opensslx509 -in /PATH/FROM/CERT_FILE-noout -serial -subject
B 在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致,吊銷證書:
opensslca -revoke /etc/pki/CA/newcerts/SERIAL.pem
C 指定第一個吊銷證書的編號
注意:第一次更新證書吊銷列表前,才須要執行
echo 01 > /etc/pki/CA/crlnumber
D 更新證書吊銷列表
opensslca -gencrl-out /etc/pki/CA/crl/crl.pem
查看crl文件:
opensslcrl-in /etc/pki/CA/crl/crl.pem-noout-text