একটি বান্ডলে সমস্ত এসএসএল শংসাপত্রগুলি কীভাবে দেখবেন?


100

আমার কাছে একটি শংসাপত্র বান্ডিল .crt ফাইল রয়েছে।

করছেন openssl x509 -in bundle.crt -text -nooutশুধুমাত্র মূল শংসাপত্র দেখায়।

আমি অন্য সমস্ত শংসাপত্রগুলি কীভাবে দেখছি?

উত্তর:


119

http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 এই ওয়ান-লাইনারের পরামর্শ দেয়:

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

এটি প্রকৃতপক্ষে আমার পক্ষে কাজ করেছিল, তবে আমি বিশদটি বুঝতে পারি না তাই কোনও সতর্কতা আছে কিনা তা বলতে পারি না।


9
এটি সেরা উত্তর - আমি আমার ওভার-কিল পাইথন সমাধান পোস্ট করব না! প্রতিটি শংসাপত্রের জন্য কেবল বিষয় / ইস্যুকারীর তথ্য পেতে "পাঠ্য" ছেড়ে দিন।
ক্রিস ওলফ

এটি চেষ্টা করে /etc/ssl/certs/ca-certificates.crtপেয়েছেunable to load PKCS7 object
অরেঞ্জডোগ

1
এটি কি পিকেসিএস 7 ফর্ম্যাটের জন্য নয়, তবে প্রশ্নটি x509 ফর্ম্যাট বান্ডিল সম্পর্কে?
ইত্তানথোরজোশ

3
এটি কেবলমাত্র মধ্যবর্তী হিসাবে pkcs7 ব্যবহার করে। ইনপুটটি পিএমইকে সংমিশ্রিত করা হয়।
বেনি চেরনিয়াভস্কি-পাসকিন

আপনি সুপার হয়!!!
জিংগুও ইয়াও

21

জাভা এর keytoolকৌশলটি করে:

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

টিকা: উইন্ডোজ ডাবলক্লিক কাজ করে না। উইন্ডোজ কীস্টোরে কেবল প্রথম শংসাপত্রটি পড়ে এবং স্বয়ংক্রিয়ভাবে এর বিল্ট ইন সার্টিফিকেট স্টোর থেকে ট্রাস্টচেইন প্রসারিত করে।

ফলাফল:

  1. .crtফাইলের প্রথম শংসাপত্রের বাইরে সমস্ত দেখানো হয় না
  2. আপনি .crtফাইলের চেয়ে আলাদা একটি ট্রান্সচেইন প্রদর্শিত হতে পারেন । এটি ভুল সিদ্ধান্তে ডেকে আনতে পারে।

উইন্ডোজ জিনিস স্পষ্ট করার জন্য ধন্যবাদ। এটি আমার থেকে সত্যিই বিভ্রান্তিকর ছিল
নিক.এমসিডার্মাইডে

21

এই এফএকিউ অনুসরণ করে আমাকে এই পার্ল স্ক্রিপ্টে নিয়ে গেছে , যা আমার কাছে অত্যন্ত দৃ 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;

10

অনেলাইনার যা ফাইলের প্রতিটি শংসাপত্রের একটি সংক্ষিপ্তসার প্রদর্শন করে।

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

এটি সুন্দর বা মার্জিত নাও হতে পারে তবে লিনাক্সের উপর ব্যাশ এবং সিএ-সিআরটি বান্ডিল ফাইলে পিইএম ফর্ম্যাট ব্লক ব্যবহার করে এটি আমার জন্য দ্রুত এবং কাজ করেছিল 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

আপনি এটিকে সমস্ত এক লাইন রাখতে পারেন এবং খোলার জন্য ওপেনসেল বিকল্পগুলি সামঞ্জস্য করতে পারেন। আমি সত্যিই চাই এটির জন্য আরও মার্জিত সমাধান হতে পারে তবে এই ক্ষেত্রে আমি মনে করি যে এই মার্জিত সমাধানটি হ্যাক করার চেয়ে আরও মার্জিত সমাধান অনুসন্ধান করা আরও বেশি সময় নিয়েছে।


3

যেহেতু কোনও বেহাল ভিত্তিক সমাধান নেই:

$ 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
অ্যাডব্লিউডে মুদ্রণ পুনর্নির্দেশ বৈশিষ্ট্য গাওক এবং নউকে পাওয়া যায় তবে বেসিক অ্যাজকে নয়। এবং তাই, এটি লিনাক্সে কাজ করবে (গাওককে অ্যাওজ্ক হিসাবে সংযুক্ত করা হয়েছে), তবে ওএস এক্সে না থাকতে পারে যা বেসিক অ্যাডক রয়েছে।
রঘু দোদদা

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

