基于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,一经查实,立即删除!

相关文章

MySQL中创建触发器时,语法与创建存储过程或函数的语法有所不同注意

在MySQL中创建触发器时,语法与创建存储过程或函数的语法有所不同。触发器的创建语法需要遵循特定的结构,包括指定触发器的名称、触发时机(如AFTER或BEFORE)、触发事件(如INSERT、UPDATE或DELETE)以及触发器…

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

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

TCP和UDP的区别及应用场景

区别 TCP是面向连接的传输协议,传输数据时必须建立好连接,UDP是无连接;TCP只支持一对一,UDP支持一对一、一对多、多对一、多对多等场景TCP是可靠的传输协议,传输时可保证无差错、不丢失、不重复、按序到达等&#xff…

XStream使用

简介 官网地址 http://x-stream.github.io 官网教程地址 http://x-stream.github.io/alias-tutorial.html XStream是一个简单的基于Java的类库,用来将Java对象序列化成XML(JSON) 或 反序列化为对象 (即:可以轻易的将Java对象和XML文档相互转换)。XStrea…

ES6 笔记04

01 异步函数的使用 es6推出了一种按照顺序执行的异步函数的方法 async 异步函数 async异步函数可以解决promise封装异步代码,调用时一直then链式编程时比较麻烦的问题 定义异步函数: async function 函数名(){ await 表达式1或者函数的调用1 await 表达式2或者函数的调用2 ...…

esp32-S3 使用自带的大模型,实现本地文字转语言tts

目录 CMakeLists.txt文件中: 初始化以及实际运用代码: 在partitions.csv 内存分配文件中,添加voice_data项

日志的介绍及简单实现

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

从0入门FreeRTOS之第一节 什么是FreeRTOS?

简介与基本概念 什么是FreeRTOS? FreeRTOS(Free Real-Time Operating System)是一款开源的实时操作系统(RTOS),专为嵌入式系统设计。由Real Time Engineers Ltd.开发和维护,FreeRTOS以其小巧、…

Digital Image Processing System(DIPS)

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

springAi使用教程

springAi使用教程 版本要求 环境版本号 springboot 3.2.4 java 17 springAI 0.8.1 导入依赖 1.步骤1 代码如下&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</…

给页面元素添加水印

关键步骤 初始化和配置&#xff1a; 组件接受一系列配置参数&#xff0c;如水印文本、字体、颜色、旋转角度等。这些参数用于控制水印的外观和位置。 Canvas绘图&#xff1a; 创建一个隐藏的<canvas>元素。使用Canvas API绘制水印图案&#xff0c;根据配置参数设置文…

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

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

多天线技术

多天线技术可以分为两类&#xff1a;分集技术和空间复用技术。分集技术利用多天线接收或者发射载有同一信息的信号&#xff0c;提高传输的可靠性。分集技术是将瑞利衰落无线信道换成更加稳定的信道。 发射端未知CSI时的信道容量 发射端已知CSI时的信道容量 信道估计&#xff…

基础—SQL—通用语法及分类

一、SQL的通用基本语法 &#xff08;1&#xff09;SQL语句可以单行或多行书写&#xff08;以分号结尾&#xff09;。 &#xff08;2&#xff09;在编写SQL语句的时候&#xff0c;如果长度比较长&#xff0c;我们可以允许空格/缩进来增强语句的可读性&#xff0c;而且空格或者…

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

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

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

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

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

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

mysql5.5版本安装过程

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

变电站的SCD文件

SCD文件是智能变电站配置描述文件&#xff0c;是IEC 61850标准定义的一种文件类型&#xff0c;用于描述整个变电站所有设备的信息。它包含变电站一次系统配置&#xff08;含一次、二次设备关联信息配置&#xff09;、二次设备配置&#xff08;包含信号描述、GOOSE信号连接配置&…

唠唠叨叨,每日进度

今天学了一个strcpy’的模拟实现&#xff0c;现在需要去写水课作业了&#xff0c;加油&#xff01;&#xff01;&#xff01;