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


101

मेरे पास एक प्रमाणपत्र बंडल है .crt फ़ाइल।

कर openssl x509 -in bundle.crt -text -nooutही रूट प्रमाणपत्र को दर्शाता है।

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

जवाबों:


120

http://comments.gmane.org/gmane.comp.enc एन्क्रिप्शन. openssl.user/ 43587 इस एक-लाइनर का सुझाव देता है:

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

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


9
यह सबसे अच्छा जवाब है - मैं अपने ओवर-पाइथॉन समाधान को भी पोस्ट नहीं करूंगा! प्रत्येक प्रमाणपत्र के लिए विषय / जारीकर्ता की जानकारी प्राप्त करने के लिए "-text" को छोड़ दें।
क्रिस वुल्फ

इस पर कोशिश की /etc/ssl/certs/ca-certificates.crtऔर मिलाunable to load PKCS7 object
ऑरेंजडॉग

1
यह pkcs7 प्रारूप के लिए नहीं है, जबकि सवाल x509 प्रारूप बंडलों के बारे में है?
यतनथोरशोश

3
यह केवल मध्यवर्ती के रूप में pkcs7 का उपयोग करता है। इनपुट को PEM नाम दिया गया है।
बेनी चेर्नियाव्स्की-पास्किन

आप जबरदस्त हैं!!!
जिंगुगो याओ

21

जावा की keytoolचाल है:

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

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

परिणाम:

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

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

21

इसके बाद अक्सर पूछे जाने वाले प्रश्न मुझे इस पर्ल स्क्रिप्ट तक ले गए , जो मुझे बहुत दृढ़ता से सुझाव देता है कि एक बंडल में एन वें प्रमाणपत्र को opensslसंभालने के लिए कोई मूल समर्थन नहीं है , और इसके बजाय हमें प्रत्येक को खिलाने से पहले इनपुट को स्लाइस-एंड-डाइस के लिए कुछ टूल का उपयोग करना होगा। को प्रमाण पत्र । यह पर्च लिपि, निक बर्च की लिपि से स्वतंत्र रूप से जुड़ी हुई है, यह काम करने के लिए लगता है: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;

10

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

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

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

उदाहरण:

$ 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

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

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

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


3

चूँकि कोई 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

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


1
Awk में प्रिंट पुनर्निर्देशन सुविधा gawk और nawk में उपलब्ध है, लेकिन मूल awk में नहीं। और इसलिए, यह लिनक्स पर काम करेगा (gawk awk के रूप में जुड़ा हुआ है), लेकिन OS X पर नहीं हो सकता है जिसमें मूल awk है।
रघु डोड्डा

1

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

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

0

MadHatter की पोस्ट में छोटा-सा परिवर्तन आपको सीधे CLI में कॉपी / पेस्ट करने की अनुमति देता है। मैंने एमडी 5 हैश को भी शामिल किया, जो कि यह सुनिश्चित करने में मददगार है कि सीट्स सही हैं। स्टड लाइन लौटा दी गई है प्रमाणपत्र की md5 हैश है।

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

यदि आप एक अच्छा लघु संक्षिप्त आउटपुट देखना चाहते हैं तो आप इस संस्करण का उपयोग करें। सहायक यदि आप केवल यह जाँच रहे हैं कि आपने अपने सभी प्रमाणपत्रों को शामिल किया है, लेकिन वास्तव में प्रमाण पत्र के उपयोग / आदि की जाँच नहीं कर रहे हैं।

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

बस अगर आपका खुलता संस्करण आपके उन सभी झंडों का समर्थन नहीं करता है तो यहां कुछ उदाहरण हैं जिनका आप उपयोग कर सकते हैं। पहली वाली के रूप में एक ही बात है लेकिन सिर्फ egrep के लिए पाइप।

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

निजी कुंजी की MD5 हैश की जांच करने के लिए आप निम्नलिखित कार्य कर सकते हैं।

opensl rsa -noout -modulus -in privateKey.key | खुलता है md5

