কোনও পিইএম এনকোডেড শংসাপত্র থেকে এসএসএল সার্টের মেয়াদোত্তীকরণের তারিখ কীভাবে নির্ধারণ করবেন?


326

আমার কাছে যদি ম্যাক বা লিনাক্সে আসল ফাইল এবং বাশ শেল থাকে তবে আমি কীভাবে শংসাপত্রের ফাইলটি শেষ হয়ে যাব তার জন্য জিজ্ঞাসা করতে পারি? কোনও ওয়েব সাইট নয়, তবে প্রকৃতপক্ষে শংসাপত্রের ফাইলটি নিজেই ধরে নিয়েছে, আমার কাছে সিএসআর, কী, পেম এবং চেইন ফাইল রয়েছে um

উত্তর:


628

সাথে openssl:

openssl x509 -enddate -noout -in file.pem

আউটপুটটি ফর্মটিতে রয়েছে:

notAfter=Nov  3 22:23:50 2014 GMT

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


19
এছাড়াও আপনি আছে -startdateএবং -enddateঅপশন পাতাটা x509ইউটিলিটি। তারা আপনাকে রক্ষা করবে grep
jww 23'14

2
ফাইলটি পেম ফর্ম্যাটে না থাকলে এটিও কাজ করে। server.crt জন্য কাজ করে জরিমানা
বর্ণন

163

যদি আপনি কেবল জানতে চান যে শংসাপত্রটির মেয়াদ শেষ হয়ে গেছে (বা পরবর্তী এন সেকেন্ডের মধ্যে এটি করবে) তবে -checkend <seconds>বিকল্পটি openssl x509আপনাকে বলবে:

if openssl x509 -checkend 86400 -noout -in file.pem
then
  echo "Certificate is good for another day!"
else
  echo "Certificate has expired or will do so within 24 hours!"
  echo "(or is invalid/not found)"
fi

এটি নিজের সাথে তারিখ / সময় তুলনা করে সংরক্ষণ করে।

openssl0উপরের উদাহরণে শংসাপত্রটির মেয়াদ উত্তীর্ণ না হয়ে এবং পরবর্তী 86400 সেকেন্ডের জন্য এটি না করা হলে (শূন্য) এর একটি প্রস্থান কোড ফেরত পাঠাবে। যদি শংসাপত্রটির মেয়াদ শেষ হয়ে যায় বা ইতিমধ্যে এটি হয়ে থাকে - বা কোনও অবৈধ / অস্তিত্বহীন ফাইলের মতো অন্য কোনও ত্রুটি - রিটার্ন কোডটি 1

(অবশ্যই, এটি সময় / তারিখটি সঠিকভাবে সেট করা অনুমান করে)


8
বর্তমানে একটি শংসাপত্রের মেয়াদ শেষ হয়ে গেছে কিনা তা নির্ধারণ করতে শূন্য সেকেন্ডের সময়কাল ব্যবহার করুন। -nooutঅতিরিক্ত যুক্তি ছাড়াই একটি একক কমান্ড ব্যবহার করে একটি সহায়ক বার্তা দেখার বিকল্পটি ছাড়ুন । উদাহরণস্বরূপ, openssl x509 -checkend 0 -in file.pemআউটপুট দেবে "শংসাপত্রের মেয়াদ শেষ হবে" বা "শংসাপত্রের মেয়াদ শেষ হবে না" নির্দেশ করে শংসাপত্রটি শূন্য সেকেন্ডে শেষ হবে কিনা।
এলএস

1
ধন্যবাদ! এটাই আমার দরকার ছিল! প্রস্থান কোডগুলির সাথে, এটি একটি আরও ছোট / ক্লিনার প্রোগ্রাম তৈরি করবে।
লন কৌট

24

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

