Cartão inteligente OpenSSH e PuTTY SSH

3

Eu estou tentando ssh em uma máquina CentOS 7.5 (192.168.1.5) através da tecnologia de cartão inteligente.
Agora posso usar o SSH usando o certificado x509 do slot master com a chave privada correspondente para fazer isso, mas isso significa que devo colocar a chave pública do certificado em cada máquina em que desejo SSH. Isso é tedioso se você me perguntar.
Portanto, eu quero usar um público / privado diferente, especificamente chaves RSA, para que eu possa, em algum momento no futuro , assiná-las com um certificado RSA permitindo que o OpenSSH confie no Certificado RSA e evite a necessidade de confiar no certificado x509 de cada cartão inteligente. Mas por enquanto eu só quero SSH com este par de chaves RSA do cartão inteligente.

Por isso, comecei a seguir os passos típicos para gerar chaves e carregá-las em um cartão inteligente.

  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. Colocou a saída do comando acima na minha máquina alvo do CentOS.
  7. ssh [email protected] -I [opensc-pkcs11.so]

Como tudo parece estar funcionando, mudei para o Windows 10 para SSH com o PuTTY. É quando tudo desmorona. Usando o PuTTY-CAC para autenticação SSH de cartão inteligente, ele carrega com êxito as informações do cartão inteligente no concurso, mas quando vou para o ssh ele falha com o erro ...

O terminal

PuTTY apresenta o seguinte ...

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

Com o log de erros do sshd mostrando o seguinte ...

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

A autenticação de chave pública, privada, desmorona na linha key_verify: invalid argument . Procurando por este problema produz resultados aplicáveis zero. O que posso fazer para corrigir este problema?

Como uma observação, se eu revelar qualquer coisa nos logs de erro que eu não deveria ter, como uma chave privada ou informações de chave privada, saiba que todas essas máquinas estão em uma rede interna hospedada em um laptop isolado da Internet. E essas chaves serão deletadas em uma semana ou duas.     
por gofish 15.06.2018 / 21:13

1 resposta

2

Vejo que você está usando um dispositivo Yubico como um PIV. Mas no Windows você está usando o PUTTY-CAC e o CAPI. Isso significa que o código PIV interno do Windows 10 provavelmente está sendo usado para acessar o Yubico como uma placa do tipo PIV. Isso deve funcionar, mas parece que a assinatura retornada não verifica. Também pode ser o código CAPI do Putty não está construindo a resposta SSH corretamente.

Olhando para o Putty-CAC , não está claro se o código suporta SHA256. O original do Windows BSP não, apenas suportando CALG_SHA1. CALG_SHA_256 foi suportado posteriormente. ALG_ID da Microsoft

O Putty tem um recurso de registro que pode ser útil. O WireShark também pode ser útil para ver os pacotes ssh sendo trocados.

Você pode tentar usar a interface Putty-CAC PKCS # 11 e usar os módulos opensc-pkcs11 ou Yubico pkcs11.

Após testar no Windows 10 com Putty-CAC (versão de protocolo de cliente 2.0; versão de software cliente PuTTY_Release_0.70_4) para OpenSSH (cadeia de versão local SSH-2.0-OpenSSH_7.7) Com um Yubikey 4 com applet PIV. Eu posso fazê-lo funcionar com pkcs11 (opensc-pkcs11.dl), mas não com o CAPI. Eu acredito que o problema está na linha 68 da Putty-CAC cert-capi.c: %código% Eu acredito que o problema é if (CryptCreateHash((HCRYPTPROV)hCryptProv, CALG_SHA1, 0, 0, &hHash) != FALSE && deve ser CALG_SHA1 Como o OpenSSH mais novo não suporta sha1 para assinaturas, mas sim rsa-sha-256 ou rsa_sha-512.

Eu não tenho uma boa configuração de ambiente para reconstruir o Putty-CAC.

Outro bom site é o link

Veja o relatório de erros em Putty-CAC / Issues / 30

Após mais testes, descobriu-se que a remoção do pacote Yubico Minidriver fazia com que as coisas começassem a funcionar. O driver não é necessário porque o Windows 10 possui um driver interno para cartões PIV ou tokens com um applet PIV. O Minidriver de Yubico não pôde manipular algo causando a exibição de um MessageBox, mas o Putty-CAC não manipulou os códigos de retorno inválidos e quando adiantou e enviou uma resposta falsa ao SSHD com uma assinatura inválida.

    
por 21.07.2018 / 18:03