安全與加密-SSL交互與握手過程 創建CA和證書管理
所以,就如現實生活中,大家都要確認某樣東西的真實性的時候,找第三方權威機構,把各自己的信息交回權威機構進行驗證後,再由權威機構公布各自需要的信息。
如下圖,CA證書機構就是用來做這事的。
既然有了第三方的權威機構頒發的證書,那麽通訊的過程也需要加密保護以便防止過程被竊取篡改。
大家都知道,HTTP 協議都是明文傳輸內容,在早期只展示靜態內容時沒有問題。伴隨著互聯網的快速發展,人們對於網絡傳輸安全性的要求也越來越高,HTTPS 協議因此出現。如下圖所示
在 HTTPS協議中封裝的加密方法其實是 SSL/TLS 協議。SSL/TLS 協議作用在 HTTP 協議之下,對於上層應用來說,原來的發送接收數據流程不變,這就很好地兼容了老的 HTTP 協議,這也是軟件開發中分層實現的體現。
SSL/TLS 握手是為了安全地協商出一份對稱加密的秘鑰
SSL交互和握手過程
單向認證:
雙向認證:
原理過程講完了,那就開始實現SSL/TLS
證書管理
名詞:
PKI :Public Key Infrastructure
包含:
CA:證書頒發機構
RA:證書註冊機構
CRL:證書吊銷列表
證書存取庫
創建私有CA
openssl的配置文件,/etc/pki/tls/openssl.cnf
找到[ ca ]設置,下面為主要選項說明。文件名是有指定要求的。
[ ca ]
default_ca = CA_default # 默認CA使用哪套配置文件
[ CA_default ] #配置文件名,以下為該套配置的設定
dir = /etc/pki/CA # 目錄
certs = $dir/certs # 簽發證書存放位置
crl_dir = $dir/crl # 存放 crl(證書吊銷列表)位置
database = $dir/index.txt # 數據庫索引文件
#unique_subject = no # 是否允許被頒發者有重復的描述信息
new_certs_dir = $dir/newcerts # 新證書的默認位置,頒發證書的時候,會copy一份到這
certificate = $dir/cacert.pem # CA自簽名證書文件
serial = $dir/serial # 存放下一個頒發證書的編號
crlnumber = $dir/crlnumber # 當前crl數量
crl = $dir/crl.pem # 證書吊銷列表文件
private_key = $dir/private/cakey.pem # CA自己的私鑰
RANDFILE = $dir/private/.rand # 私鑰隨機數文件
x509_extensions = usr_cert # The extentions to add to the cert
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
default_days = 365 # 默認證書有效期
default_crl_days= 30 # 默認crl下一次公布間隔
default_md = default # 默認使用的公鑰算法,在[req]指定
preserve = no # keep passed DN ordering
policy = policy_match #使用的策略。match為必須匹配,optional為可選,supplied需要 指定。可以參考pam章節
[ policy_match ] # 策略名,下面為設置
countryName = match #國家
stateOrProvinceName = match #省
organizationName = match #組織名
organizationalUnitName = optional #組織單位名
commonName = supplied #證書頒發給哪個域名使用。非常重要
emailAddress = optional #Email
[ req ]
default_bits = 2048 #加密長度
default_md = sha1 加密算法
1.創建所需要的文件
#cd /etc/pki/CA
生成證書索引數據庫文件
#touch /etc/pki/CA/index.txt
指定第一個頒發證書的序列號
#echo 01 > /etc/pki/CA/serial
2.創建所需要的文件
生成私鑰,如果不指定-des3 2048,在使用私鑰時不會詢問密碼
#(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048)
3.生成簽名證書
語法格式:
-new: 生成新證書簽署請求
-x509: 專用於CA生成自簽證書
-key: 生成請求時用到的私鑰文件
-days n:證書的有效期限,以天為單位
-out /PATH/TO/SOMECERTFILE: 證書的保存路徑
#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GUANGDONG
Locality Name (eg, city) [Default City]:shenzhen
Organization Name (eg, company) [Default Company Ltd]:NEO
Organizational Unit Name (eg, section) []:opt
Common Name (eg, your name or your server's hostname) []:ca.hunk.teh
Email Address []:[email protected]
查看證書命令
#openssl x509 -in /etc/pki/CA/cacert.pem -noout -text 還有很多參數,可以輸錯命令將會列出
4.在客戶端生成密鑰文件
#(umask 066;openssl genrsa -out http.key -des3 2048)
5.在客戶端生成證收請求文件
#openssl req -new -key http.key -out http.req 建議生成.req結尾的
查看請求文件命令
#openssl req -in http.req -noout -text
6.將客戶端的請求文件傳輸至CA服務器
7.在CA服務器為指定請求文件生成證書
#openssl ca -in http.req -days 730 -out http.crt
下圖為生成的證書信息
8.將生成的證書傳輸給申請者
另外,當index.txt.attr文件內容unique_subject = yes時,
申請文件中的Subject相同時,將會報以下問題,唯一性檢查
Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2
如果後面報以下錯誤,請檢查這裏的設置
error creating name index:(2,0,1)
證書狀態管理
#cat index.txt V 代表證書是有效的,R 是吊銷狀態
V 200114153136Z 01 unknown
R 200114155454Z 180114162948Z 02
#openssl ca -status 01
Using configuration from /etc/pki/tls/openssl.cnf
01=Valid (V)
吊銷證書
#openssl ca -revoke /etc/pki/CA/newcerts/02.pem
更新吊銷列表
1.創建吊銷證書的編號文件
#touch /etc/pki/CA/crlnumber
#echo 01 > /etc/pki/CA/crlnumber
2.更新證書吊銷列表
#openssl ca -gencrl -out /etc/pki/CA/crl.pem
安全與加密-SSL交互與握手過程 創建CA和證書管理