基于FIDO2和USBKEY硬件的SSH认证

在 8.2(最新为 8.3)版本中,OpenSSH 提供了对 FIDO 和 UAF 的支持。从此用户就可以用硬件 USBKEY 证书进行 SSH 原生认证。这样可以实现简捷、有效和安全的 SSH 认证。本文我们就就少一下 FIDO2 以及 OpenSSH 对其的支持,并尝试一下基于 FIDO2 的 SSH 认证,前提需要一个 USB key 设备(推荐 Yubikey 5C)。

1597823597.png!small

FIDO2

在硬件认证安全领域 WebAuthn 和 FIDO2 近年来获得长足发展,它给我们带来了更便捷安全的个人认证方法。WebAuthn 和 FIDO2 旨在通过标准化二者之间的通信方式使用安全设备的变得真正容易。对每一个人来说这都是一个好消息,现在大家可以使用便捷的 USBKEY,无需额外的安全知识,就能非常便捷安全低进行个人身份验证,完全避免网络钓鱼,密码盗窃以及其他恶意攻击的行为,只需要插入 USBKEY,按下按钮,输 USBKey PIN 码(设备密码)或者刷指纹,然后安全登录。

之前很多人可能都用过银行的网银,但是由于那是不标准通用的方式,不光要安装各种各样的驱动而且还必须要特定版本的 IE 才行。而如果支持了 FIDO2 则可以被所有 OS 和任何浏览器所支持,当然包括今天要说的 SSH。截止目前根据有人统计国内也有很多企业加入了 FIDO 联盟,包括阿里、联想等大企业和飞天诚信等专门的 USBKET 设备厂商。

1597823611.png!small

FIDO2 分为 WebAuthn 和 CTAP 协议,最佳使用场景包括:

在设备上通过浏览器使用设备配置的指纹等生物识别能力进行身份认证;

在设备上通过浏览器使用外置 Security key 进行身份认证;

在设备上通过另一台设备作为认证器完成身份认证。

1597823622.png!small

结合使用 FIDO2 和 SSH

对广大使用 Linux 和 Mac 的技术人员来说,除了浏览器使用最多的要数 SSH 了。如果可以使用 FIDO2 密钥对 SSH 进行身份验证,那将带来极大的方便和安全。为此 OpenSSH 也放弃一贯对硬件密钥体系的傲慢态度,在新版本中支持了 FIDO(U2F)和 FIDO2 进行身份验证了,而带有驻留键的 FIDO2 具有更好的便捷和安全性。其认证流程是 USB 设备(FIDO2 设备不一定是 USB,但通常是 USB 设备)生成一个密钥。密钥要么存储在设备上(称为驻留密钥),要么需要设备不支持存储,需要将数据存储在其他位置。

使用 USB key 设备的好处包括消除网络钓鱼,密码盗窃,身份验证重放以及许多其他攻击。由于设备通过特定领域(服务器地址/URL/等)进行身份验证,因此攻击者无法在另一个站点上重复使用一个站点的身份验证,这使得网络钓鱼无法进行。密码或私钥存储在设备上并且无法复制提取,所以任何人都不能窃取密码或私钥。唯一可能的攻击是你的 USB Key 丢了,但是由于设备有 PIN 密码,并且有错误次数限制,尝试几次错误有,该设备将会锁定实效。

可能有用过 Yubikey 的同学,使用 SSH 内置功能好处是不需要特别使用 Yubikey,也不需要弄乱 Yubikey 代理,PIV 模式或其他任何其他软件。只需插入兼容 FIDO2 的 USBKEY,即可将其与 SSH 一起使用。注意:驻留键模式仅在 Yubikey 5C 和更高版本的 FIDO2 上有效。

使用方法

在了解了有关设备如何工作的细节之后,我们在说说如何实践使用。其实配置非常简单,基本上只需一两个命令行即可,除了需要客户端和服务器上都运行 OpenSSH 8.2,无需安装其他软件。下面我们分常驻密钥模式和非常驻模式的两种方法。

常驻密钥模式

在支持 FIDO 2 设备的下,使用以下命令生成密钥并将其存储在设备上,支持的密钥类型有"ed25519-sk"和"ecdsa-sk"两种证书类型。

ssh-keygen -t ed25519-sk -O resident -f ~/.ssh/id_ ed25519-skssh-keygen -t ed25519-sk -O resident -f ~/.ssh/id_ ecdsa-sk

SSH 会要求输入 PIN 码并触摸的设备,然后将密钥对保存在设置目录。

1597823637.png!small

ssh-keygen 将生成两个文件,一个为 id_ecdsa _sk 为私钥,一个为 id_ecdsa _sk.pub 公钥。只需要将该公钥添加到服务器上的 authorized_keys 即可中。

要将私钥添加到 SSH 代理,需要将其复制到~/.ssh/目录中,或者(如果在新计算机上并且没有密钥),可以运行

