基于FIDO2和USBKEY硬件的SSH认证

news2024/11/17 9:31:01

在 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-sk

ssh-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-sk

ssh-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.coloradmin.cn/o/1697713.html

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

相关文章

十大排序 —— 冒泡排序

十大排序 —— 冒泡排序 什么是冒泡排序基本步骤特点 优化冒泡的各项性能时间复杂度空间复杂度稳定性总结 我们今天来讲一个大家熟悉的老朋友——冒泡排序: 什么是冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,因其工作…

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型 前言 整了一个在C# Winform中调用文生图Stable Diffusion XL的小程序,基于百度智能云千帆平台 步骤 如何注册百度智能云和创建应用,获取API 密钥等和在之前的博客中基本相同&#…

单日收益1000+看了就会的项目,最新灵异短视频项目,简单好上手可放大操作

各位好友,佳哥在此与大伙儿聊聊一项神秘莫测的短视频项目。你或许会想,“又是一个视频创作项目?” 但别急,这个项目与众不同,日入千元不再是梦,而且它的易用性让人惊喜,无论你是初学者还是资深玩…

面向对象------多态

1.多态的定义 通俗来说,当同一种行为或者事情发生在不同的对象上,这些行为或者事情最终得到的结果不同。 注意:多态要发生在继承的基础上。 例如:彩色打印机和黑白打印机。 彩色打印机和黑白打印机是不同的对象,但…

兵器室管控系统|DW-306是一套成熟系统

概述 智慧兵器室管理系统(DW-S306)是依托互3D技术、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 本解决方案利用现有内部网络,部署部队智能兵器室管理系统&#xff…

Python并发编程学习记录

1、初识并发编程 1.1、串行,并行,并发 串行(serial):一个cpu上按顺序完成多个任务; 并行(parallelism):任务数小于或等于cup核数,多个任务是同时执行的; 并发(concurrency):一个…

小浪助手下载学浪视频的简单步骤

你是否想轻松下载学浪高清视频?快来尝试小浪助手,这是你不可错过的下载神器!简单几步操作,即可轻松下载你所需的学浪视频,节省时间,提高效率! 首先我已经打包好了小浪助手,有需要的…

DOS学习-目录与文件应用操作经典案例-attrib

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 DOS系统中的attrib命令是一个用于显示或更改文件&#…

内网渗透—SMB隧道正反向连接防火墙规则绕过CS上线

1、前言 这篇文章主要是说一下这个用于横向移动的SMB隧道,已经如何使用smb隧道去进行横向移动。 2、实验环境 实验环境和上一篇的差不多,主要是加了个防火墙。 windows server2012 192.168.145.131(外网) 192.168.22.134&…

【NumPy】关于numpy.flatten()函数,看这一篇文章就够了

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

头晕、心悸…你们小年轻配不上张俊杰的霸王茶姬,还要奔上市

近日,有多名网友在社交平台反映称,自己在喝了霸王茶姬的新品“万里木兰”奶茶后,出现了失眠、头晕、心悸等不同程度的不适症状,霸王茶姬方面则表示“可能是茶多酚过敏”。 而就在几天前举行的“2024年国际茶日现代东方茶创新论坛…

全局光照技术在AI去衣中的革命性角色

引言: 随着计算机视觉和深度学习技术的飞速发展,AI去衣技术已经逐渐成为图像处理和计算机图形学领域的一个热门话题。这种技术旨在通过算法模型去除或替换图像中的衣物,以服务于娱乐、电子商务、虚拟试衣等多种应用场景。而在实现高质量、真实…

getters的使用

getters的使用 如果state中的数据需要经过处理再使用,就可以利用getters函数

django在线考试系统-计算机毕业设计源码78268

摘 要 本论文主要论述了如何使用python语言、Django框架开发一个在线考试系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的&#xf…

VMware虚拟机上安装麒麟V10操作系统

一、安装VMware 在前面的文章中我有具体介绍过如何安装VMware软件,这里就不具体介绍了,需要的同学可以点下面的连接进行下载安装。 玩转Linux—如何在Linux环境中部署MySQL、Redis和nginx_linux系统mysql、redis 主备怎么做-CSDN博客文章浏览阅读1k次&a…

每日百万交易的支付系统,如何设置JVM堆内存大小?

每日百万交易的支付系统,如何设置JVM堆内存大小? 1、支付背景的引入2、支付的核心业务流程3、每日百万交易支付系统的压力在哪里?4、支付系统每秒钟需要处理多少笔支付单5、每个支付订单处理需要耗时多久6、每个支付订单大概需要多大的内存空间7、每秒发起的支付请求对内存的…

c#核心学习1

一、面向对象的概念 1.面向过程编程 2.面向对象编程 3.为什么要学习面向对象编程 提高代码复用率、提高开发效率、提高程序可拓展性、清晰的逻辑关系 4.如何学习 二、面向对象--封装 1)类和对象 1.什么是类 2.类申明在哪里 类一般声明在namespace语句块中 3.…

电商API接口(api商品数据)【电商商品实时数据采集API接口】

众多品牌选择电商API实时数据采集接口进行采购,主要是出于以下几个重要原因: 第一,高效便捷。比价工具通过自动化的方式获取价格信息,避免了繁琐的人工操作,大大节省了时间和精力。 第二,精准比较。API比价…

AIGC 003-Controlnet升级你的SD让图像生成更加可控!

AIGC 003-Controlnet升级你的SD让图像生成更加可控! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 ControlNet 论文 (Adding Conditional Control to Text-to-Image Diffusion Models) 提出了一种名为 ControlNet 的神经网络结构,旨在为大型文本到图…

IEDA常用快捷键(后续更新ing)

1. 快速生成语句 1.快速生成main()方法 psvm或者main回车 2.快速生成输出语句 sout,回车 3.快速生成for循环 fori或者itar,回车 2.快捷键 含义操作查找文本CtrlF替换文本CtrlR单行注释Ctrl/多行注释CtrlShift/格式化CtrlAltL复制当前内容至下一行CtrlD补全代码Alt/快速生成…