基本概念
SSH 传输层安全,是一个提供安全防护的协议框架,包括
- 连接协议 信息隧道复用为逻辑通道
- 用户认证协议 服务端用户身份验证
- 传输层协议,包括服务器认证,数据对称加密传输,摘要认证
SSH版本分 SSH1 和 SSH2,底层基于TCP协议,动态路由寻址
SSH服务端客户端建立连接过程:
- SSH版本号协商,服务端开启端口22监听,客户端发起TCP请求,
- 密钥、算法协商
- 服务端对客户端进行认证
- 客户端发送会话请求
- 交互会话,信息交互
涉及算法
密钥交换算法,非对称加密用于协商生成本地密钥,算法顺序 协商匹配的密钥算法可能影响协商
server host key算法
数据加密算法,对称加密,用于数据传输
摘要认证算法,数据一致性验证
三方件介绍
JSch 即JAVA secure channel,是纯JAVA的SSH2客户端实现。
Apache Mina sshd是纯JAVA的SSH1实现,支持客户端和服务端。
单就命令执行,JSch 效率比sshd高,且交互方式更简洁。
JSch 2018年后官方不再活跃,签名算法只支持SHA1无法扩展,只能侵入修改(考虑开源声明污染)
Mina-sshd 2.6.0发布,和2.5.1区别是废弃弱算法,默认不支持,但有实现类,可通过扩展ClientBuilder实现弱算法注入算法工厂类
应用场景
Stelnet 支持远程命令配置,支持设备/操作系统配置修改查询
SFTP 客户端/服务端支持安全文件传输能力
典型问题
ssh连接未释放,session和channel未close,导致线程数句柄数持续增长
算法协商过程
客户端和服务端分别通过RSA算法生成密钥对(公私钥),将公钥分别传给对方,通过数学定理保证客户端服务端分别利用自己的私钥和对方公钥生成相同的密钥。
利用密钥和对称加密算法实现对传输数据的加密。
密钥是各自生成,并没有通过传输,所以更安全。
服务器主机密钥算法、数据加密算法如AES等、摘要认证算法如SHA1等、压缩算法都是通过协商确定的,明确各自提议的算法并达成一致后,利用密钥和算法对数据进行加密传输
版权声明:本文为gujinjin2008原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。