Tüm ssl sertifikalarını bir pakette nasıl görebilirim?


101

Bir sertifika paketi .crt dosyam var.

yapıyor openssl x509 -in bundle.crt -text -nooutyalnızca kök sertifikasını göstermektedir.

diğer tüm sertifikaları nasıl görebilirim?

Yanıtlar:


120

http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 bu bir astarı önerir:

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

Gerçekten benim için çalıştı, ancak ayrıntıları anlamıyorum, bu yüzden herhangi bir uyarı varsa söyleyemem.


9
Bu en iyi cevap - aşırı öldürülmüş Python çözümümü bile göndermeyeceğim! Her sertifika için yalnızca konu / düzenleyici bilgisini almak üzere "-text" yi bırakın.
Chris Wolf

Üzerinde denedim /etc/ssl/certs/ca-certificates.crtve gotunable to load PKCS7 object
OrangeDog

1
Bu soru pkcs7 formatı için değil, soru ise x509 format demetleri hakkında mı?
Yetanotherjosh

3
Yalnızca ara olarak pkcs7'yi kullanır. Giriş birleştirildi PEM.
Beni Cherniavsky-Paskin

Süpersin!!!
Jingguo Yao,

21

Java keytoolhile yapar:

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

Ek Açıklama: Windows doubleclick çalışmıyor. Windows, anahtar deposundaki yalnızca ilk sertifikayı okur ve güven zincirini yerleşik sertifika deposundan otomatik olarak genişletir.

Sonuçlar:

  1. .crtDosyadaki ilk sertifikanın ötesinde gösterilmez
  2. Görüntülenen dosyadan daha farklı bir güven zinciri alabilirsiniz .crt. Bu yanlış sonuçlara yol açabilir.

Windows olayını açıkladığın için teşekkürler. Bu beni gerçekten
şaşırtıyordu

21

Aşağıdaki bu SSS götürdü bu perl programı çok güçlü bir şekilde bana önerir opensslişlemek için yerleşik desteğe sahip n inci bir paket içinde sertifikası ve bunun yerine her beslemeden önce giriş-ve-zar dilim bazı aracı kullanmak gerekir Sertifikamıza openssl. Nick Burch'un yukarıda bağlanmış olan senaryosundan serbestçe adapte olan bu perl betiği işi yapıyor gibi görünüyor:

#!/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;

10

Dosyadaki her sertifikanın bir özetini gösteren Oneliner.

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

(başka bir cevapta bahsedilen benzer komando, ancak bu - metin seçeneği olmadan daha kısa çıktı verir).

örnek:

$ 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

Bunun daha iyi açıklamalara ihtiyacı var
Sven

3

Bu hoş ya da zarif olmayabilir, ancak linux üzerinde bash ve PEM formatlı bir blok dosyasında blokları kullanarak benim için hızlı ve çalıştı.

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

Hepsini bir satır koyabilir ve openssl seçeneklerini uygun şekilde ayarlayabilirsiniz. Keşke bunun için daha zarif bir çözüm olsaydı, ama bu durumda daha şık çözümü bulmanın, inelegant'ı kesmekten daha fazla zaman alacağını düşünüyorum.


3

Awk tabanlı bir çözüm olmadığından:

$ 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

İlk komut, BEGIN ve END satırlarını arayarak paketi certs içine dağıtır. İkinci komut, çıkarılan cerların arasından geçer ve bunları gösterir.


1
Awk içindeki yazdırma yeniden yönlendirme özelliği gawk ve nawk'ta mevcuttur, ancak temel awk'de yoktur. Ve bu yüzden, bu Linux üzerinde işe yarayacaktı (gawk awk olarak bağlandı), fakat temel awk olan OS X'te olmayabilir.
Raghu Dodda

1

Bash'de genellikle sadece bir (uzun) kod satırı gerekir :-)

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

0

Doğrudan CLI'ya kopyala / yapıştır yapmanıza olanak tanımak için MadHatter'ın gönderisinde küçük bir değişiklik. Ayrıca, cerlerin doğru olduğundan emin olunmasında yardımcı olan MD5 karma değerini de ekledim. Dönen stdin çizgisi, sertifikaların md5 karmasıdır.

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