ssh-add -K

插入设备。就会将密钥添加到 SSH 代理,然后就将能够连接到服务器。

非常驻密钥模式

非驻留密钥模式与前面模式基本相同,区别之处在于无法用 ssh-add -K 直接从设备加载密钥。和前面一样,运行:

ssh-keygen -t ed25519-sk -f ~/.ssh/id_ ed25519-skssh-keygen -t ed25519-sk -f ~/.ssh/id_ ecdsa-sk

SSH 会要求输入 PIN 并触摸设备,然后将密钥对保存在设置的目录。需要手动将密钥对存储在~/.ssh/目录中,并将公钥文件添加到要登录的任何服务器上的 authorized_keys 既可。

当尝试登录时,OpenSSH 会要求提供 PIN 并触摸设备。

可以在生成密钥时候设置 no-touch-required 选项来设置不需要每次都触摸设备,但是这样的设置不是很安全。

将密钥存储在设备上意味着没有人可以窃取它(设备设置了 PIN 或其他身份验证方法),但是在连接后,不受信任的计算机仍可以通过 SSH 会话发送命令。不要从不信任的计算机上用 SSH 服务器,尤其是在使用 SSH 转发(-A 选项)时要格外小心,因为服务器随后可能会当做跳板或者代理而访问其他服务器。

非 FIDO2 设备和非 openSSH 8.2 客户端

对于不支持 FIDO2 的其他设备(买不起 Yubikey,比如几十块的国产飞天 USBkey),在使用其他 ssh 客户端,而且 ssh 版本不是 8.2 的其实也有一种方法,只是需要下载一个第三方的代理软件 WinCryptSSHAgent(github:/ /buptczq/WinCryptSSHAgent)。

WinCryptSSHAgent 基于 Windows 证书管理系统, 不需要安装任何驱动就能够访问智能卡上的证书. 这个项目实现了 Windows 上各种各样 SSH 客户端的私有 Agent 协议, 在发生 SSH 认证时, 客户端将信息发给这个 Agent, 这个 Agent 会通过 Windows 提供的 API 对信息进行签名, 完成认证。目前兼容的 SSH 客户端有: Git for Windows、Windows Subsystem for Linux、Windows OpenSSH、Putty、Jetbrains、SecureCRT、Xshell、Cygwin、MINGW 等。

启动该代理软件,然后就可以实现用 USBKey 登陆了。

当然使用该代理软件有个缺点,启动代理认证,完成一次认证后,支持该证书登陆服务器都可以直接登陆,这可会存在一定安全问题。可以通过定期关闭代理以保证安全。

1597823649.png!small

总结

总的来说,OpenSSH 对 FIDO 的支持给我们带来了一种更便捷而且安全的身份认证方式。当然由于这是一个开始,可能还会存在着一些问题和 bug,希望各种 SSH 客户端软件也能及时跟进,内置支持该协议,让大家安全水平都提高一个档次。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

 大厂面试题

 

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ 

读者福利 |CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击) 

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件】

调试笔记-系列文章目录 调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件 文章目录 调试笔记-系列文章目录调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件 前言一、调试环境操作系统:Ubuntu 22.04.4 LTS编译环境调试目标 二、调…

日志的介绍及简单实现

个人主页:Lei宝啊 愿所有美好如期而遇 目录 日志是什么? 为什么需要日志? 实现一个简单日志 时间戳 clock_gettime time & localtime 可变模板参数(使用C语言),va_start & va_end & vsprintf 宏 __LINE__…

Digital Image Processing System(DIPS)

数字图像处理系统 Digital Image Processing System(DIPS) 早前版本: ​​​​​​​DIPS_YTPC OCR-CSDN博客

数据结构和算法|排序算法系列(二)|冒泡排序

首先需要你对排序算法的评价维度和一个理想排序算法应该是什么样的有一个基本的认知: 《Hello算法之排序算法》 主要内容来自:Hello算法11.3 冒泡排序 我觉得冒泡排序非常有意思,也非常简单,就是不停地交换相邻的元素即可&#…

ElasticSearch插件版本与ES版本不对应的解决方案

一、背景 最近需要给es安装ik、hanlp分词器和ingest-attachment管道,服务器已有的es版本为8.5.3(似乎太新了),hanlp和ingest-attachment都没有这么高的版本,因此只能下载相对老的版本,然后自己修改配置文件…

安全设计 | 安全设计不得马虎!微软STRIDE威胁建模方法让你事半功倍,快速发现应用安全隐患!

STRIDE威胁建模方法最早发表于2006年11月的《MSDN杂志》,作者是微软的工程师Shawn Hernan、Scott Lambert 、Tomasz Ostwald 和 Adam Shostack。那我们为什么要进行威胁建模? 如何使用数据流图对系统进行威胁建模?如何减轻威胁?接…

