SSL中文名稱安全套接層是爲網絡通訊提供安全及數據完整性的一種安全協議。其繼任者爲TLS中文名稱傳輸層安全。SSL和TLS在傳輸層對網絡鏈接進行加密。linux
加密主要是保密性,完整性和可用性這個三個方面。保密性包括數據保密性,隱私性;完整性包括數據完整性,系統完整性算法
加密算法和協議有對稱加密,公鑰加密,單向加密,認證協議shell
對稱加密:加密和解密使用同一個密鑰;常見的算法有DES,3DES,AES,Blowfish等安全
特性:網絡
1、加密、解密使用同一個密鑰;併發
2、將原始數據分割成固定大小的塊,逐個進行加密;ide
缺陷:工具
1、密鑰過多;加密
2、密鑰分發;spa
公鑰加密:密鑰是成對兒出現
公鑰:公開給全部人;pubkey
私鑰:本身留存,必須保證其私密性;secret key
特色:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然;
功能:
數字簽名:主要在於讓接收方確認發送方身份;
密鑰交換:發送方用對方的公鑰加密一個對稱密鑰,併發送給對方;
數據加密:
算法:RSA, DSA,ELGamal
單向加密:只能解密,不能解密;提取數據指紋;常見的算法:md5,sha1,sha256等
如今常見的加密過程是上面所述的全部加密協議
例如:兩個主機之間進行通訊,首先使用單向加密算法,提取文件數據的特徵碼,而後用本身的私鑰加密這段特徵碼,而後附加在文件的後面,而後用對稱密鑰把全部的數據進行加密,而後再用對方的公鑰加密這個私鑰附加在文件後面,而後對方收到後進行層層解密。但這個公鑰交換很重要,這就得由第三方認證機構來作。
第三方機構對一方進行認證簽名,而後兩方開始通訊前,一方先把簽證發給另外一方,而後另外一方去認證機構去驗證簽名的可信度,若是沒問題,就驗證經過了,這個簽名裏包含對方的公鑰,這就實現了公鑰的交換。
可是你要拿到第三方機構的公鑰,才能解密對方的簽名,如何肯定這就是第三方的公鑰,這就須要PKI來實現。
PKI:
簽證機構CA
註冊機構:RA
證書吊銷列表:CRL
證書存取庫
目前證書的標準規範爲X.509
X.509:定義了證書的結構以及認證協議標準
版本號
序列號
簽名算法ID
發行者名稱
有效期限
主體名稱
主體公鑰
發行者唯一標識
主體的唯一標識
擴展
發行者簽名
OpenSSL是linux下的SSL實現的軟件,主要包含三個組件:
openssl:多用途的命令行工具;libcrypto:公共加密庫;libssl:庫,實現ssl及tls
openssl命令:包含三類標準命令、消息摘要命令、加密命令;具體用法,不詳細介紹了,主要用的有如下幾個:
生成隨機數:
openssl rand -base64|-hex NUM
NUM: 表示字節數;-hex時,每一個字符4位,出現的字符數爲NUM*2;
生成密鑰對兒:
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
例: (umask077; openssl genrsa -out key.pri 2048)這個命令是在子shell中使用umask077讓其餘用戶沒有權限查看,而後建立一對密鑰,
提取出公鑰:
openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout
創建私有CA:
工具: OpenCA openssl
證書申請及簽署步驟:
1、生成申請請求;
2、RA覈驗;
3、CA簽署;
4、獲取證書;
下面以openssl建立私有CA,以及證書的申請與請求,
openssl的配置文件在:/etc/pki/tls/openssl.cnf按須要進行修改,或者不修改也行
配置文件裏,這一段包含了CA的配置,dir這一行定義了CA的工做目錄等等,能夠看#後面的註釋,來查看本行是定義什麼的
(1) 建立所須要的文件且給序列號是送一個數字
touch index.txt
echo 01 > serial
(2) CA自簽證書
首先建立密鑰,而後給本身前一個證書
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.epm -days 7300 -out /etc/pki/CA/cacert.pem
-new: 生成新證書籤署請求;
-x509: 專用於CA生成自簽證書;
-key: 生成請求時用到的私鑰文件;
-days n:證書的有效期限;
-out /PATH/TO/SOMECERTFILE: 證書的保存路徑;
這樣本身的證書就作好了,就能夠給別人頒發證書了
(3) 發證
(a) 用到證書的主機生成證書請求;
# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
(b) 把請求文件傳輸給CA;
(c) CA簽署證書,並將證書發還給請求者;
openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
查看證書中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-serial