web-dev-qa-db-ja.com

スマートカードOpenSSHおよびPuTTY SSH

スマートカードテクノロジーを介してCentOS 7.5マシン(192.168.1.5)にSSH接続しようとしています。
これで、マスタースロットのx509証明書と一致する秘密鍵を使用してSSHでこれを実現できますが、これは、SSHを実行するすべてのマシンに証明書の公開鍵を配置する必要があることを意味します。あなたが私に尋ねるならば、それは退屈です。
そのため、別のパブリック/プライベート、具体的にはRSAキーを使用して、OpenSSHが信頼できるRSA証明書で署名できるようにします将来のある時点で 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 [email protected] -I [opensc-pkcs11.so]

すべてが機能しているように見えたので、PuTTYでSSHを実行するためにWindows 10に移動しました。これはすべてがバラバラになるときです。スマートカードのSSH認証にPuTTY-CACを使用すると、スマートカードの情報がページェントに正常に読み込まれますが、sshに移動するとエラーで失敗します...

PuTTY端末では次のように表示されます...

Using username "gofish543".
Authenticating with public key "CAPI:5e084cb687f0c54adf8ddd733720db48407d3195" from agent
Server refused public-key signature despite accepting key!
[email protected]'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。この問題を検索しても、該当する結果はゼロです。この問題を解決するにはどうすればよいですか?


4
gofish

YubicoデバイスをPIVとして使用しているようです。しかし、WindowsではPuTTY-CAC、およびCAPIを使用しています。これは、Windows 10の組み込みPIVコードがPIVタイプのカードとしてYubicoにアクセスするために使用されている可能性が最も高いことを意味します。動作するはずですが、返された署名が検証されないようです。また、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_SHA1CALG_SHA_256新しいOpenSSHは署名のsha1をサポートしていませんが、rsa-sha-256またはrsa_sha-512をサポートしています。

PuTTY-CACを再構築するための適切な環境設定がありません。

別の良いサイトは https://piv.idmanagement.gov/engineering/ssh/ です。

PuTTY-CAC/Issues/ でバグレポートを参照してください

さらなるテストの後、Yubico Minidriverパッケージを削除すると、動作が開始されることがわかりました。 Windows 10にはPIVカードまたはPIVアプレットを備えたトークン用の組み込みドライバーがあるため、ドライバーは必要ありません。 Yubico Minidriverはメッセージボックスを表示する原因となる何かを処理できませんでしたが、PuTTY-CACは不正な戻りコードを処理せず、先に不正な応答を不正な署名でSSHDに送信しました。

4
Douglas Engert