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.