जवाबों:
http://comments.gmane.org/gmane.comp.enc एन्क्रिप्शन. openssl.user/ 43587 इस एक-लाइनर का सुझाव देता है:
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
यह वास्तव में मेरे लिए काम करता है, लेकिन मुझे विवरण समझ में नहीं आता है, अगर कोई भी चेतावनी नहीं दे सकता है।
/etc/ssl/certs/ca-certificates.crt
और मिलाunable to load PKCS7 object
जावा की keytool
चाल है:
keytool -printcert -v -file <certs.crt>
एनोटेशन: विंडोज डबलक्लिक काम नहीं करता है। विंडोज केवल कीस्टॉर में पहला प्रमाण पत्र पढ़ता है और स्वचालित रूप से अपने निर्मित प्रमाणपत्र स्टोर से ट्रस्टचैन को निकालता है।
परिणाम:
.crt
फ़ाइल में पहले प्रमाण पत्र से परे सभी नहीं दिखाए गए हैं.crt
फ़ाइल में आपके द्वारा प्रदर्शित एक अलग ट्रस्टचैन मिल सकता है । इससे गलत निष्कर्ष निकल सकते हैं।इसके बाद अक्सर पूछे जाने वाले प्रश्न मुझे इस पर्ल स्क्रिप्ट तक ले गए , जो मुझे बहुत दृढ़ता से सुझाव देता है कि एक बंडल में एन वें प्रमाणपत्र को 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;
ऑनलाइनर जो फ़ाइल में प्रत्येक प्रमाण पत्र का सारांश प्रदर्शित करता है।
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
यह सुंदर या सुरुचिपूर्ण नहीं हो सकता है, लेकिन यह त्वरित था और मेरे लिए लिनक्स पर बैश का उपयोग करके काम किया, और पेम ने सीए-सर्टिफिकेट बंडल फाइल में ब्लॉक किए।
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
आप इसे सभी एक पंक्ति में रख सकते हैं, और सूट करने के लिए खुलने वाले विकल्पों को समायोजित कर सकते हैं। मैं वास्तव में चाहता हूं कि इसके लिए एक और अधिक सुंदर समाधान था, लेकिन इस मामले में मुझे लगता है कि अधिक सुरुचिपूर्ण समाधान खोजने से अधिक समय लग सकता है जैसे कि एक व्यक्ति को हैक करने से।
चूँकि कोई 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 लाइनों की तलाश में पहले कमांड ने बंडल को सीरियल्स में विभाजित किया। दूसरी कमांड निकाली गई सीट्स के माध्यम से लूप करती है और उन्हें दिखाती है।
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
यहाँ एक अजीब आधारित समाधान है जो मध्यवर्ती फ़ाइलों पर निर्भर नहीं करता है।
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 एनकोडेड लाइन तक पहुंचाता है। लाइनों को तब पढ़ा जाता है, डीकोड किया जाता है और डीईआर एनकोडेड सर्टिफिकेट के रूप में ओपनसेल को दिया जाता है।
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 }'
:।
मैं यहां मुहावरेदार पर्ल कमांडलाइन में फेंकना चाहता हूं:
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
दूसरा प्रमाण पत्र प्राप्त करने के लिए दूसरे विवरण में क्या होना चाहिए, इसका मान बदल दें।
एक तरह से आप पूरी श्रृंखला देख सकते हैं (बेशक विंडोज में) crt को डबल क्लिक करने के लिए और फिर प्रमाणन पथ टैब पर देखें। यह पूरी श्रृंखला दिखाएगा भले ही केवल एक इंटरमीडिएट, या रूट सर्टिफिकेट हो। विवरण के लिए नीचे स्क्रीनशॉट देखें। यदि आप विंडोज पर नहीं हैं, तो मैं यूनिक्स / लिनक्स वेरिएंट के साथ अपने ज्ञान की कमी के लिए माफी माँगता हूँ।
नोट: यह गलत परिणाम दे सकता है यदि मध्यवर्ती प्रमाणपत्र आपके स्थानीय कीस्टॉर में है विंडोज इसे स्वचालित रूप से जोड़ देगा और केवल वही नहीं दिखाएगा जो बंडल में था।
मैंने आपकी प्रारंभिक आज्ञा को नजरअंदाज कर दिया और आपके पास एक चीज है। आपकी आज्ञा इस तरह दिखनी चाहिए:
openssl x509 -in bundle.crt -noout -text
स्रोत: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html
openssl
आह्वान में एक वाक्यविन्यास त्रुटि थी, लेकिन यह केवल बंडल में पहला प्रमाण पत्र सूचीबद्ध करता है। दूसरे, दो आह्वान कार्यात्मक रूप से समान हैं। तीसरा, और शायद सबसे महत्वपूर्ण बात, तुम्हारा काम नहीं है, या तो, कम से कम मेरे लिए; यह भी बंडल में केवल पहले प्रमाणपत्र को सूचीबद्ध करता है।