উত্তর:
http://comments.gmane.org/gmane.comp.encryption.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
ফাইলের চেয়ে আলাদা একটি ট্রান্সচেইন প্রদর্শিত হতে পারেন । এটি ভুল সিদ্ধান্তে ডেকে আনতে পারে।এই এফএকিউ অনুসরণ করে আমাকে এই পার্ল স্ক্রিপ্টে নিয়ে গেছে , যা আমার কাছে অত্যন্ত দৃ strongly়তার সাথে পরামর্শ দেয় যে একটি বান্ডেলে এন থ্রি সার্টিফিকেট 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
(অন্যান্য উত্তরে উল্লিখিত অনুরূপ কমান্ডো, তবে এটি --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
এটি সুন্দর বা মার্জিত নাও হতে পারে তবে লিনাক্সের উপর ব্যাশ এবং সিএ-সিআরটি বান্ডিল ফাইলে পিইএম ফর্ম্যাট ব্লক ব্যবহার করে এটি আমার জন্য দ্রুত এবং কাজ করেছিল worked
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
আপনি এটিকে সমস্ত এক লাইন রাখতে পারেন এবং খোলার জন্য ওপেনসেল বিকল্পগুলি সামঞ্জস্য করতে পারেন। আমি সত্যিই চাই এটির জন্য আরও মার্জিত সমাধান হতে পারে তবে এই ক্ষেত্রে আমি মনে করি যে এই মার্জিত সমাধানটি হ্যাক করার চেয়ে আরও মার্জিত সমাধান অনুসন্ধান করা আরও বেশি সময় নিয়েছে।
যেহেতু কোনও বেহাল ভিত্তিক সমাধান নেই:
$ 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 রেখাগুলি অনুসন্ধান করে শংসাপত্রগুলিতে বান্ডিল বিভক্ত করে। দ্বিতীয় কমান্ডটি নিষ্কাশিত শংসাপত্রগুলির মধ্য দিয়ে লুপ করে এবং সেগুলি দেখায়।
আপনাকে সরাসরি সিএমএল অনুলিপি / আটকানোর অনুমতি দেওয়ার জন্য ম্যাডহ্যাটারের পোস্টে ছোট পরিবর্তন। আমি এমডি 5 হ্যাশও অন্তর্ভুক্ত করেছি, যা শংসাপত্রগুলি সঠিক কিনা তা নিশ্চিত করার ক্ষেত্রে সহায়ক। স্টাডিন লাইনটি হ'ল সার্ট (গুলি) এর এমডি 5 হ্যাশ।
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
কেবলমাত্র যদি আপনার ওপেনসেল সংস্করণটি এই সমস্ত পতাকাটিকে সমর্থন করে না তবে আপনি ব্যবহার করতে পারেন এমন কয়েকটি উদাহরণ re প্রথম জিনিস হিসাবে একই জিনিস কিন্তু ঠিক পাইপ পাইপ।
perl -e '.....
' < my_id_cert_and_ca_bundle.crt | egrep "Serial|Subject:|Not |Public-Key|^Cert|stdin|ssuer"
প্রাইভেট কীটির MD5 হ্যাশ চেক করতে আপনি নিম্নলিখিতটি করতে পারেন।
ওপেনএসএল আরএসএ -আউট-মডুলাস-ইন প্রাইভেটকি.কি ওপেনএসএল এমডি 5
তথ্যসূত্র: এসএসএল শপার - শংসাপত্র কী ম্যাচার
এখানে একটি বিশুদ্ধ ভিত্তিক সমাধান যা মধ্যবর্তী ফাইলগুলিতে নির্ভর করে না।
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 }'
।
আমি এখানে idiomatic পার্ল কমান্ডলাইন নিক্ষেপ করতে চাই:
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
নবম শংসাপত্রটি পাওয়ার জন্য দ্বিতীয় বিবৃতিতে n এর কী হওয়া উচিত তার মানটি পরিবর্তন করুন।
আপনি সম্পূর্ণ চেইনটি দেখতে পারেন তার একটি উপায় হ'ল (অবশ্যই উইন্ডোজে) ক্র্টকে ডাবল ক্লিক করুন এবং তারপরে শংসাপত্রের পাথ ট্যাবটি দেখুন। এটি কেবলমাত্র একটি ইন্টারমিডিয়েট বা রুট সার্ট থাকলেও এটি পুরো চেইনটি দেখায়। বিস্তারিত জানার জন্য নীচে স্ক্রিনশট দেখুন। আপনি যদি উইন্ডোজটিতে না থাকেন তবে আমি ইউনিক্স / লিনাক্সের বৈকল্পিকগুলির সাথে আমার জ্ঞানের অভাবের জন্য ক্ষমাপ্রার্থী।
দ্রষ্টব্য: মধ্যবর্তী শংসাপত্রটি যদি আপনার স্থানীয় কীস্টোরে থাকে তবে এটি মিথ্যা ফলাফলের কারণ হতে পারে উইন্ডোজ এটিকে স্বয়ংক্রিয়ভাবে যুক্ত করবে এবং কেবল বান্ডলে কী ছিল তা না দেখায়।
আমি আপনার প্রাথমিক কমান্ডটি উপেক্ষা করেছি এবং আপনার কাছে একটি জায়গা রয়েছে। আপনার আদেশটি দেখতে এইরকম হওয়া উচিত:
openssl x509 -in bundle.crt -noout -text
সূত্র: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html
openssl
একটি সিনট্যাক্স ত্রুটি দিয়েছে, তবে এটি কেবল বান্ডলে প্রথম শংসাপত্র তালিকাভুক্ত করেছে। দ্বিতীয়ত, দুটি অনুরোধগুলি কার্যত অভিন্ন। তৃতীয়ত, এবং সম্ভবত সবচেয়ে গুরুত্বপূর্ণ, আপনার কাজ হয় না, অন্তত আমার জন্য; এটি, বান্ডলে শুধুমাত্র প্রথম শংসাপত্র তালিকাভুক্ত করে।