加密解密技術基礎,PKI以及創建私有CA
-
加密算法和協議:
1.對稱加密:加密和解密使用同一個密鑰DES:Data Encryption Standard; 3DES:Triple DES; AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits) Blowfish Twofish IDEA RC6 CAST5 特性: (1)加密、解密使用同一個密鑰; (2)將原始數據分割成爲固定大小的塊,逐個進行加密; 缺陷: (1)密鑰過多; (2)密鑰分發困難;
2.公鑰加密:密鑰分爲公鑰與私鑰
公鑰:從私鑰中提取產生;可公開給所有人;pubkey 私鑰:通過工具創建,使用者自己留存,必須保證其私密性;secret key; 特點:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然; 用途: 數字簽名:主要在於讓接收方確認發送方的身份; 密鑰交換:發送方用對方公鑰加密一個對稱密鑰,併發送給對方; 數據加密 算法:RSA, DSA, ELGamal DSS: Digital Signature Standard DSA:Digital Signature Algorithm
3.單向加密:即提出數據指紋;只能加密,不能解密;
特性:定長輸出、雪崩效應; 功能:完整性; 算法: md5:Message Digest 5, 128bits sha1:Secure Hash Algorithm 1, 160bits sha224, sha256, sha384, sha512
4.密鑰交換: IKE(Internet Key Exchange)
公鑰加密 DH(Deffie-Hellman) 例如: A:p, g B:p, g A: x--> p^x%g ==> B A: (p^y%g)^x=p^yx%g B: y--> p^y%g ==> A B: (p^x%g)^y=p^xy%g
5.一次加密通信過程:
A: (1):128bit的特徵碼單向加密成數字摘要
(2):將數字摘要和原文前面加上A的私鑰
(3):將A的私鑰和特徵碼用對稱加密
(4)對稱加密前面加上B的公鑰
B:(1):B用自己的私鑰解密獲得對稱空間
(2):用對稱密鑰解密加密內容
(3):用A的公鑰單向加密生成特徵碼
(4):用此特徵碼和原來的比較是否一樣 - PKI以及SSL會話
- PKI:公鑰基礎設施
簽證機構:CA
註冊機構:RA
證書吊銷列表:CRL
證書存取庫
X.509:定義了證書的結構以及認證協議標準
版本號;序列號;簽名算法ID;發行者名稱;有效期限;主體名稱;主體公鑰;發行者的惟一標識;主體的惟一標識;擴展;發行者的簽名
2.SSL會話主要三步:
客戶端向服務器端索要並驗正證書;
雙方協商生成“會話密鑰”;
雙方採用“會話密鑰”進行加密通信;
SSL Handshake Protocol:
第一階段:ClientHello:
支持的協議版本,比如tls 1.2;
客戶端生成一個隨機數,稍後用戶生成“會話密鑰”
支持的加密算法,比如AES、3DES、RSA;
支持的壓縮算法;
第二階段:ServerHello
確認使用的加密通信協議版本,比如tls 1.2;
服務器端生成一個隨機數,稍後用於生成“會話密鑰”
確認使用的加密方法;
服務器證書;
第三階段:
驗正服務器證書,在確認無誤後取出其公鑰;(發證機構、證書完整性、證書持有者、證書有效期、吊銷列表)
發送以下信息給服務器端:
一個隨機數;
編碼變更通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送
客戶端握手結束通知;
第四階段:
收到客戶端發來的第三個隨機數pre-master-key後,計算生成本次會話所有到的“會話密鑰”;
向客戶端發送如下信息:
編碼變更通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送;
服務端握手結束通知;
- PKI:公鑰基礎設施
- 創建私有CA
1.構建私有CA:
在確定配置爲CA的服務上生成一個自簽證書,併爲CA提供所需要的目錄及文件即可步驟: (1)生成私鑰: (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) ():作用域子shell進程 (2) 生成自簽證書; openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 -new:生成新證書籤署請求; -x509:生成自籤格式證書,專用於創建私有CA時; -key:生成請求時用到的私有文件路徑; -out:生成的請求文件路徑;如果自籤操作將直接生成簽署過的證書; -days:證書的有效時長,單位是day; (3)爲CA提供所需的目錄及文件; mkdir -pv /etc/pki/CA/{certs,crl,newcerts} touch /etc/pki/CA/{serial,index.txt} echo 01 > /etc/pki/CA/serial
2.要用到證書進行安全通信的服務器,需要向CA請求籤署證書
步驟:(以nginx爲例) (1) 用到證書的主機生成私鑰; mkdir /etc/nginx/ssl cd /etc/nginx/ssl (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) (2) 生成證書籤署請求 openssl req -new -key /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.csr -days 365 (3) 將請求通過可靠方式發送給CA主機; scp /etc/nginx/ssl/nginx.csr [email protected]:/tmp/ (4) 在CA主機上籤署證書; openssl ca -in /tmp/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365 (5)查看證書中的信息: openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject [root@localhost /]# openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout - serial -subject serial=01 subject=/C=CN/ST=Shanghai/O=cern/OU=devops/CN=devops.com
3.吊銷證書:
步驟:(1) 客戶端獲取要吊銷的證書的serial(在使用證書的主機執行): openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout -serial -subject (2) CA主機吊銷證書: 先根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致; 吊銷: openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem 其中的SERIAL要換成證書真正的序列號; (3) 生成吊銷證書的吊銷編號(第一次吊銷證書時執行) echo 01 > /etc/pki/CA/crlnumber (4) 更新證書吊銷列表 openssl ca -gencrl -out thisca.crl