java项目之桂林旅游景点导游平台源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的桂林旅游景点导游平台。 项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 桂林旅游景点导游…

mysql5.5版本安装过程

mysql是关系型数据库的管理系统 将安装包放在 c盘根目录 名称为mysql 在该路径下cmd进入命令执行窗口 出现此页面说明安装成功 需要修改配置文件内容 将my-medium.ini 复制粘贴并改名为 my.ini 并添加如下内容 改好之后在mysql目录下cmd进入命令执行窗口 切换到cd bin …

Java实现图书系统

首先实现一个图书管理系统,我们要知道有哪些元素? 1.用户分成为管理员和普通用户 2.书:书架 书 3.操作的是: 书架 目录 第一步:建包 第二步:搭建框架 首先:完成book中的方法 其次:完成BookList 然后:完成管理员界面和普通用户界面 最后:Main 第三步:细分方法 1.退…

Spring—Spring配置文件概念及应用(实现一个图形验证码)

文章目录 配置文件配置文件作用配置文件的格式配置文件优先级说明配置文件书写代码的格式yml文件代码的格式 Value注解 properties 缺点分析properties VS yml实现一个验证码程序 配置文件 配置文件作用 整个项目的重要信息我们都会配置在配置文件中,比如说我们数…

视频拼接融合产品的产品与架构设计(四)分布式GPU运算合并单元

上一篇如下 视频拼接融合产品的产品与架构设计(三)内存和显存单元数据迁移 视频合并单元说明 对下面这张图做些说明,视频接入是比较常见,可以说是普通,但是做到接入后随即进行比较重的算法运算,这个在视频领域并不多…

软件项目详细设计说明书实际项目参考(word原件下载及全套软件资料包)

系统详细设计说明书案例(直接套用) 1.系统总体设计 2.性能设计 3.系统功能模块详细设计 4.数据库设计 5.接口设计 6.系统出错处理设计 7.系统处理规定 软件开发全文档下载(下面链接或者本文末个人名片直接获取):软件开发全套资料-…

C++ 常用UI库

AWTK github gitee doc scons 类似RT-Thread element github C Cross platfrom C GUI libraries,QT可替代方案。调试包 SDL GUI cegui 创作不易, 小小的支持一下吧!

泛型...

定义&#xff1a;在编译过程中约束操作的数据类型。&#xff08;统一数据类型&#xff09; 格式&#xff1a;<数据类型> 泛型中不能写基本数据类型。 泛型类 在一个类中&#xff0c;某个变量的数据类型不确定时&#xff0c;可以定义带有泛型的类。 泛型的底层是Obje…

电量计量芯片HLW8110的前端电路设计与误差分析校正.pdf 下载

电量计量芯片HLW8110的前端电路设计与误差分析校正.pdf 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1vlCtC3LGFMzYpSUUDY-tEg 提取码&#xff1a;8110

十四天学会Vue——Vue核心(理论+实战)(第一天)上篇

&#xff01;&#xff01;&#xff01;声明必看&#xff1a;由于本篇开始就写了Vue&#xff0c;内容过多&#xff0c;本篇部分内容还有待完善&#xff0c;小编先去将连续更新的js高阶第四天完成~本篇部分待完善内容明日更新 一、Vue核心&#xff08;上篇&#xff09; 热身top…

vue3+electron+typescript 项目安装、打包、多平台踩坑记录

环境说明 这里的测试如果没有其他特别说明的&#xff0c;就是在win10/i7环境&#xff0c;64位 创建项目 vite官方是直接支持创建electron项目的&#xff0c;所以&#xff0c;这里就简单很多了。我们已经不需要向开始那样自己去慢慢搭建 yarn create vite这里使用yarn创建&a…

外企也半夜发布上线吗?

0 别把问题想得太复杂 如果有灰度发布的能力&#xff0c;最好白天发布&#xff1b;如果没有灰度发布&#xff0c;只能在半夜发布。 即使有灰度发布能力&#xff0c;也不要沾沾自喜&#xff0c;好好反思一下你们的灰度发布是否真的经得起考验&#xff0c;还是仅仅是装装样子。…

golang创建式设计模式---工厂模式

创建式设计模式—工厂模式 目录导航 创建式设计模式---工厂模式1)什么是工厂模式2)使用场景3)实现方式4)实践案例5)优缺点分析 1)什么是工厂模式 工厂模式(Factory Method Pattern)是一种设计模式&#xff0c;旨在创建对象时&#xff0c;将对象的创建与使用进行分离。通过定义…

深度学习中的多GPU训练(Pytorch 20)

一 多GPU训练 下面详细介绍如何从零开始并行地训练网络&#xff0c;这里需要运用小批量随机梯度下降算法。后面我还讲介绍如何使用高级API并行训练网络。 我们从一个简单的计算机视觉问题和一个稍稍过时的网络开始。这个网络有多个卷积层和汇聚层&#xff0c;最后可能 有几个…