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,主要指远程登录