Опять C_Login failed

Система Arch
После обновления OpenSSH, libssh и pkcs11-helper всё опять сломалось. :(

$ ssh ds
Enter PIN for '***': 
C_Login failed: 164
sign_and_send_pubkey: signing failed: error in libcrypto
username@*.*.*.*: Permission denied (publickey).

Re: Опять C_Login failed

Добрый день, dini.

Для диагностики проблемы нужны версии Arch, OpenSSH, libssh, pkcs11-helper, opensc, openssl и нашей pkcs11 библиотеки

Re: Опять C_Login failed

core/libssh2 1.8.0-2 [установлен]
    A library implementing the SSH2 protocol as defined by Internet Drafts
core/openssh 7.9p1-1 [установлен]
    Premier connectivity tool for remote login with the SSH protocol
extra/libssh 0.8.4-1 [установлен]
    Library for accessing ssh client services through C libraries
core/openssl 1.1.1-1 [установлен]
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security
core/openssl-1.0 1.0.2.p-1 [установлен]
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security
core/pkcs11-helper 1.25.1-1 [установлен]
    A library that simplifies the interaction with PKCS11 providers for end-user applications using a simple API and optional OpenSSL engine
community/opensc 0.18.0-1 [установлен]
    Tools and libraries for smart cards

Дистриб сам по себе rolling, посему версия от сегодня.
librtpkcs11ecp.so пробовал из раздела загрузок и из sdk, не заработала ни та, не другая.
До обновления libssh всё работало, но случился CVE-2018-10933 и прилетело обновление, после всё и перестало работать.

Re: Опять C_Login failed

Добрый день, dini.

Судя по информации у вас установлены 2 версии openssl. Тут точно нет конфликта? Какая используется Вашим openssh?

Re: Опять C_Login failed

Конфликтов быть не должно, libcrypto.so и libssl.so ссылаются на libcrypto.so.1.0.0 и libssl.so.1.0.0 соответственно.

Re: Опять C_Login failed

Добрый день, dini.

Принято. Попробуем воспроизвести в тестировании ваш сценарий и вашу проблему. Дайте нам пару дней.

Re: Опять C_Login failed

Добрый день, dini.

Взяли ssh сервер на ubuntu, Рутокен ЭЦП, в качестве клиента Arch Linux rolling, поставили библиотеки

core/libssh2 1.8.0-2 [установлен]
core/openssh 7.9p1-1 [установлен]
extra/libssh 0.8.4-1 [установлен]
core/openssl-1.0 1.0.2.p-1 [установлен]
core/pkcs11-helper 1.25.1-1 [установлен]
community/opensc 0.18.0-1 [установлен]

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

Re: Опять C_Login failed

Всё что относится к конфигам ssh:

$ cat .ssh/config
Host *
    IdentitiesOnly yes

Host bla
    HostName    bla-bla.ru
#    RSAAuthentication yes
    IdentityFile ~/.ssh/id_rsa
    User d.klester

Host nav
    HostName    *.*.*.*
    SmartcardDevice    /usr/lib/librtpkcs11ecp.so

ControlMaster    auto
ControlPath    /tmp/ssh_mux_%h_%p_%r
ControlPersist    1h

ServerAliveInterval    60
ServerAliveCountMax    5

$ cat .bash.d/ssh_agent.sh
# SSH Agent
env=~/.ssh/agent.env

agent_is_running() {
    if [ "$SSH_AUTH_SOCK" ]; then
    # ssh-add returns:
    #   0 = agent running, has keys
    #   1 = agent running, no keys
    #   2 = agent not running
        ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
    else
        false
    fi
}

agent_has_keys() {
    ssh-add -l >/dev/null 2>&1
}

agent_load_env() {
    . "$env" >/dev/null
    [ -S ~/.ssh/ssh_auth_sock ] || ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock
    export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
}

agent_start() {
    (umask 077; ssh-agent > "$env")
    agent_load_env
}

add_all_keys() {
    # if your keys are not stored in ~/.ssh/id_rsa.pub or ~/.ssh/id_dsa.pub, you'll need
    # to paste the proper path after ssh-add
    ls ~/.ssh | grep ^id_rsa.*$ | grep -v ".pub" | sed "s:^:`echo ~`/.ssh/:" | xargs -n 1 ssh-add
}

if ! agent_is_running; then
    agent_load_env
fi

if ! agent_is_running; then
    agent_start
    add_all_keys
elif ! agent_has_keys; then
    add_all_keys
fi

echo `ssh-add -l | wc -l` SSH keys registered.

unset env

Далее:

$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Using slot 0 with a present token (0x0)
Public Key Object; RSA 2048 bits
  label:      RSA 2048
  ID:         01
  Usage:      encrypt, verify, wrap
Certificate Object; type = X.509 cert
  label:      RSA 2048
  subject:    DN: C=RU, ST=Omskaya obl., L=Omsk, O=OmskIT, OU=Admin, CN=Denis Klester/emailAddress=info@omskit.ru
  ID:         01

Но:

$ ssh nav
Enter PIN for '***': 
C_Login failed: 164
sign_and_send_pubkey: signing failed: error in libcrypto
username@*.*.*.*: Permission denied (publickey).

Re: Опять C_Login failed

В общем спасение утопающего, дело рук самого утопающего... Проблема оказалась в том, что, по какой-то причине, заблокировался пин пользователя!!! Попытался через rtadmin, но не получилось разблокировать, ну да ладно.
1. По какой причине заблокировался? Неверный ввод пина исключён по определению.
2. Почему при якобы заблокированном пользователе информацию с токена я получал? Получается под защитой пина только часть инфы? Или пин вообще для "Есть потому как должно быть"?

Re: Опять C_Login failed

Здравствуйте.

1) в opensc недавно проводили несколько чисток кода, связанных с потенциальными уязвимостями. По возможности не ставьте непротестированные версии, так как в них может быть много что не так. Думаю, проблема с заблокированным пином скорее всего связана именно с этим.
2) без ввода пин-кода пользователя можно получить список объектов не защищенных пин-кодом. Пинкодом защищаются закрытые ключи, а сертификаты лежат в открытом виде. Создать ключ, удалить ключ, подписать на ключе без знания пинкода никак не выйдет, а посмотреть открытые объекты можно. Так работают не только Рутокен но и больше все смарт-карты и токены.