संदर्भ: एसएसएल शॉपर - प्रमाणपत्र कुंजी मिलानकर्ता


0

यहाँ एक अजीब आधारित समाधान है जो मध्यवर्ती फ़ाइलों पर निर्भर नहीं करता है।

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

यह स्टैम से पीईएम ब्लॉक को पढ़कर और प्रत्येक ब्लॉक को सिंगल बेस 64 एनकोडेड लाइन तक पहुंचाता है। लाइनों को तब पढ़ा जाता है, डीकोड किया जाता है और डीईआर एनकोडेड सर्टिफिकेट के रूप में ओपनसेल को दिया जाता है।


2
सिर्फ मनोरंजन के लिए 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 }':।
मानव

0

मैं यहां मुहावरेदार पर्ल कमांडलाइन में फेंकना चाहता हूं:

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

यदि पाठ है तो थोड़ा और अधिक मजबूत ट्वीक:

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

दूसरा प्रमाण पत्र प्राप्त करने के लिए दूसरे विवरण में क्या होना चाहिए, इसका मान बदल दें।


-2

विंडोज विधि

एक तरह से आप पूरी श्रृंखला देख सकते हैं (बेशक विंडोज में) crt को डबल क्लिक करने के लिए और फिर प्रमाणन पथ टैब पर देखें। यह पूरी श्रृंखला दिखाएगा भले ही केवल एक इंटरमीडिएट, या रूट सर्टिफिकेट हो। विवरण के लिए नीचे स्क्रीनशॉट देखें। यदि आप विंडोज पर नहीं हैं, तो मैं यूनिक्स / लिनक्स वेरिएंट के साथ अपने ज्ञान की कमी के लिए माफी माँगता हूँ।

नोट: यह गलत परिणाम दे सकता है यदि मध्यवर्ती प्रमाणपत्र आपके स्थानीय कीस्टॉर में है विंडोज इसे स्वचालित रूप से जोड़ देगा और केवल वही नहीं दिखाएगा जो बंडल में था।

                                      यहाँ छवि विवरण दर्ज करें

लिनक्स (उबंटू विधि)

मैंने आपकी प्रारंभिक आज्ञा को नजरअंदाज कर दिया और आपके पास एक चीज है। आपकी आज्ञा इस तरह दिखनी चाहिए:

openssl x509 -in bundle.crt -noout -text

स्रोत: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html


वास्तव में? मुझे पता है कि यह उदात्त है लेकिन आप वास्तव में नहीं बता सकते हैं? मेरा Opensl x509 -in बंडल है।
ब्रैड बूचार्ड

20
अपने घोड़ों को पकड़ो, ब्रैड। सबसे पहले, ओपी ने शिकायत नहीं की कि उसके opensslआह्वान में एक वाक्यविन्यास त्रुटि थी, लेकिन यह केवल बंडल में पहला प्रमाण पत्र सूचीबद्ध करता है। दूसरे, दो आह्वान कार्यात्मक रूप से समान हैं। तीसरा, और शायद सबसे महत्वपूर्ण बात, तुम्हारा काम नहीं है, या तो, कम से कम मेरे लिए; यह भी बंडल में केवल पहले प्रमाणपत्र को सूचीबद्ध करता है।
5

हाँ, मैं इस तरह के मुद्दों के लिए चीजों के उबंटू पक्ष पर नहीं हूं और सोचा कि वह विंडोज पर था जब तक कि उसने मुझे अन्यथा नहीं बताया। इसलिए मैं ओपी को लटका हुआ नहीं छोड़ना चाहता था और मैंने थोड़ी खोज करने के बाद पाया कि इन प्रकार के कमांडों के लिए एक संदर्भ साइट ने मुझे दी गई कमांड को सूचीबद्ध किया (थोड़ा अलग सिंटैक्स वाला) और यह देखना चाहता था कि क्या यह हो सकता है मदद। आपकी बातों पर ध्यान दिया जाता है, लेकिन कृपया अगली बार इसे और अधिक अनुग्रह के साथ करें।
ब्रैड बूचार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.