सवाल एक बंडल में सभी एसएसएल प्रमाण पत्र कैसे देखें?


मेरे पास प्रमाण पत्र बंडल है। सीआरटी फ़ाइल।

करते हुए openssl x509 -in bundle.crt -text -noout केवल रूट प्रमाणपत्र दिखाता है।

मैं अन्य सभी प्रमाणपत्र कैसे देखूं?


76
2018-04-23 18:15


मूल




जवाब:


http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 यह एक लाइनर सुझाता है:

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

यह वास्तव में मेरे लिए काम करता था, लेकिन मुझे विवरण समझ में नहीं आता है, इसलिए अगर कोई चेतावनी नहीं है तो यह नहीं कह सकता है।


88
2018-04-25 06:27



यह सबसे अच्छा जवाब है - मैं अपने ओवर-किल पायथन समाधान को भी पोस्ट नहीं करूंगा! प्रत्येक प्रमाणपत्र के लिए विषय / जारीकर्ता जानकारी प्राप्त करने के लिए "-text" को छोड़ दें। - Chris Wolf
इसे आजमाया /etc/ssl/certs/ca-certificates.crt और मिला unable to load PKCS7 object - OrangeDog
यह pkcs7 प्रारूप के लिए नहीं है, जबकि सवाल x509 प्रारूप बंडलों के बारे में है? - Yetanotherjosh
यह केवल मध्यवर्ती के रूप में pkcs7 का उपयोग करता है। इनपुट पीईएम समेकित है। - Beni Cherniavsky-Paskin
आप जबरदस्त हैं!!! - Jingguo Yao


निम्नलिखित यह अकसर किये गए सवाल मुझे नेतृत्व किया यह पर्ल स्क्रिप्ट, जो मुझे दृढ़ता से सुझाव देता है कि openssl हैंडलिंग के लिए कोई मूल समर्थन नहीं है nवें एक बंडल में प्रमाणपत्र, और इसके बजाय हमें प्रत्येक प्रमाणपत्र को खिलाने से पहले इनपुट को स्लाइस-एंड-डाइस करने के लिए कुछ टूल का उपयोग करना होगा openssl। उपरोक्त लिंक निक निकच की लिपि से स्वतंत्र रूप से अनुकूलित यह पर्ल स्क्रिप्ट, नौकरी करने लगता है:

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





जावा के keytool उसने चाल चली:

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

एनोटेशन: विंडोज डबलक्लिक काम नहीं करता है। विंडोज कुंजीस्टोर में केवल पहला प्रमाण पत्र पढ़ता है और स्वचालित रूप से अपने अंतर्निहित प्रमाणपत्र स्टोर से ट्रस्टचेन को बढ़ाता है।

परिणाम:

  1. पहले प्रमाण पत्र से परे सभी .crt फ़ाइल नहीं दिखायी गयी है
  2. आपके पास एक अलग ट्रस्टचेन प्रदर्शित हो सकता है जो आपके पास है .crt फ़ाइल। इससे गलत निष्कर्ष निकल सकते हैं।

17
2017-09-03 07:18



खिड़कियों की चीज को स्पष्ट करने के लिए धन्यवाद। यह वास्तव में मेरे बाहर नरक भ्रमित कर रहा था - Nick.McDermaid


यह सुंदर, या सुरुचिपूर्ण नहीं हो सकता है, लेकिन यह जल्दी था और लिनक्स पर बैश का उपयोग करके मेरे लिए काम किया, और पीईएम एक सीए-प्रमाणपत्र बंडल फ़ाइल में प्रारूपित ब्लॉक।

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

आप इसे सभी एक पंक्ति डाल सकते हैं, और सूट के लिए openssl विकल्पों को समायोजित कर सकते हैं। मैं वास्तव में चाहता हूं कि इसके लिए एक और अधिक शानदार समाधान हो, लेकिन इस मामले में मुझे लगता है कि अधिक सुरुचिपूर्ण समाधान खोजने से सुरुचिपूर्ण व्यक्ति को हैकिंग करने में अधिक समय लगेगा।


3
2017-11-09 01:08





चूंकि कोई अजीब समाधान नहीं है:

$ 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

BEGIN, और END लाइनों की तलाश करके पहला कमांड बर्टल को कर्ट में विभाजित करता है। दूसरा आदेश निकाले गए certs के माध्यम से loops और उन्हें दिखाता है।


3
2018-04-19 06:55



अजीब में प्रिंट पुनर्निर्देशन सुविधा गॉक और नॉक में उपलब्ध है लेकिन बुनियादी अजीब में नहीं है। और इसलिए, यह लिनक्स पर काम करेगा (गॉक अजीब के रूप में जुड़ा हुआ है), लेकिन ओएस एक्स पर नहीं हो सकता है जिसमें मूल अजीब है। - Raghu Dodda


ऑनलाइनर जो फ़ाइल में प्रत्येक प्रमाणपत्र का सारांश प्रदर्शित करता है।

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

(इसी तरह के कमांडो ने दूसरे उत्तर में उल्लेख किया है, लेकिन यह --text विकल्प के बिना, कम आउटपुट देता है)।

उदाहरण:

$ 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



इसे बेहतर स्पष्टीकरण की आवश्यकता है - Sven♦


बैश में आमतौर पर कोड की केवल एक (लंबी) रेखा की आवश्यकता होती है :-)

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