RFC 4251 SSH协议架构
RFC 4251 SSH协议架构
RFC 4251 SSH协议架构
协议架构
SSH包含几个主要部分
- 传输层协议:提供服务认证,保证保密性和消息完整,还可用于压缩内容。
- 用户认证协议:用于实现从客户端到服务端的认证。
- 连接协议:多路复用加密通道
Host Keys
每个服务器都应该有一个Host Key。一个服务器可以拥有多个Host Key。多个服务器可以共享同一个Host Key。Host Key是用来验证客户端连接的是否是真正的服务端。客户端必须要能够验证服务器的公共Host Key。
有两种方式实现客户端服务端信任模型:
- 客户端在本地数据库存储每个host name 和对应服务器的公共Host Key,无需第三方参与。
- 客户端信任证书机构CA,所有由CA机构颁发的证书客户端都信任。
章节4.2 扩展性
章节4.3 策略问题
章节4.4 安全属性
章节4.5 本地化和字符集支持
4.2-4.5都是说的若想扩展协议需要注意的问题
数据类型定义
- byte:8位
- boolean:所有非0值翻译为true,0翻译为false
- uint32:32位无符号整型
- uint64:64位无符号整型
- string:字符串,一个uint32类型表示字符长度,后面接字符串内容。比如testing的表示形式
00 00 00 07 t e s t i n g - mpint:多精度整数(multiple precision integers )。一个uint32类型表示字符长度,后面接数字。
例子:
| value (hex) | representation (hex) |
| 0 | 00 00 00 00 |
| 9a378f9b2e332a7 | 00 00 00 08 09 a3 78 f9 b2 e3 32 a7 |
| 80 | 00 00 00 02 00 80 |
| -1234 | 00 00 00 02 ed cc |
| -deadbeef | 00 00 00 05 ff 21 52 41 11 |
- name-list:名称列表,四字节长度,然后接具体名称列表。名称之间用英文逗号隔开。
例子:
| value | representation (hex) |
| (), the empty name-list | 00 00 00 00 |
| (“zlib”) | 00 00 00 04 7a 6c 69 62 |
| (“zlib,none”) | 00 00 00 09 7a 6c 69 62 2c 6e 6f 6e 65 |