Kısa ve özlü bir çıktı görmek istiyorsanız bu sürümü kullanın. Yalnızca tüm sertifikanızı eklediğinizi kontrol ediyorsanız, ancak sertifikanın / kullanımların gerçekten kontrol edilmediğini kontrol ediyorsanız faydalıdır.

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

Openssl sürümünüzün tüm bu bayrakları desteklememesi durumunda, kullanabileceğiniz bazı egreplerdir. İlkiyle aynı şey, ama sadece egrep'e yönelt.

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

Özel anahtarın MD5 karma değerini kontrol etmek için aşağıdakileri yapabilirsiniz.

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

Referans: SSL Shopper - Sertifika Anahtar Eşleştiricisi


0

İşte orta düzey dosyalara dayanmayan awk tabanlı bir çözüm.

cat bundle.crt | awk '{
  if ($0 == "-----BEGIN CERTIFICATE-----") cert=""
  else if ($0 == "-----END CERTIFICATE-----") print cert
  else cert=cert$0
}' | while read CERT; do
  echo "$CERT" | base64 -d | openssl x509 -inform DER -text -noout
done

PEM bloklarını stdin'den okuyarak ve her bloğu tek base64 kodlu satıra birleştirerek çalışır. Daha sonra satırlar okunur, kodu çözülür ve DER kodlu sertifikalar olarak openssl'ye iletilir.


2
Sadece eğlence için: 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 }'.
Manav

0

Buradaki deyimsel perl komut satırına bakmak istiyorum:

  perl -ne "\$n++ if /BEGIN/; print if \$n == 1;" mysite.pem

Metin varsa, o zaman biraz daha sağlam bir ince ayar:

 perl -ne "\$n++ if /^-----BEGIN CERTIFICATE-----\$/; print if \$n == 3 && /^-----BEGIN CERTIFICATE-----\$/.../^-----END CERTIFICATE-----\$/;" mysite.pem

Nnth sertifikasını almak için ikinci ifadede n değerinin değerini değiştirmeniz yeterlidir.


-2

Windows Yöntemi

Zincirin tamamını görebilmenizin bir yolu (elbette Windows'ta) crt'ye çift tıklayıp Sertifika Yolu sekmesine bakmaktır. Sadece Orta veya Kök Sertifika olsa bile tüm zinciri gösterecektir. Ayrıntılar için aşağıdaki ekran görüntüsüne bakın. Windows'da değilseniz, Unix / Linux değişkenleri konusundaki bilgi eksikliğinden dolayı özür dilerim.

Not: Bu, ara sertifika yerel anahtar deponuzdaysa yanlış sonuçlara neden olabilir, Windows bunu otomatik olarak ekler ve yalnızca pakette ne olduğunu göstermez.

                                      görüntü tanımını buraya girin

Linux (Ubuntu Yöntemi)

İlk emrini gözden kaçırdım ve senin de bir şeyin yok. Komutunuz şöyle görünmeli:

openssl x509 -in bundle.crt -noout -text

Kaynak: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html


Gerçekten mi? Bunun yüce olduğunu biliyorum ama gerçekten söyleyemiyor musun? Benim openssl x509 -in paket içinde.
Brad Bouchard

20
Atlarını tut, Brad. Öncelikle, OP onun başvurusunun opensslbir sözdizimi hatası verdiğinden şikayet etmedi , ancak yalnızca paketteki ilk sertifikayı listelediğinden şikayet etti . İkincisi, iki çağrı işlevsel olarak aynıdır. Üçüncüsü ve muhtemelen en önemlisi, sizinki de, en azından benim için çalışmıyor; o da, paketteki yalnızca ilk sertifikayı listeler.
MadHatter

Evet, bunun gibi şeylerin Ubuntu tarafındaki kadar değilim ve bana başka türlü söyleyene kadar Windows'da olduğunu sanıyordum. Bu yüzden OP'yi asılı bırakmak istemedim ve küçük bir arama yaptıktan sonra, bu tür komutlar için bir referans sitesinin kendisine verilen komutu listelediğini gördüm (biraz farklı sözdizimine sahip olan) ve yapıp yapamayacağını görmek istedim. Yardım. Puanlarınız ele alındı, ama lütfen bir dahaki sefere daha fazla lütufla yapın.
Brad Bouchard
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.