智能卡OpenSSH和PuTTY SSH


4

我正试图通过智能卡技术在CentOS 7.5机器(192.168.1.5)上进行测试。
现在我可以使用主插槽的x509证书和匹配的私钥来实现这一点,但这意味着我必须将证书的公钥放到我想要SSH的每台机器上。如果你问我,这很乏味。
因此,我想使用不同的公共/私有,特别是RSA密钥,以便我可以在将来的某个时间使用RSA证书对其进行签名,从而允许OpenSSH信任RSA证书并防止需要信任每一个智能卡的x509证书。但是现在我只想用来自智能卡的这个RSA密钥对进行SSH。


因此,我开始按照典型步骤生成密钥并将其加载到智能卡上。

  1. ssh-keygen -f gofish
  2. ssh-keygen -f gofish.pub -e -m pem
  3. ykman piv import-key 9c gofish
  4. ykman piv generate-certificate 9c gofish.pem -s 'gofish543'
  5. ssh-keygen -D [opensc-pkcs11.so] -e
  6. 将上述命令的输出放在我的目标CentOS机器上。
  7. ssh gofish543@192.168.1.5 -I [opensc-pkcs11.so]

随着一切似乎工作,我转移到Windows 10与PuTTY SSH。一切都崩溃了。使用PuTTY-CAC进行智能卡SSH身份验证,它成功地将我的智能卡信息加载到选美中,但是当我转到ssh时,它会因错误而失败...

PuTTY终端提供以下内容......

Using username "gofish543".
Authenticating with public key "CAPI:5e084cb687f0c54adf8ddd733720db48407d3195" from agent
Server refused public-key signature despite accepting key!
gofish543@192.168.1.5's password:

使用sshd错误日志显示以下内容...

debug1: matching key found: file /home/gofish543/.ssh/authorized_keys, line 1 RSA SHA256:Eor3aPxtNW6zrxLbq+1tB/urwql1CQB6EM8tFIx31+I^M
debug1: restore_uid: 0/0^M
debug3: mm_answer_keyallowed: key 0x55d310674760 is allowed^M
debug3: mm_request_send entering: type 23^M
debug3: mm_key_verify entering [preauth]^M
debug3: mm_request_send entering: type 24 [preauth]^M
debug3: mm_key_verify: waiting for MONITOR_ANS_KEYVERIFY [preauth]^M
debug3: mm_request_receive_expect entering: type 25 [preauth]^M
debug3: mm_request_receive entering [preauth]^M
debug3: mm_request_receive entering^M
debug3: monitor_read: checking request 24^M
key_verify: invalid argument^M
debug3: mm_answer_keyverify: key 0x55d310674710 signature unverified^M
debug3: mm_request_send entering: type 25^M
Failed publickey for gofish543 from 192.168.1.3 port 50051 ssh2: RSA SHA256:Eor3aPxtNW6zrxLbq+1tB/urwql1CQB6EM8tFIx31+I^M

公共,私钥认证在线上分崩离析key_verify: invalid argument。搜索此问题会产生零适用结果。我该怎么做才能解决这个问题?


作为旁注,如果我在错误日志中披露了我不应该拥有的任何内容,例如私钥或私钥信息,请知道所有这些机器都位于托管在互联网上的笔记本电脑上的内部网络上。这些密钥将在一两周内删除。

Answers:


3

我看到你正在使用Yubico设备作为PIV。但在Windows上,您使用的是PUTTY-CAC和CAPI。这意味着Windows 10内置PIV代码很可能用于访问Yubico作为PIV类型的卡。这应该工作,但它看起来返回的签名不验证。它也可能是Putty CAPI代码没有正确构建SSH答案。

看看Putty-CAC,目前还不清楚代码是否支持SHA256。最初的Windows BSP没有,只支持CALG_SHA1。之后支持CALG_SHA_256。Microsoft ALG_ID

Putty确实具有可能有用的日志记录功能。WireShark也可能有助于查看正在交换的ssh数据包。

您可能想尝试使用Putty-CAC PKCS#11接口并使用opensc-pkcs11或Yubico pkcs11模块。

在Windows 10上使用Putty-CAC(客户端协议版本2.0;客户端软件版本PuTTY_Release_0.70_4)在OpenSSH(本地版本字符串SSH-2.0-OpenSSH_7.7)上使用带有PIV小程序的Yubikey 4进行测试。我可以使用pkcs11(opensc-pkcs11.dl)但不能使用CAPI。我认为问题出在Putty-CAC cert-capi.c第68行: if (CryptCreateHash((HCRYPTPROV)hCryptProv, CALG_SHA1, 0, 0, &hHash) != FALSE && 我认为问题CALG_SHA1应该是CALG_SHA_256因为较新的OpenSSH不支持sha1签名,而是rsa-sha-256或rsa_sha-512。

我没有良好的环境设置来重建Putty-CAC。

另一个好网站是https://piv.idmanagement.gov/engineering/ssh/

请参阅Putty-CAC / Issues / 30中的错误报告

经过进一步测试,发现移除Yubico Minidriver软件包导致开始工作。驱动程序不需要,因为Windows 10具有内置的PIV卡驱动程序或带有PIV小程序的令牌。Yubico Minidriver无法处理导致MessageBox显示的内容,但是Putty-CAC没有处理错误的返回代码,并且在前面并且发送了一个伪签名错误的SSHD响应。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.