Pertanyaan Bagaimana cara melihat semua sertifikat ssl dalam satu bundel?


Saya memiliki file bundel sertifikat .crt.

perbuatan openssl x509 -in bundle.crt -text -noout hanya menunjukkan sertifikat root.

bagaimana saya melihat semua sertifikat lainnya?


76
2018-04-23 18:15






Jawaban:


http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 menyarankan satu baris ini:

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

Itu memang berhasil untuk saya, tetapi saya tidak memahami detailnya sehingga tidak bisa mengatakan jika ada peringatan.


88
2018-04-25 06:27



Ini adalah jawaban terbaik - saya bahkan tidak akan memposting solusi Python saya yang terlalu banyak membunuh! Tinggalkan "-tek" untuk mendapatkan info subjek / penerbit untuk setiap sertifikat. - Chris Wolf
Sudah mencobanya /etc/ssl/certs/ca-certificates.crt dan mendapatkan unable to load PKCS7 object - OrangeDog
Bukankah ini untuk format pkcs7, sedangkan pertanyaannya adalah tentang bundel format x509? - Yetanotherjosh
Ia hanya menggunakan pkcs7 sebagai perantara. Masukan adalah PEM yang digabungkan. - Beni Cherniavsky-Paskin
Kamu Super!!! - Jingguo Yao


Berikut FAQ ini menuntun saya untuk skrip perl ini, yang sangat kuat menyarankan saya itu openssl tidak memiliki dukungan asli untuk menangani nth sertifikat dalam satu bundel, dan sebaliknya kita harus menggunakan beberapa alat untuk memilah input sebelum memberi makan masing-masing sertifikat openssl. Skrip perl ini, yang dapat diadaptasi secara bebas dari skrip Nick Burch yang ditautkan di atas, tampaknya melakukan tugas:

#!/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 keytool apakah triknya:

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

Anotasi: DoubleClick Windows tidak berfungsi. Windows hanya membaca sertifikat pertama di keystore dan secara otomatis memperluas trustchain dari toko sertifikat yang ada di dalamnya.

Hasil:

  1. Semua di luar sertifikat pertama di .crt file tidak ditampilkan
  2. Anda mungkin mendapatkan trustchain berbeda yang ditampilkan daripada yang Anda miliki di .crt mengajukan. Ini dapat menyebabkan kesimpulan yang salah.

17
2017-09-03 07:18



Terima kasih telah mengklarifikasi hal-hal di windows. Ini benar-benar membingungkan saya - Nick.McDermaid


Ini mungkin tidak cantik, atau elegan, tetapi cepat dan bekerja untuk saya menggunakan bash di linux, dan PEM memformat blok dalam file bundel ca-cert.

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

Anda dapat meletakkannya semua satu baris, dan menyesuaikan opsi openssl yang sesuai. Saya benar-benar berharap ada solusi yang lebih elegan untuk ini, tetapi dalam kasus ini saya pikir menemukan solusi yang lebih elegan akan membutuhkan waktu lebih lama daripada meretas yang tidak hambar.


3
2017-11-09 01:08





Karena tidak ada solusi berbasis awk:

$ 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

Perintah pertama dibagi menjadi sertifikat dengan mencari BEGIN, dan garis END. Perintah kedua memutar melalui sertifikat yang diekstrak dan menunjukkannya.


3
2018-04-19 06:55



Fitur redirection cetak di awk tersedia dalam gawk dan nawk tetapi tidak dalam awk dasar. Jadi, ini akan bekerja pada Linux (gawk dihubungkan sebagai awk), tetapi mungkin tidak pada OS X yang memiliki dasar awk. - Raghu Dodda


Oneliner yang menampilkan ringkasan setiap sertifikat dalam file.

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

(komando serupa disebutkan dalam jawaban lain, tetapi ini memberikan output yang lebih pendek, tanpa opsi --text).

contoh:

$ 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



Ini membutuhkan penjelasan yang lebih baik - Sven♦


Dalam bash biasanya hanya satu (panjang) baris kode yang dibutuhkan :-)

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





Perubahan kecil ke pos MadHatter untuk memungkinkan Anda menyalin / menempel langsung ke CLI. Saya juga menyertakan MD5 hash, yang sangat membantu ketika memastikan sertifikat sudah benar. Baris stdin yang dikembalikan adalah md5 hash dari 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

Jika Anda ingin melihat hasil ringkas singkat yang bagus, Anda menggunakan versi ini. Bermanfaat jika Anda hanya memeriksa bahwa Anda telah menyertakan semua sertifikat Anda, tetapi tidak benar-benar memeriksa penggunaan / etc dari sertifikat (s).

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

Hanya dalam kasus versi openssl Anda tidak mendukung semua bendera di sini adalah beberapa egrep yang dapat Anda gunakan. Sama seperti yang pertama tetapi hanya pipa ke egrep.

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

Untuk memeriksa MD5 hash dari kunci privat Anda dapat melakukan hal berikut.

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

Referensi: Shopper SSL - Pencocokan Sertifikat Sertifikat


0
2018-02-08 09:18