Vraag Hoe bekijk ik alle SSL-certificaten in een bundel?


Ik heb een certificaatbundel .crt-bestand.

aan het doen openssl x509 -in bundle.crt -text -noout toont alleen het rootcertificaat.

hoe zie ik alle andere certificaten?


76
2018-04-23 18:15


oorsprong




antwoorden:


http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 suggereert deze one-liner:

openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout

Het werkte inderdaad voor mij, maar ik begrijp de details niet en kan dus niet zeggen of er enige restricties zijn.


88
2018-04-25 06:27



Dit is het beste antwoord - ik zal zelfs mijn over-kill Python-oplossing niet plaatsen! Laat de "-tekst" achterwege om alleen onderwerp / issuerinfo voor elk certificaat te krijgen. - Chris Wolf
Ik heb het geprobeerd /etc/ssl/certs/ca-certificates.crt en kreeg unable to load PKCS7 object - OrangeDog
Is dit niet voor pkcs7-formaat, terwijl de vraag gaat over x509-formaatbundels? - Yetanotherjosh
Het gebruikt alleen pkcs7 als tussenproduct. Invoer is aaneengeschakeld PEM. - Beni Cherniavsky-Paskin
Jij bent super!!! - Jingguo Yao


Volgend op deze veelgestelde vragen leidde me naar dit perl-script, wat mij heel sterk suggereert openssl heeft geen systeemeigen ondersteuning voor het gebruik van de nth certificaat in een bundel, en dat in plaats daarvan we een tool moeten gebruiken om de invoer te slicen en te dobbelen alvorens elk certificaat aan te voeren openssl. Dit perl-script, vrij aangepast van het bovenstaande script van Nick Burch, lijkt de klus te klaren:

#!/usr/bin/perl
# script for splitting multi-cert input into individual certs
# Artistic Licence
#
# v0.0.1         Nick Burch <nick@tirian.magd.ox.ac.uk>
# v0.0.2         Tom Yates <tyates@gatekeeper.ltd.uk>
#

$filename = shift;
unless($filename) {
  die("You must specify a cert file.\n");
}
open INP, "<$filename" or die("Unable to load \"$filename\"\n");

$thisfile = "";

while(<INP>) {
   $thisfile .= $_;
   if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
      print "Found a complete certificate:\n";
      print `echo \'$thisfile\' | openssl x509 -noout -text`;
      $thisfile = "";
   }
}
close INP;

20
2018-03-27 13:29





Java's keytool doet het:

keytool -printcert -v -file <certs.crt>

annotatie: Dubbelklikken met Windows werkt niet. Windows leest alleen het eerste certificaat in de keystore en breidt de trustchain automatisch uit van het ingebouwde certificaatarchief.

resultaten:

  1. Alles voorbij het eerste certificaat in de .crt bestand wordt niet getoond
  2. Mogelijk krijg je een andere trustchain weergegeven dan je hebt in de .crt het dossier. Dit kan tot verkeerde conclusies leiden.

17
2017-09-03 07:18



Bedankt voor het verduidelijken van het Windows-ding. Dit verwarde me echt helemaal - Nick.McDermaid


Dit is misschien niet mooi of elegant, maar het was snel en werkte voor me met bash op linux en PEM-geformatteerde blokken in een ca-cert-bundelbestand.

while read line
do
    if [ "${line//END}" != "$line" ]; then
        txt="$txt$line\n"
        printf -- "$txt" | openssl x509 -subject -issuer -noout
        txt=""
    else
        txt="$txt$line\n"
    fi
done < /path/to/bundle/file

Je kunt alles op één regel zetten en de openssl-opties aanpassen. Ik zou echt willen dat er een elegantere oplossing voor was, maar in dit geval denk ik dat het vinden van de elegantere oplossing meer tijd zou hebben gekost dan het uithakken van de onelegante oplossing.


3
2017-11-09 01:08





Aangezien er geen op awk gebaseerde oplossing is:

$ cat ca-bundle | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > i ".extracted.crt" }'
$ ls *.extracted.crt | while read cert; do openssl x509 -in $cert -text -noout; done

De eerste opdracht splitst een bundel in certs door te zoeken naar BEGIN- en END-regels. De tweede opdracht doorloopt de uitgepakte certs en toont ze.


3
2018-04-19 06:55



De printomleiding in awk is beschikbaar in gawk en nawk maar niet in basic awk. En zo zou dit werken op Linux (gawk is gekoppeld als awk), maar misschien niet op OS X met een basisfout. - Raghu Dodda


Oneliner die een samenvatting van elk certificaat in het bestand toont.

openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -noout

(vergelijkbaar commando vermeld in ander antwoord, maar dit geeft een kortere output, zonder de optie --text).

voorbeeld:

$ openssl crl2pkcs7 -nocrl -certfile bundled.crt | openssl pkcs7 -print_certs -noout

subject=/C=NL/postalCode=5705 CN/L=City/street=Example 20/O=Foobar B.V./OU=ICT/OU=Wildcard SSL/CN=*.example.com
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA

subject=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority

subject=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
issuer=/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Roo

3
2017-09-23 09:21



Dit heeft betere uitleg nodig - Sven♦


In bash is meestal slechts één (lange) regel code nodig :-)

tfile=$( mktemp -u ) && \
csplit -z -q -f "$tfile" bundle.crt  '/----BEGIN CERTIFICATE-----/' '{*}' && \
find "${tfile%/*}" -name "${tfile##*/}*" -exec openssl x509 -noout -subject -in "{}" \; -delete

1
2017-10-23 00:59





Kleine wijziging in de post van MadHatter zodat u rechtstreeks naar de CLI kunt kopiëren en plakken. Ik heb ook de MD5-hash opgenomen, wat handig is als je ervoor zorgt dat de certificaten correct zijn. De geretourneerde stdin-regel is de md5-hash van de cert (s).

perl -e 'my $thisfile = "";
foreach (<>) {
   $thisfile .= $_;
   if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
      print "Found a complete certificate:\n";
      print `echo "$thisfile" | openssl x509 -noout -text`;
      print `echo "$thisfile" | openssl x509 -noout -modulus | openssl md5`;
      $thisfile = "";
   }
}' < my_id_cert_and_ca_bundle.crt

Als je een mooie korte beknopte output wilt zien, gebruik je deze versie. Handig als je alleen maar controleert of je al je cert hebt opgenomen, maar niet echt het gebruik / etc van de cert (s) controleert.

perl -e 'my $thisfile = "";
foreach (<>) {
   $thisfile .= $_;
   if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
      print "Found a complete certificate:\n";
      print `echo "$thisfile" | openssl x509 -noout -serial -subject -dates -alias -issuer`;
      print `echo "$thisfile" | openssl x509 -noout -modulus | openssl md5` . "\n";
      $thisfile = "";
   }
}' < my_id_cert_and_ca_bundle.crt

Voor het geval dat uw openssl-versie niet alle vlaggen ondersteunt, is hier wat egrep dat u kunt gebruiken. Hetzelfde als de eerste, maar gewoon pijp naar egrep.

perl -e '.....
' < my_id_cert_and_ca_bundle.crt | egrep "Serial|Subject:|Not |Public-Key|^Cert|stdin|ssuer"

Om de MD5-hash van de privésleutel te controleren, kunt u het volgende doen.

openssl rsa -noout -modulus -in privateKey.key | openssl md5

Referentie: SSL Shopper - Certificaat Key Matcher


0
2018-02-08 09:18