Смарт-карта OpenSSH и PuTTY SSH

1235
gofish

Я пытаюсь подключиться к компьютеру CentOS 7.5 (192.168.1.5) по технологии смарт-карт.
Теперь я могу использовать SSH, используя для этого сертификат x509 главного слота с соответствующим закрытым ключом, но это означает, что я должен поместить открытый ключ сертификата на каждую машину, на которой я хочу использовать SSH. Это утомительно, если вы спросите меня.
Поэтому я хочу использовать другой публичный / частный, в частности, ключи RSA, чтобы в будущем я мог подписать их Сертификатом RSA, позволяющим OpenSSH доверять Сертификату RSA, и предотвратить необходимость доверять каждому интеллектуальному устройству. Сертификат карты x509. Но сейчас я просто хочу SSH с этой парой ключей RSA со смарт-карты.


Поэтому я начал следовать типичным шагам, чтобы сгенерировать ключи и загрузить их на смарт-карту.

  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 с SST и PuTTY. Это когда все разваливается. Используя 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. Поиск этой проблемы дает ноль применимых результатов. Что я могу сделать, чтобы решить эту проблему?


В качестве дополнительного примечания, если я обнаружу в журналах ошибок что-либо, чего не должен был бы иметь, например информацию о закрытом или закрытом ключе, я знаю, что все эти машины находятся во внутренней сети, размещенной на ноутбуке, изолированном от Интернета. И эти ключи будут удалены через неделю или две.

3

1 ответ на вопрос

2
Douglas Engert

Я вижу, вы используете устройство Yubico в качестве PIV. Но в Windows вы используете PUTTY-CAC и CAPI. Это означает, что встроенный код PIV в Windows 10, скорее всего, используется для доступа к 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) с помощью Yubikey 4 с апплетом PIV. Я могу заставить его работать с pkcs11 (opensc-pkcs11.dl), но не с CAPI. Я считаю, что проблема в строке 68 Putt-CAC cert-capi.c: 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 с неверной подписью.

Похожие вопросы