当前位置: 首页 > news >正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在密钥交换完成后,进入 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

相关文章:

  • 安装程序时出现2502 2503错误解决方法
  • html5配合css3实现带提示文字的输入框(摆脱js)
  • AWS EC2 Run Command特性新增多重云脚本
  • 京东区域表整理
  • ubuntu下安装jdk
  • linux内核升级图文攻略
  • android adb指令
  • 【转】mysql的cardinality异常,导致索引不可用
  • jquery如何判断滚动条滚到页面底部并执行事件
  • ios 用户相册
  • [android] 练习PopupWindow实现对话框
  • %@ page import=%的用法
  • Windows平台下Git服务器搭建
  • Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决
  • mysql 配置参考
  • iOS编译提示和导航提示
  • Java 多线程编程之:notify 和 wait 用法
  • java8 Stream Pipelines 浅析
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • LintCode 31. partitionArray 数组划分
  • SAP云平台里Global Account和Sub Account的关系
  • Shell编程
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 高性能JavaScript阅读简记(三)
  • 机器学习中为什么要做归一化normalization
  • 如何利用MongoDB打造TOP榜小程序
  • 消息队列系列二(IOT中消息队列的应用)
  • 译有关态射的一切
  • 阿里云服务器购买完整流程
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (9)STL算法之逆转旋转
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)插入排序
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .cfg\.dat\.mak(持续补充)
  • .htaccess配置常用技巧
  • .net Application的目录
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET中统一的存储过程调用方法(收藏)
  • :“Failed to access IIS metabase”解决方法
  • @AliasFor注解
  • @GetMapping和@RequestMapping的区别
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [ARC066F]Contest with Drinks Hard
  • [HJ56 完全数计算]
  • [HOW TO]如何在iPhone应用程序中发送邮件
  • [JavaScript]_[初级]_[关于forin或for...in循环语句的用法]
  • [Loadrunner参数化]一个文件输两列参数的取值