Como salvar um certificado SSL de servidor remoto localmente como um arquivo


319

Preciso fazer o download de um certificado SSL de um servidor remoto (não HTTPS, mas o handshake SSL deve ser o mesmo do Google Chrome / IE / wget e curl, todos fornecem erros de verificação de certificado) e adicionar o certificado como confiável nos laptops do Windows ' armazenamento de certificados, já que não consigo que meu pessoal de TI me dê o certificado da CA.

isso é para comunicações de escritório, então não posso realmente usar o cliente real para obter o certificado.

Como faço isso, tenho o Windows 7 e uma pilha de Linux à mão, para que qualquer linguagem de ferramenta / script seja adequada.


Para obter o certificado de um servidor de correio , consulte security.stackexchange.com/questions/70528/...
— That Guy brasileira

Provavelmente, seu navegador possui um recurso interno para isso - talvez em "ferramentas de desenvolvedor".
— nobar 22/08

Respostas:


316

Se você tiver acesso ao OpenSSL, tente

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

substituindo {HOSTNAME} e {PORT} pelos seus valores.


2
Prefiro essa opção, pois não preciso abrir uma GUI e posso fazê-lo via SSH de nossos servidores.
— bramp

2
Além disso, ele funciona para protocolos diferentes do HTTP.
— Matt

14
A solução do elec3647 automatiza totalmente a extração do PEM em um pipeline de shell.
— Phs

4
443 é a porta padrão para HTTPS.
— Flimm

4
Eu precisava da -servernameopção para obter o certificado de host virtual. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
— Artistan

240

Um método rápido para obter o certificado obtido e baixado seria executar o comando a seguir, que canaliza a saída dos -showcerts para o comando x509 ssl, que retira tudo de fora. Por exemplo:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

Para usar o certificado, com wget,

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem

5
Eu tentei isso (em outro site) - mas era esperado toda a cadeia de certs: parece que isso só trouxe de volta o primeiro da cadeia - isso é de se esperar?
— precisa saber é o seguinte

8
Isso não está funcionando para mim: não é possível carregar o certificado 27262: erro: 0906D06C: rotinas PEM: PEM_read_bio: nenhuma linha de início: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c: 648: Esperando: TRUSTED Certificado
— Janusz

4
Eu concordo com monojohnny, isso não lhe dá toda a cadeia.
— Michael Munsey

4
Tarde, mas @monojohnny: openssl s_client -showcertsexibe todos os certificados na cadeia recebida (se a conexão for bem-sucedida), mas a tubulação openssl x509passa apenas pelo primeiro e descarta o restante. Para obter todos eles, use ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'ou ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'Você também pode usar um pouco mais complicado awkpara colocar cada certificado em um arquivo separado, o que os torna mais fáceis de usar openssle com outras ferramentas.
— Dave_thompson_085

3
usando o wget parece salvar apenas um index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
— OZZIE

126

Para ser sincero, nunca tentei isso antes (nunca precisei), no entanto, tentei apenas no Firefox e parece funcionar para salvar:

  1. Clique no ícone do certificado SSL na parte superior / Cadeado na parte inferior.
  2. Clique View Certificate
  3. Clique na Detailsguia
  4. Escolha qual certificado você deseja da hierarquia [não circulado na figura]
  5. Clique Export

texto alternativo


É bom saber - mas, para minha curiosidade, você pode explicar um pouco mais o que está tentando realizar? Eu nunca precisei de exportar um certificado de cliente SSL e estou muito curioso por que você realmente tem a necessidade de fazê-lo ...
— William Hilsum

1
Esse é um certificado de servidor, não um certificado de cliente. O principal motivo para exportar uma chave privada e certificado de cliente é manter um backup ou se você deseja se autenticar usando outro navegador ou computador.
— gbroiles

@gbroiles - leia a pergunta, ele usou a terminologia errada, mas isso resolveu o seu problema.
— William Hilsum

1
certo, e eu respondi sua pergunta - por que alguém iria querer salvar um certificado de cliente? "Certificado de cliente SSL" era o seu termo, não o dele.
— gbroiles

1
Não parece que existe uma maneira de fazer isso no Chrome, certo ?!
— Fatuhoku 11/02/16

50

