Eu encontrei a resposta. Openssl fornece isso.
openssl s_client -connect ${REMHOST}:${REMPORT}
Quero fazer o download do certificado SSL, por exemplo, link , usando wget ou qualquer outro comando. Qualquer linha de comando unix? wget ou openssl?
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.
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.
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
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.
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