Eu tenho um arquivo .crt do pacote de certificados.
fazendo openssl x509 -in bundle.crt -text -noout
apenas mostra o certificado raiz.
como vejo todos os outros certificados?
http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 sugere este recurso:
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
Realmente funcionou para mim, mas não entendo os detalhes, portanto não posso dizer se há alguma ressalva.
/etc/ssl/certs/ca-certificates.crt
e consegui #unable to load PKCS7 object
Java
keytool
faz o truque:Anotação: o clique duplo do Windows não funciona. O Windows lê apenas o primeiro certificado no keystore e estende automaticamente o trustchain de seu armazenamento de certificados interno.
Resultados:
.crt
arquivo não é mostrado.crt
arquivo. Isso pode levar a conclusões erradas.fonte
Após este FAQ levou-me a este script perl , o que sugere fortemente para mim que
openssl
não tem suporte nativo para lidar com o n º certificado em um pacote, e que em vez disso, deve usar alguma ferramenta para cortar-e-dice a entrada antes de alimentar cada certificado paraopenssl
. Este script perl, livremente adaptado do script de Nick Burch acima, parece fazer o trabalho:fonte
Oneliner que exibe um resumo de todos os certificados no arquivo.
(comando semelhante mencionado em outra resposta, mas isso gera uma saída mais curta, sem a opção --text).
exemplo:
fonte
Isso pode não ser bonito ou elegante, mas foi rápido e funcionou para mim usando o bash no linux e os blocos formatados pelo PEM em um arquivo de pacote CA-cert.
Você pode colocar tudo em uma linha e ajustar as opções de openssl para se adequarem. Eu realmente gostaria que houvesse uma solução mais elegante para isso, mas, neste caso, acho que encontrar a solução mais elegante levaria mais tempo do que descobrir a deselegante.
fonte
Como não há solução baseada em awk:
O primeiro comando dividiu o pacote configurável em certs, procurando as linhas BEGIN e END. O segundo comando percorre os certificados extraídos e os mostra.
fonte
No bash, geralmente é necessária apenas uma (longa) linha de código :-)
fonte
Pequena alteração na postagem do MadHatter para permitir que você copie / cole diretamente na CLI. Também incluí o hash MD5, que é útil para garantir que os certificados estejam corretos. A linha stdin retornada é o hash md5 do (s) certificado (s).
Se você quiser ver uma saída curta e concisa, use esta versão. Útil se você está apenas verificando se incluiu todo o seu certificado, mas não está realmente verificando o uso / etc do (s) certificado (s).
Apenas no caso de sua versão openssl não suportar todos esses sinalizadores, aqui está um exemplo do egrep que você pode usar. A mesma coisa que o primeiro, mas apenas use o egrep.
Para verificar o hash MD5 da chave privada, você pode fazer o seguinte.
Referência: SSL Shopper - Certificate Key Matcher
fonte
Aqui está uma solução baseada em awk que não depende de arquivos intermediários.
Ele funciona lendo blocos PEM de stdin e concatenando cada bloco para uma única linha codificada em base64. As linhas são lidas, decodificadas e passadas para openssl como certificados codificados em DER.
fonte
cat bundle.crt | awk -v cmd="openssl x509 -subject -noout" '/-----BEGIN/ { c = $0; next } c { c = c "\n" $0 } /-----END/ { print c|cmd; close(cmd); c = 0 }'
.Eu gostaria de lançar a linha de comando peri idiomática aqui:
Se houver texto, um ajuste um pouco mais robusto:
Apenas altere o valor do que n deve estar na segunda instrução para obter o enésimo certificado.
fonte
Método Windows
Uma maneira de ver toda a cadeia é (no Windows, é claro) clicar duas vezes no crt e procurar na guia Caminho da Certificação. Ele mostrará toda a cadeia, mesmo que haja apenas um certificado intermediário ou raiz. Veja a captura de tela abaixo para obter detalhes. Se você não estiver no Windows, peço desculpas pelo desconhecimento das variantes Unix / Linux.
Nota: isso pode causar resultados falsos se o certificado intermediário estiver no seu keystore local. O Windows o adicionará automaticamente e não mostrará apenas o que estava no pacote configurável.
Linux (método Ubuntu)
Eu ignorei seu comando inicial e você tem uma coisa fora de lugar. Seu comando deve ficar assim:
Fonte: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html
fonte
openssl
chamada causou um erro de sintaxe, mas que apenas listou o primeiro certificado no pacote. Em segundo lugar, as duas invocações são funcionalmente idênticas. Terceiro, e provavelmente o mais importante, o seu também não funciona, pelo menos para mim; também lista apenas o primeiro certificado no pacote.