Como verificar se o certificado ssh foi assinado pela chave privada da CA ssh especificada?

1

Estou tentando endurecer minha configuração ssh usando este material . Funciona bem, mas eu tenho uma pergunta que estou lutando para encontrar a resposta.

Alguém sabe se existe uma maneira de verificar a assinatura do certificado de host / usuário ssh no SSH CA? Eu sei que eu posso apenas tentar ssh em host, que mantenha esse certificado de host, e se ele se conecta do que a assinatura é, obviamente, ok ... Mas estou escrevendo uma tarefa de automação e preciso de uma maneira programática para garantir que o arquivo de certificado seja assinado pela CA. Diga algum comando ssh-keygen ou qualquer outra coisa.

ATUALIZAÇÃO:

Como o @PKapp propôs:

Eu poderia comparar duas saídas: a impressão digital da CA de assinatura do certificado do lado do servidor e a impressão digital da própria autoridade de certificação

sudo ssh-keygen -L -f /etc/ssh/ssh_host_ed25519_key-cert.pub | fgrep "Signing CA" | sed 's/^[ \t]*//' | cut -d ' ' -f 4
SHA256:LkdPQLdx4tuZp7pG0g6nAJqilFd6ZzjGdgVEV9elrdA

sudo ssh-keygen -l -f /etc/ssh/id_ed25519-HostCA.pub | cut -d ' ' -f 2
SHA256:LkdPQLdx4tuZp7pG0g6nAJqilFd6ZzjGdgVEV9elrdA

Se as saídas filtradas forem idênticas, os certificados serão correspondentes ...

    
por Drew 14.05.2018 / 21:41

2 respostas

1

Para obter remotamente o (s) certificado (s) de host ssh, você pode usar ssh-keyscan -c <hostname> (sem a opção -c , você só obterá a (s) chave (s) do host). Para limitar a um tipo de certificado específico, você pode incluir -t type , usando ssh-rsa não [email protected] , se necessário.

Em seguida, você pode extrair os detalhes do certificado, incluindo a chave pública da CA de Assinatura, com ssh-keygen -L -f <certfile> . Se você usar (em minúsculas) -l , em seguida, ssh-keygen apenas exibirá as informações sobre a chave de host subjacente (pública) incorporada no certificado, em vez de todos os elementos de certificado.

    
por 14.05.2018 / 23:24
1

Eu não fui tão longe como configurar um assinado para o meu ssh interno. Mas quando eu estava fazendo isso para o imap, aprendi uma maneira simples de verificar as coisas.

Consulte o link para obter detalhes.

Basicamente, usando "openssl s_client ..." você pode obter muitos dados úteis.

por exemplo, meu ssh não assinado (sem assinatura de CA) (note - Nenhum nome de autoridade de certificação do cliente é enviado e comparado ao relatório "autoassinado" obtido do meu teste de imaps)

openssl s_client -connect x072:22
CONNECTED(00000003)
804401144:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:825:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1526335517
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

Ao conectar-se aos meus serviços imaps, vejo uma cadeia de certificados (profundidade: 0 auto-assinada).

root@x071:[/root]openssl s_client -connect x063:993
CONNECTED(00000003)
depth=0 C = NL, ST = N. Holland, L = Amsterdam, O = ROOTVG, OU = aixtools
verify error:num=18:self signed certificate
verify return:1
depth=0 C = NL, ST = N. Holland, L = Amsterdam, O = ROOTVG, OU = aixtools
verify error:num=26:unsupported certificate purpose
verify return:1
depth=0 C = NL, ST = N. Holland, L = Amsterdam, O = ROOTVG, OU = aixtools
verify return:1
---
Certificate chain
 0 s:/C=NL/ST=N. Holland/L=Amsterdam/O=ROOTVG/OU=aixtools
   i:/C=NL/ST=N. Holland/L=Amsterdam/O=ROOTVG/OU=aixtools
---
Server certificate
-----BEGIN CERTIFICATE-----
snip...

Estes diferem do uso de ssh-keygen, que eu devo pesquisar mais eu mesmo. Mas eu acho que ficarei com o openssl s_client devido a sua divisibilidade.

    
por 15.05.2018 / 00:21