简介
本文档介绍在安全外壳(SSH)协商期间的数据包级别交换。
先决条件
要求
思科建议您了解基本的安全概念:
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
SSH 协议
SSH协议是一种从一台计算机到另一台计算机的安全远程登录方法。SSH应用基于客户端 — 服务器架构,将SSH客户端实例连接到SSH服务器。
SSH交换
1. SSH的第一步称为 Identification String Exchange
.
1.1.客户端构建数据包并将其发送到服务器,其中包含:
客户端协议版本和软件版本
1.2.服务器使用其自己的标识字符串交换进行响应,包括其SSH协议版本和软件版本。
服务器协议版本和软件版本
2.下一步是Algorithm Negotiation.
在本步骤中,客户端和服务器协商以下算法:
- 密钥交换
- 加密
- 基于散列的消息身份验证代码(HMAC)
- 压缩
2.1.客户端向服务器发送密钥交换Init消息,指定其支持的算法。算法按优先顺序列出。
客户端密钥交换初始化
客户端支持的算法
2.2.服务器使用其自己的密钥交换Init消息进行响应,列出其支持的算法。
2.3.由于这些报文同时交换,双方会比较各自的算法列表。如果两端所支持的算法中存在匹配项,则它们将继续执行下一步。如果没有完全匹配项,服务器将从客户端列表中选择其也支持的第一个算法。
注意:如果客户端和服务器无法就通用算法达成一致,密钥交换将失败。
服务器密钥交换初始化
3.然后,双方进入使用DH密钥交Key Exchang
e
换生成共享密钥的阶段,并对服务器进行身份验证:
3.1.客户端生成密钥对Public and Private,
,并在Diffie-Hellman组交换初始数据包中发送DH公钥。此密钥对用于计算密钥。
客户端Diffie-Hellman组交换初始化
3.2.服务器生成自己的密钥Public and Private k
对,使用客户端的公钥和自己的密钥对计算共享密钥。
3.3.服务器还使用以下输入计算Exchange散列:
- 客户端标识字符串
- 服务器标识字符串
- 客户端密钥交换初始的负载
- 服务器密钥交换初始的负载
- 来自主机密钥的服务器公钥(RSA密钥对)
- 客户端DH公钥
- 服务器DH公钥
- 共享密钥
3.4.计算散列后,服务器使用其RSA私钥对其进行签名。
3.5.服务器构建一条消息Diffie-Hellman Group Exchange,其中包括:
- RSA服务器公钥(帮助客户端对服务器进行身份验证)
- 服务器的DH公钥(用于计算共享密钥)
- HASH(验证服务器并证明服务器已生成共享密钥,因为密钥是哈希计算的一部分)
服务器Diffie-Hellman组交换应答
3.6.在收到Diffie-Hellman组交换应答后,客户端以相同方式计算哈希值,并将其与收到的哈希值进行比较,然后使用服务器的RSA公钥对其进行解密。
3.7.在解密收到的HASH之前,客户端必须验证服务器的公钥。此验证通过证书颁发机构(CA)签名的数字证书完成。 如果证书不存在,则由客户端决定是否接受服务器的公钥。
注意:首次使用SSH登录不使用数字证书的设备时,可能会出现弹出窗口,要求您手动接受服务器的公钥。为了避免每次连接时都出现此弹出窗口,您可以选择将服务器的主机密钥添加到缓存。
服务器公钥
4.由于共享密钥现在已生成,因此两端都使用它来派生以下密钥:
- 加密密钥
- IV密钥 — 这些随机数用作对称算法的输入,以提高安全性。
- 完整性密钥
密钥交换的结束通过消息交换来发出信NEW KEYS
号,该消息会通知每一方,未来的所有消息都使用这些新密钥进行加密和保护。
客户端和服务器新密钥
5.最后一步是服务请求。客户端向服务器发送SSH服务请求数据包,以启动用户身份验证。服务器以SSH Service Accept(SSH服务接受)消息做出响应,提示客户端登录。此交换通过已建立的安全通道进行。
相关信息