1.SSL原理
Secure Sockets Layer(安全的套接字層)位於TCP/IP協議與各種應用層協議之間,爲數據通訊提供安全支持。用於保障在Internet上數據傳輸之安全,利用數據加密技術,可確保數據在網絡上之傳輸過程中不會被截取及竊聽。
2.SSL的會話過程
SSL會話主要分爲三步:
1.客戶端向服務器端索要並驗正證書;
2.雙方協商生成“會話密鑰”;對成密鑰
3.雙方採用“會話密鑰”進行加密通信;
3.加密算法和協議
3.1 對稱加密
加密和解密使用同一個密鑰
常見的加密算法:
DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5
特性:
1、加密、解密使用同一個密鑰;
2、將原始數據分割成爲固定大小的塊,逐個進行加密;
缺陷:
1、密鑰過多;
2、密鑰分發困難;
3.2 公鑰加密
密鑰分爲公鑰與私鑰
公鑰:從私鑰中提取產生;可公開給所有人;
私鑰:通過工具創建,使用者自己留存,必須保證其私密性;
特點:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然;
用途:
數字簽名:主要在於讓接收方確認發送方的身份;
密鑰交換:發送方用對方公鑰加密一個對稱密鑰,併發送給對方;
數據加密:
3.3 單向加密
提取數據指紋(特徵碼);只能加密,不能解密;
常見算法:md5、sha1
特性:定長輸出、雪崩效應;
功能:完整性;
3.4 密鑰交換
IKE(Internet Key Exchange互聯網密鑰交換)
1.公鑰加密
2.DH(Deffie-Hellman地獄男爵)
4.PKI
PKI是Public Key Infrastructure的首字母縮寫,翻譯過來就是公鑰基礎設施;PKI是一種遵循標準的利用公鑰加密技術爲電子商務的開展提供一套安全基礎平臺的技術和規範
公鑰基礎設施主要包含以下四個:
簽證機構:CA
註冊機構:RA
證書吊銷列表:CRL
證書存取庫
5.openssl命令
openssl有衆多子命令,基本可分爲三類:
1.標準命令
2.消息摘要命令(dgst子命令)
3.加密命令(enc子命令)
5.1 對稱加密
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext 解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
5.2 單向加密
~]# openssl dgst -md5 /PATH/TO/SOMEFILE
5.3 生成用戶密碼
~]# openssl passwd -1 -salt $(openssl rand -hex 5)
5.4 生成隨機數
~]# openssl rand -hex NUM ~]# openssl rand -base64 NUM
5.5 公鑰加密
生成私鑰:~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS) 提取公鑰:~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
6.構建私有CA
1.在CA的服務器上生成私鑰
[root@ch sysroot]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2.生成自簽證書
[root@ch sysroot]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365 Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:CH Organizational Unit Name (eg, section) []:Ops Common Name (eg, your name or your server's hostname) []:ch Email Address []:
3.爲CA提供所需的目錄及文件
[root@ch sysroot]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts} [root@ch sysroot]# touch /etc/pki/CA/{serial,index.txt} [root@ch sysroot]# echo 01 > /etc/pki/CA/serial
以上步驟是在CA服務器端操作
http服務器向CA請求籤署證書
a.主機生成私鑰
[root@localhost ~]# mkdir /etc/httpd/ssl [root@localhost ~]# cd /etc/httpd/ssl [root@localhost ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 1028)
b.生成證書籤署請求
[root@localhost ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:CH Organizational Unit Name (eg, section) []:Ops Common Name (eg, your name or your server's hostname) []:www.test.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
c.將請求通過可靠方式發送給CA服務器
[root@localhost ssl]# scp httpd.csr [email protected]:/tmp/
以上操作是在http服務器端操作
4.在CA主機上籤署證書
[root@ch tmp]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Mar 26 04:17:02 2016 GMT Not After : Mar 26 04:17:02 2017 GMT Subject: countryName = CN stateOrProvinceName = Beijing organizationName = CH organizationalUnitName = Ops commonName = www.test.com Certificate is to be certified until Mar 26 04:17:02 2017 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated
5.查看證書中的信息
[root@ch tmp]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject serial=01 subject= /C=CN/ST=Beijing/O=CH/OU=Ops/CN=www.test.com
如果http服務的私鑰丟了,這個時候我們需要吊銷證書
(a).客戶端獲取要吊銷的證書的serial
[root@localhost ssl]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject serial=01 subject= /C=CN/ST=Beijing/O=CH/OU=Ops/CN=CH
(2).CA服務器根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致
[root@ch tmp]# cd /etc/pki/CA/ [root@ch CA]# cat index.txt V 170326041702Z 01 unknown /C=CN/ST=Beijing/O=CH/OU=Ops/CN=www.test.com
(3).CA服務器吊銷證書
[root@ch CA]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem Using configuration from /etc/pki/tls/openssl.cnf Revoking Certificate 01. Data Base Updated
(4).生成吊銷證書的吊銷編號(僅在第一次吊銷證書時執行)
[root@ch CA]# echo 01 > /etc/pki/CA/crlnumber
(5).更新證書吊銷列表
[root@ch CA]# openssl ca -gencrl -out /etc/pki/CA/httpd.crl
查看crl文件
[root@ch CA]# openssl crl -in httpd.crl -noout -text