for pem in /etc/ssl/certs/*.pem; do 
   printf '%s: %s\n' \
      "$(date --date="$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" --iso-8601)" \
      "$pem"
done | sort

নমুনা আউটপুট:

2015-12-16: /etc/ssl/certs/Staat_der_Nederlanden_Root_CA.pem
2016-03-22: /etc/ssl/certs/CA_Disig.pem
2016-08-14: /etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_S.pem

খুব সুন্দর! এই আমি পরে ছিল। শীঘ্রই আমাকে শংসাপত্রগুলি পুনর্নবীকরণ করতে হবে সে সম্পর্কে আমার একটি সংক্ষিপ্তসার রয়েছে। এটি আমার বাড়ির ফোল্ডারে চেকার্স.শ হিসাবে সংরক্ষণ করা হয়েছে যাতে আমি এটি নিয়মিত পরীক্ষা করতে পারি। পরবর্তী জিনিসটি হ'ল প্রতি মাসে চেক করার জন্য CRON কাজ করা এবং শংসাপত্রগুলি ইমেল করা উচিত যাগুলির পুনর্নবীকরণ প্রয়োজন।
পিট

3
খুব দরকারী ধন্যবাদ। আমি এই cronjob ব্যবহার0 7 * * 1 /path/to/cert.sh | mail -s "certbot" my@email.com
Matthieu

10

এখানে একটি বাশ ফাংশন রয়েছে যা আপনার সমস্ত সার্ভার চেক করে ধরে নিবে আপনি ডিএনএস রাউন্ড-রবিন ব্যবহার করছেন। নোট করুন যে এর জন্য GNU তারিখ প্রয়োজন এবং ম্যাক ওএসে কাজ করবে না

function check_certs () {
  if [ -z "$1" ]
  then
    echo "domain name missing"
    exit 1
  fi
  name="$1"
  shift

  now_epoch=$( date +%s )

  dig +noall +answer $name | while read _ _ _ _ ip;
  do
    echo -n "$ip:"
    expiry_date=$( echo | openssl s_client -showcerts -servername $name -connect $ip:443 2>/dev/null | openssl x509 -inform pem -noout -enddate | cut -d "=" -f 2 )
    echo -n " $expiry_date";
    expiry_epoch=$( date -d "$expiry_date" +%s )
    expiry_days="$(( ($expiry_epoch - $now_epoch) / (3600 * 24) ))"
    echo "    $expiry_days days"
  done
}

আউটপুট উদাহরণ:

$ check_certs stackoverflow.com
151.101.1.69: Aug 14 12:00:00 2019 GMT    603 days
151.101.65.69: Aug 14 12:00:00 2019 GMT    603 days
151.101.129.69: Aug 14 12:00:00 2019 GMT    603 days
151.101.193.69: Aug 14 12:00:00 2019 GMT    603 days

আশ্চর্যজনকভাবে ওএসএক্স 10.13.4 আপনার শেলটি ঠিকঠাক চালায় (আমাকে বিচার করবেন না আমি অ্যাপ্লিকেশন
স্টোরটিতে

1
@ স্কটস স্টেনসল্যান্ড আমরা বিচার করছি :- পি। আমি ম্যাক অনেক ব্যবহার করি তবে লিনাক্স সত্যিই অনেক ভাল।
মাইক কিউ

আপনাকে এই কোড স্নিপিতের জন্য অনেক ধন্যবাদ! কী বিরক্তিকর কাজ :), আমি আশা করি ওপেনসেসেলের জন্য ইউনিক্সটাইম টাইমস্ট্যাম্প পতাকা ছিল।
ব্যবহারকারী 1279741

1
একটি আলপাইন লিনাক্স ধারক আপনার মধ্যে যারা, আপনার expiry_dateমান সময় টাইপ অঞ্চল নাম এটি শেষ থেকে সরানো প্রয়োজন। cutএটি করার জন্য পাইপের শেষে একটি অতিরিক্ত যুক্ত করুন :| cut -d ' ' -f 1-4
ড্রোগানস

5

ডোমেনের শংসাপত্রের কিছু সময় পরে (উদা। 15 দিন) মেয়াদ শেষ হয়ে গেলে সত্য / মিথ্যাতে এক লাইন চেকিংয়ের মেয়াদ শেষ হয়ে যায়:

if openssl x509 -checkend $(( 24*3600*15 )) -noout -in <(openssl s_client -showcerts -connect may.domain.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM)
then
  echo 'good'
else
  echo 'bad'
fi

2

ম্যাক ওএসএক্সের (এল ক্যাপ্টেন) নিকোলাসের উদাহরণের এই পরিবর্তনটি আমার পক্ষে কাজ করেছিল।

for pem in /path/to/certs/*.pem; do
    printf '%s: %s\n' \
        "$(date -jf "%b %e %H:%M:%S %Y %Z" "$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" +"%Y-%m-%d")" \
    "$pem";
done | sort

নমুনা আউটপুট:

2014-12-19: /path/to/certs/MDM_Certificate.pem
2015-11-13: /path/to/certs/MDM_AirWatch_Certificate.pem

MacOS ভালো লাগে নি --date=বা --iso-8601আমার সিস্টেমে পতাকা।


আপনি যদি পে। পিএম ফাইলগুলি না তৈরি করেন তবে .cerআপনি কেবল অ্যাপল দেব সাইট থেকে তৈরি এবং ডাউনলোড করেছেন এমন শংসাপত্রগুলি না থাকলে আপনি কী করবেন ?
অ্যালেক্স জাভাটোন

1

গৃহীত উত্তর হিসাবে একই, তবে মনে রাখবেন যে এটি .crtফাইলের সাথেও কাজ করে এবং কেবল .pemফাইল নয়, কেবলমাত্র যদি আপনি .pemফাইলের অবস্থান সন্ধান করতে না পারেন তবে ।

openssl x509 -enddate -noout -in e71c8ea7fa97ad6c.crt

ফলাফল:

notAfter=Mar 29 06:15:00 2020 GMT

0

যদি (কোনও কারণে) আপনি লিনাক্সে জিইউআই অ্যাপ্লিকেশন ব্যবহার করতে চান তবে ব্যবহার করুন gcr-viewer(বেশিরভাগ বিতরণে এটি প্যাকেজ দ্বারা ইনস্টল করা হয় gcr(অন্যথায় প্যাকেজে gcr-viewer))

gcr-viewer file.pem
# or
gcr-viewer file.crt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.