Desejo fazer o download do certificado SSL de, digamos https://www.google.com , usando wget ou qualquer outro comando. Alguma linha de comando unix? wget ou openssl?
fonte
Desejo fazer o download do certificado SSL de, digamos https://www.google.com , usando wget ou qualquer outro comando. Alguma linha de comando unix? wget ou openssl?
Para fazer o download do certificado, você precisa usar o cliente incorporado ao openssl da seguinte maneira:
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 fazer o download de todos os certificados na cadeia. Mas se você deseja apenas baixar o certificado do servidor, não há necessidade de 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 da conexão. Este é o formato preferido para importar o certificado para outros keystores.
-showcerts
mostrar o certificado de servidor / folha também? Eu pensei que ele só exibia intermediários quando essa opção foi incluída.s_client
sempre mostra o certificado do servidor (se houver um, ou seja, o servidor responde ao hello e não escolhe um conjunto anônimo).-showcerts
mostra todos os certificados recebidos, o certificado do servidor primeiro e depois os intermediários e / ou raiz.Eu encontrei a resposta. Openssl fornece.
fonte
openssl x509 -text <<EOF cert-text EOF
para ver detalhes do certificadosudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem
cortesia de serverfault.com/questions/139728/…sed
hack.A ferramenta cliente GNUTLS,,
gnutls-cli
também pode facilitar isso:O programa foi projetado para fornecer um cliente interativo ao site, portanto, você precisa fornecer uma entrada vazia (neste exemplo, de
/dev/null
) para finalizar a sessão interativa.fonte
com base na resposta @bignose, aqui está uma versão independente que se encaixa bem em, por exemplo, uma receita de chef:
fonte
esse modo de openssl espera stdin, portanto, fornecemos via
true |
, isso se conecta ao servidor especificado no parâmetro -connect.2>/dev/null
silêncios (opcional), podemos passar toda a saída para o analisador x509, especificando o/dev/stdin
uso do pipe de shell como o arquivo de entrada. E que o produto será apenas o-----BEGIN CERTIFICATE-----
que-----END CERTIFICATE-----
parte das_client
saída. Você pode redirecionar isso para um arquivo adicionando> google.com.pem
ao final do comando.O melhor que posso dizer é que isso não verifica a cadeia de certificados, mas apenas a identidade SSL que o servidor final fornece.
fonte
x509
lê stdin por padrão, portanto-in /dev/stdin
é redundante (3)s_client
verifica se o certificado do servidor está corretamente conectado a uma âncora de confiança local (raiz) e não está vencido, mas você suprimiu as informações que mostrariam isso (4) NÃO verifica a revogação (5) verifica o nome no certificado do servidor apenas na versão 1.0.2 e depois não é o padrão (mas você pode verificar isso facilmente olhando o certificado )Sintaxe alternativa usando Ex e substituição de processo:
fonte