1. AES 對稱加密
(1)加密方和解密方適用同一個秘鑰
(2)加密解密的速度比較快,適合數據比較長時使用
(3)秘鑰傳輸過程不安全,而且秘鑰管理也麻煩
2.RSA 非對稱加密
(1)算法強度復雜,其安全性依賴於算法與秘鑰
(2)加密解密的速度遠遠低於對稱加密算法,不適用於數據量較大的情況
(3)非對稱加密算法有兩種密鑰,其中一個是公開的,所以在密鑰傳輸上不存在安全性問題,使得其在傳輸加密數據的安全性上又高於對稱加密算法。
3. RSA + AES
SSH即利用的RSA+AES
(1)RSA被用來在會話初始化階段為通信雙方進行會話秘鑰的協商。
(2)由於非對稱加密的計算量開銷比較大,因此一旦雙方的會話秘鑰協商完成,后續的加密都將采用AES加密進行
使用tcpdump+wireshark抓包並查看ssh建聯過程如下:
SSH的實現:
(1)基於口令的認證:
第一次登錄的時候,client要對server的公鑰進行認證。(https中可以通過CA進行公正,可是SSH的publish key和private key都是自己生成的,沒法公正,只能通過Client端自己對公鑰進行確認),確認的信息提示如下
Client輸入確認輸入yes之后
該host已被確認,並被追加到文件known_hostszhong ,然后就需要輸入密碼, 進行驗證之后就登陸成功了。
(2)基於公鑰認證
口令認證,每次登陸都需要輸入密碼。基於公鑰認證,不需要輸入口令密碼,但是需要Client端手動copy public key到Server端。然后進行認證
1.生成秘鑰操作:ssh-keygen是用於生產密鑰的工具
~/.ssh中的四個文件:
-
- id_rsa:保存私鑰
- id_rsa.pub:保存公鑰
- authorized_keys:保存已授權的客戶端公鑰
- known_hosts:保存已認證的遠程主機ID
四個角色的關系
注意:一台主機可能既是Client,也是Server。所以會同事擁有authorized_keys和known_hosts
1.Client將自己的公鑰存放在Server上,追加在文件authorized_keys中。
2.Server端接受到Client端的請求后,會在authorized_keys中匹配到Client的公鑰pubkey,並生成隨機數R
用Client的公鑰對該隨機數加密得到pubKey(R),然后將加密后信息發送給Client
3.Client通過私鑰解密得到R。然后對 R 和本次會話SessionKey利用MD5生成摘要Digest1,發給Server端
4.Server端也會對R 和SessionKey利用同樣算法生成Digest1
5.Server端比對Digest1和Digest2是否相同,完成認證過程
(3)ssh工具
a.server端:sshd,端口22
b.client端:ssh user@host
c.批量執行:pssh
pssh - 在過個主機上並行運行命令
pscp - 把文件並行復制到多個主機上
prsync - 通過rsync協議吧文件高效並行復制到多個主機上
pslurp - 把文件並行地從多個遠程主機復制到中心主機上
pnuke - 並行地在多個遠程主機上殺死進行
(4)SSH和HTTPS的區別
a. SSH的原理和HTTPS差不多,都是基於TCP和非對稱加密進行的應用層協議
b. HTTPS通過數字證書和數字證書認證中心來防止中間人攻擊
SSH服務器的公鑰沒有人公正,只能通過Client人工確認Server端的公鑰指紋來確認身份
(5)總結
本文涉及到的SSH,主要指遠程登錄