私有云安全加固:使用Canokey为你的SSH上一把锁

发布于 / Linux / 0 条评论

传统SSH登录方式使用密码登录,尽管设置一个高强度的密码已经足够安全,但是来自公网上不间断的弱密码爆破还是让我很头疼

自签一个证书,仅允许私钥登录SSH,可以让大多数扫描器望而却步,极大提高安全性。但是在某些场景,这种登录也存在局限性:

  • 私钥保存到硬盘中容易被其他软件窃取

  • 私钥保存到U盘中不仅容易被计算机病毒窃取,还容易在不知情的情况下被物理导出

  • 当遇到某些“极特殊情况”,某些人会威逼利诱你交出私钥

Canokey可以解决这些问题,并极大程度上保障SSH的安全。

Canokey简介

Yubikey是一种用于身份验证的USB安全密钥,形似U盘,功能和“网银U盾”类似

image.png

该设备可以实现无密码登录(FIDO2)、密钥管理、OpenPGP签名等功能,存入内部的密钥无法导出,签名操作全在设备内部进行,具有较高的安全性。

Canokey和Yubikey类似,是一种硬件密钥,但是Canokey是国产开源密钥,集成了FIDO2/OTP/OpenPGP/PIV等功能,基本可以平替Yubikey,售价只有Yubikey的一半不到,感兴趣的小伙伴可以支持一波:https://item.taobao.com/item.htm?id=664914723920(无偿广告)

使用Canokey可以加固SSH,保管BitLocker密钥,给Bitwarden等密码管理软件添加一把硬件锁。同时,国外很多网站(微软、推特、amazon等)都支持使用Canokey实现二次验证,保障账户安全

存储在Canokey中的私钥无法导出,签名操作全部在Canokey的芯片中进行,不存在私钥泄露的问题

使用Canokey PIV登录SSH

创建自签证书

方法1:使用openssl签发

找个有openssl的机器,使用如下命令创建公私钥对

cd /tmp
openssl genrsa -out root.key 2048
openssl req -new -out root-req.csr -key root.key -keyform PEM
openssl x509 -req -in root-req.csr -out root-cert.cer -signkey root.key -CAcreateserial -days 3650

此时你的/tmp目录下应该有了root.key和root-cert.cer两个文件,前者为私钥文件,后者为证书文件,将其下载到Windows计算机上。

接着安装Yubico PIV Tool。我下载的是2.4.2版本。

安装后执行如下操作,将刚刚生成的证书和私钥导入canokey:

yubico-piv-tool -r canokeys -a set-ccc 
yubico-piv-tool -r canokeys -a set-chuid
yubico-piv-tool -r canokeys -a import-certificate -s 9a -i root-cert.cer
yubico-piv-tool -r canokeys -a import-key -s 9a -i root.key

出现了successfully字样说明导入成功。

注意:key文件务必彻底删除,并对其存储介质进行多次擦写,保证私钥文件无法还原。如果条件允许,上述所有操作可以全部在Linux的内存盘中进行

方法2:使用canokey内部程序签发

直接登录CanoKey Web Console,验证PIN后点击create key即可完成签发。注意Algorithm选RSA-2048,避免后续踩坑

image.png

至此,无论采用那种方式,在PIV管理页面上看您的canokey应该包含了一张证书(如上图,显示You have a certificate in this slot.)

从你的计算机上移除canokey,再重新插入,系统会自动从CanoKey中读取并安装你导入的证书。为了验证是否成功,可以按下win+r,输入certmsg.msc打开证书管理器,依次进入证书-当前用户 - 个人 - 证书,如果能看到你刚刚签发的证书,说明成功,可以进行下一步

image.png

SSH客户端配置

首先下载WincryptSSHAgent:GitHub - buptczq/WinCryptSSHAgent: Using a Yubikey for SSH Authentication on Windows Seamlessly。这个软件是一个Agent,用来为SSH和智能卡搭建桥梁,SSH服务器在请求签名时,SSH客户端会先将其转发给AgentAgent会将服务器的公钥与CanoKey中证书的公钥进行比对,如果相同,则会要求用户使用CanoKey签名,以完成SSH登录。

这个软件可以放到 C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 目录下,实现开机自动启动。

软件启动后,托盘会有它的图标,右键,点击show public keys,会显示CanoKeys上的公钥。

image.png

在Linux服务器上的~/.ssh/下创建一个名为authorized_keys的文件,将上面的公钥复制进去,保存。

编辑服务器的/etc/ssh/sshd_config,添加或修改如下配置:

PermitRootLogin yes
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes

重启sshd服务,断开连接

提示:在确认整个配置成功前不要轻易把PasswordAuthentication设为no,避免配置错误导致自己无法登录服务器

SSH客户端配置

确保WincryptSSHAgent已经运行,打开你的SSH客户端(我的是MobaXterm),编辑SSH连接,将“允许通过SSH agent进行身份验证”打钩

image.png

接着在Settings-Configuration-SSH设置中启用外部Pageant

image.png

保存SSH配置,重新连接SSH服务器,会弹出智能卡认证页面

image.png

插入CanoKey,即可通过验证,成功登录SSH

最后不要忘记把/etc/ssh/sshd_config中的PasswordAuthentication改为no~

转载原创文章请注明,转载自: 斐斐のBlog » 私有云安全加固:使用Canokey为你的SSH上一把锁
目前还没有评论,快来抢沙发吧~