como baixar o certificado ssl de um site?

164

Quero fazer o download do certificado SSL, por exemplo, link , usando wget ou qualquer outro comando. Qualquer linha de comando unix? wget ou openssl?

    
por RainDoctor 07.05.2010 / 23:01

6 respostas

54

Eu encontrei a resposta. Openssl fornece isso.

openssl s_client -connect ${REMHOST}:${REMPORT}

    
por 07.05.2010 / 23:05
221

Para baixar o certificado, você precisa usar o cliente integrado no openssl da seguinte forma:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

Isso salvará o certificado em /tmp/$SERVERNAME.cert .

Você pode usar -showcerts se quiser baixar todos os certificados da cadeia. Mas se você quiser apenas baixar o certificado do servidor, não é necessário especificar -showcerts

echo -n dá uma resposta ao servidor, para que a conexão seja liberada

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' remove informações sobre a cadeia de certificados e detalhes de conexão. Este é o formato preferido para importar o certificado para outros keystores.

    
por 20.10.2010 / 00:59
20

A ferramenta cliente GNUTLS , gnutls-cli , também pode facilitar isso:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

O programa foi projetado para fornecer um cliente interativo ao site, portanto, é necessário fornecer uma entrada vazia (neste exemplo, de /dev/null ) para encerrar a sessão interativa.

    
por 07.10.2012 / 08:19
8

com base na resposta @bignose, aqui está uma versão independente que se encaixa bem, por exemplo uma receita de chef:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates
    
por 27.05.2014 / 11:31
6
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

este modo de openssl espera stdin, então nós fornecemos via true | , isso conecta ao servidor especificado no parâmetro -connect. 2>/dev/null silencia erros (opcional), podemos passar toda a saída para o analisador x509, especificando /dev/stdin para usar o canal do shell como o arquivo de entrada. E isso produzirá apenas a parte -----BEGIN CERTIFICATE----- to -----END CERTIFICATE----- da saída s_client . Você pode redirecionar isso para um arquivo adicionando > google.com.pem ao final do comando.

Como melhor eu posso dizer, isso não verifica a cadeia de certificados, apenas pode dizer-lhe qual a identidade SSL que o servidor final fornece.

    
por 22.02.2018 / 12:48
0

Sintaxe alternativa usando a substituição Ex e de processo:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt
    
por 12.01.2016 / 11:38