二、ssh 协议:SSH 验证协议 —— 公钥认证

在密钥交换完成后,进入 SSH 验证协议阶段。这个阶段所有数据加密传输。

所有验证请求必须使用以下消息格式。只定义了前几个域,其余的域依赖于验证方法。

byte    SSH_MSG_USERAUTH_REQUEST
string  user name,采用 ISO-10646 UTF-8 编码[RFC3629]
string  service name,采用 US-ASCII
string  method name,采用 US-ASCII
....    方法特有的域

user name: 用户名。

service name: 规定了验证完成后启动的服务。

method name: 验证方式名。

常用的验证方式有:

keyboard-interactive: 键盘交互验证。

publickey: 公钥认证。

gssapi-with-mic: gssapi 方式认证。

公钥认证方法

1. 客户端请求

客户端可先使用以下消息来询问使用 "publickey" 方法验证是否可被接受。

byte    SSH_MSG_USERAUTH_REQUEST
string  user name,采用 ISO-10646 UTF-8 编码[RFC3629]
string  service name,US-ASCII 编码
string  "publickey"
boolean FALSE
string  public key algorithm name
string  public key blob

public key algorithm name: 公钥算法名。

public key blob: 可包含证书。

2. 服务端响应

服务器必须以 SSH_MSG_USERAUTH_FAILURE 或 SSH_MSG_USERAUTH_PK_OK 进行应答。

1) 公钥算法不支持或者拒绝验证

任何公钥算法都可供用于验证。如果服务器不支持一些算法,它必须简单的拒绝请求。

如果服务器拒绝验证请求,它必须进行如下响应:

byte        SSH_MSG_USERAUTH_FAILURE
name-list   authentications that can continue
boolean     partial success

authentications that can continue: 一个逗号分隔的名称列表,包含服务器认为可用的 'method name' 值。

partial success: 如果验证请求被成功的处理了,则 'partial success' 的值必须为 TRUE,表示需要更多的验证。如果请求没有被成功处理,该值必须为 FALSE。

2) 服务端支持该验证方式

如果服务器支持该公钥算法,则发送:

byte    SSH_MSG_USERAUTH_PK_OK
string  public key algorithm name from the request
string  public key blob from the request

3. 客户端发送

要执行实际的验证,客户端可在其后发送一个用私钥生成的签名。

客户端也可直接发送签名,而不首先检验该密钥是否可接受。发送签名的数据包如下:

byte    SSH_MSG_USERAUTH_REQUEST
string  user name
string  service name
string  "publickey"
boolean TRUE
string  public key algorithm name
string  public key to be used for authentication
string  signature

'signature' 的值是使用私钥对下列数据(按下列顺序)的签名:

string  session identifier
byte    SSH_MSG_USERAUTH_REQUEST
string  user name
string  service name
string  "publickey"
boolean TRUE
string  public key algorithm name
string  public key to be used for authentication

4. 服务端响应

当服务器接收到该消息,它必须检查提供的密钥是否可接受。如果是,还必须检查签名是否正确。如果两个检查都成功,则该方法成功。

服务器也可要求进一步验证。如果不需要更多的验证, 服务器必须以 SSH_MSG_USERAUTH_SUCCESS 响应。

byte    SSH_MSG_USERAUTH_SUCCESS

如果请求失败或需要更多的验证,服务器必须以 SSH_MSG_USERAUTH_FAILURE 响应。

byte        SSH_MSG_USERAUTH_FAILURE
name-list   authentications that can continue
boolean     partial success

参考文档

http://git.oschina.net/lowkey2046/libssh/tree/master/document

转载于:https://my.oschina.net/lowkey2046/blog/711430

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值