Exportando um certificado usando o navegador Chrome

  1. Conecte-se ao site usando SSL ( https: // tanto faz )

2. Clique no símbolo de cadeado e, em seguida, clique em Detalhes

  1. Desde a versão 56 do Chrome, faça o seguinte: vá para o menu Três pontos -> Mais ferramentas -> Ferramentas de desenvolvedor e clique na guia Segurança. Isso fornecerá uma Visão geral da segurança com o botão Exibir certificado .

  2. Clique no botão Exibir certificado .

    Uma janela modal será aberta. Tem dois painéis. O primeiro mostra a hierarquia de confiança do certificado do site (o último listado), os certificados intermediários e o certificado raiz (o mais alto).

    O segundo painel maior mostra os detalhes de um dos certificados.

    Pode haver zero ou mais certificados intermediários.

    Observe que o certificado raiz possui um ícone com borda dourada. Os outros têm uma borda azul.

    Veja a imagem abaixo.

  3. Para exportar um certificado:

    1. Primeiro, clique no ícone do certificado na hierarquia de confiança.
    2. O certificado será mostrado na parte principal do modal.
    3. Clique no ícone grande do certificado na parte principal do modal. Arraste o ícone para a área de trabalho. O Chrome copiará o certificado para sua área de trabalho.

insira a descrição da imagem aqui


1
Eu tive que arrastar o ícone para um editor de texto, a área de trabalho não funcionou para mim.
— Cory Klein

2
Para o Chrome no Windows, depois de clicar em 'Ver certificado', o modal é diferente do Mac. Clique na guia Detalhes e, em seguida, Copiar para arquivo ... Em seguida, escolha o formato e o nome do arquivo, o que é direto.
— PolyTekPatrick 30/08

1
Quando uso o Chrome v63 no Mac OS, o arquivo de texto obtido ao arrastar o certificado é legível por humanos, mas não em qualquer formato estruturado que eu possa descobrir como converter em formato legível por máquina como X.509 .crt.
— Jim DeLaHunt

nenhuma diferença se a abertura da barra de endereços ou a partir deste guia dev, e ainda não é possível baixar CRT ...
— USER25

1
Não está mais funcionando no Chrome 72.0.3626.121
— A. D'Alfonso

20

Esta é a resposta dos gbroiles , mas eu queria ressaltar que o projeto cURL tem uma página com mais alguns detalhes sobre o uso opensslpara salvar o certificado SSL do servidor remoto:

  • openssl s_client -connect {HOSTNAME}: {PORT} | tee logfile
  • Digite QUITe pressione a tecla Enter / Return.
  • O certificado será listado entre os marcadores "BEGIN CERTIFICATE" e "END CERTIFICATE".
  • Se você deseja ver os dados no certificado, pode usar:

    openssl x509 - PEM da informação - em certfile - text - out certdata

    de onde certfileé extraído o certificado logfile. Olhe dentro certdata.


Isso funcionou para mim. Para ser um pouco mais explícito, editei o arquivo de log e aparei tudo o que estava fora do BEGIN CERTIFICATE e END CERTIFICATE e salvei o resultado como certfile.pem (Não tenho certeza se a extensão era necessária).
— Michael Welch

16

automatizado

-servername era necessário para eu obter o certificado certo do host virtual em nosso servidor.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

você também pode converter para um certificado para desktop

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

última parte é adicioná-lo ao seu certs, não tenho certeza no windows
para mac keychain que eu usei, deve ser semelhante ...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer



Observe que alguns aplicativos têm problemas com as chaves do sistema e do SystemRoot (Golang, eu estou olhando para você); portanto, depois de instalar e definir a confiança para esses níveis, você também pode copiá-lo para o seu próprio usuário por login.keychainmeio do Keychain Accessaplicativo. basta procurar o certificado em System / SystemRoot e clicar e arrastá-lo para o seu loginchaveiro.
— dragon788

1
@ dragon788 - minha intenção era automatizar isso com linha de comando e isso funciona para mim. Compartilhe aqui se você encontrar uma solução para login.keychain via CLI também! obrigado!
— Artistan

a julgar pelo que li na web, acredito que apenas a omissão -ddo comando será aplicada apenas ao chaveiro do usuário em vez do chaveiro do sistema.
— dragon788

Se você também estiver adicionando um (s) certificado (s) intermediário (s), deseje usar em trustAsRootvez de trustRootpara que ele seja adicionado corretamente.
— dragon788

2

Isso fornecerá os resultados que contêm apenas os certificados

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "

0

Encontrou uma maneira muito mais fácil se no Windows. Tentei o Microsoft Edge (pré-cromo) e clicou no cadeado na barra de endereço -> Exibir certificado A caixa de diálogo é exibida com o botão "Exportar para arquivo", que o salva como um arquivo .crt.

Não usaria muito o Edge, mas era um pedaço de bolo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.