আপনাকে সরাসরি সিএমএল অনুলিপি / আটকানোর অনুমতি দেওয়ার জন্য ম্যাডহ্যাটারের পোস্টে ছোট পরিবর্তন। আমি এমডি 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

তথ্যসূত্র: এসএসএল শপার - শংসাপত্র কী ম্যাচার


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

আমি এখানে 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 এর কী হওয়া উচিত তার মানটি পরিবর্তন করুন।


-2

উইন্ডোজ পদ্ধতি

আপনি সম্পূর্ণ চেইনটি দেখতে পারেন তার একটি উপায় হ'ল (অবশ্যই উইন্ডোজে) ক্র্টকে ডাবল ক্লিক করুন এবং তারপরে শংসাপত্রের পাথ ট্যাবটি দেখুন। এটি কেবলমাত্র একটি ইন্টারমিডিয়েট বা রুট সার্ট থাকলেও এটি পুরো চেইনটি দেখায়। বিস্তারিত জানার জন্য নীচে স্ক্রিনশট দেখুন। আপনি যদি উইন্ডোজটিতে না থাকেন তবে আমি ইউনিক্স / লিনাক্সের বৈকল্পিকগুলির সাথে আমার জ্ঞানের অভাবের জন্য ক্ষমাপ্রার্থী।

দ্রষ্টব্য: মধ্যবর্তী শংসাপত্রটি যদি আপনার স্থানীয় কীস্টোরে থাকে তবে এটি মিথ্যা ফলাফলের কারণ হতে পারে উইন্ডোজ এটিকে স্বয়ংক্রিয়ভাবে যুক্ত করবে এবং কেবল বান্ডলে কী ছিল তা না দেখায়।

                                      এখানে চিত্র বর্ণনা লিখুন

লিনাক্স (উবুন্টু পদ্ধতি)

আমি আপনার প্রাথমিক কমান্ডটি উপেক্ষা করেছি এবং আপনার কাছে একটি জায়গা রয়েছে। আপনার আদেশটি দেখতে এইরকম হওয়া উচিত:

openssl x509 -in bundle.crt -noout -text

সূত্র: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html


সত্যি? আমি জানি এটি sublte কিন্তু আপনি সত্যিই বলতে পারবেন না? আমার ওপেনএসএল x509 -তে bundle.crt -noout -text, যদিও আপনার -Txtxt-Noout আছে ... সুতরাং কেন আপনি সম্ভবত একটি বাক্য গঠন ত্রুটি পাচ্ছেন।
ব্র্যাড বোচার্ড

20
ব্র্যাড, আপনার ঘোড়া ধরে রাখুন। প্রথমত, ওপি অভিযোগ করেনি যে তাঁর অনুরোধ opensslএকটি সিনট্যাক্স ত্রুটি দিয়েছে, তবে এটি কেবল বান্ডলে প্রথম শংসাপত্র তালিকাভুক্ত করেছে। দ্বিতীয়ত, দুটি অনুরোধগুলি কার্যত অভিন্ন। তৃতীয়ত, এবং সম্ভবত সবচেয়ে গুরুত্বপূর্ণ, আপনার কাজ হয় না, অন্তত আমার জন্য; এটি, বান্ডলে শুধুমাত্র প্রথম শংসাপত্র তালিকাভুক্ত করে।
ম্যাডহ্যাটার

হ্যাঁ, আমি উবুন্টু বিষয়গুলির মতো বিষয়গুলিতে অংশ নিতে পারছি না এবং ভেবেছিলাম তিনি উইন্ডোতে রয়েছেন যতক্ষণ না তিনি আমাকে অন্যথায় বলেন। সুতরাং আমি ওপি ঝুলতে চাইনি এবং কিছুটা অনুসন্ধান করার পরে আমি জানতে পারি যে এই ধরণের কমান্ডের জন্য একটি রেফারেন্স সাইট আমি তাকে যে কমান্ডটি দিয়েছিল তা তালিকাভুক্ত করেছে (এটি কিছুটা আলাদা সিনট্যাক্সযুক্ত একটি) এবং এটি দেখতে পেরেছিল কিনা সাহায্য করুন। আপনার পয়েন্টগুলি নেওয়া হয়েছে, তবে দয়া করে পরের বার আরও অনুগ্রহ করে এটি করুন।
ব্র্যাড বাউচার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.