এসএসএল শংসাপত্র বৈধ কিনা তা পরীক্ষা করতে স্ক্রিপ্ট


14

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

আমার ধারণাটি ক্রোনজব তৈরি করা যা প্রতিদিন একটি সাধারণ আদেশ দেয় command

আমি জানি যে opensslলিনাক্সের কমান্ডটি দূরবর্তী সার্ভারের শংসাপত্রের তথ্য প্রদর্শন করতে ব্যবহার করা যেতে পারে, যেমন:

openssl s_client -connect www.google.com:443

তবে আমি এই আউটপুটে মেয়াদ শেষ হওয়ার তারিখটি দেখতে পাচ্ছি না। এছাড়াও, আমাকে এই কমান্ডটি CTRL+ সহ শেষ করতে হবে c

আমি কীভাবে কোনও স্ক্রিপ্ট থেকে দূরবর্তী শংসাপত্রের মেয়াদোত্তীর্ণতা পরীক্ষা করতে পারি (পছন্দমত ব্যবহার করা openssl) এবং এটি "ব্যাচ মোডে" করতে পারি যাতে এটি ব্যবহারকারীর মিথস্ক্রিয়া ছাড়াই স্বয়ংক্রিয়ভাবে চলে?


4
আমি -servername www.google.comএসএনআই সক্ষম সার্ভারগুলির সাথে < /dev/null
সার্ভারনেমটি

যদি আপনার চলমান রেড হ্যাট / সেন্টোস / ফেডোরা হয় তবে সার্টিমনজারটি দেখুন । এটি স্ট্যান্ডার্ড সংগ্রহস্থলগুলি থেকেও উপলব্ধ।
জেআরফেরগসন

আমি নাগিওস বা আইসিঙ্গার মতো একটি পর্যবেক্ষণ সরঞ্জামে শংসাপত্রের চেকটি যুক্ত করব।
sebix

উত্তর:


18

আপনার আদেশ এখন GET index.phpউদাহরণস্বরূপ একটি HTTP অনুরোধ আশা করবে । পরিবর্তে এটি ব্যবহার করুন:

if true | openssl s_client -connect www.google.com:443 2>/dev/null | \
  openssl x509 -noout -checkend 0; then
  echo "Certificate is not expired"
else
  echo "Certificate is expired"
fi

  • true: eof এর পরে কোনও ইনপুট দেবে না, যাতে সংযোগের পরে ওপেনসেলটি প্রস্থান করে।
    • openssl ...: আপনার প্রশ্ন থেকে আদেশ
    • 2>/dev/null: ত্রুটি আউটপুট উপেক্ষা করা হবে।
  • openssl x509: এক্স .509 শংসাপত্র ডেটা পরিচালনা সক্রিয় করে।
    • এটি স্ট্যান্ডার্ড ইনপুট থেকে ডিফল্টভাবে পড়বে
    • -noout: পুরো শংসাপত্র আউটপুট দমন করে
    • -checkend 0: পরের 0 সেকেন্ডের মধ্যে শংসাপত্রটির মেয়াদ শেষ হয়ে গেছে কিনা তা পরীক্ষা করে দেখুন

-checkendস্ক্রিপ্টের চেয়ে অনেক সহজ আমি খুঁজে পেয়েছি যে ডেট পাটিগণিত করছে!
অ্যাসপেক্স

7

এটি আপনাকে শংসাপত্র দেয়, তবে এটি ডিকোড করে না। যেহেতু আপনি তারিখটি চাইলে এটির প্রয়োজন হবে, আপনি এটি দেখতে পাচ্ছেন না। সুতরাং যা দরকার তা হ'ল x509শংসাপত্রটি ডিকোড করার জন্য এটি ওপেনএসএসএল এর অ্যাপ্লিকেশনটিতে পাইপ করা :

openssl s_client -connect www.example.com:443 \
    -servername www.example.com </dev/null |\
    openssl x509 -in /dev/stdin -noout -text

এটি আপনাকে stdout এর পুরো মেয়াদ সহ পুরো ডিকোডেড শংসাপত্র দেবে।


3

আপনার যদি মেয়াদোত্তীকরণের তারিখটি পরীক্ষা করতে হয় তবে এই ব্লগ পোস্টকে ধন্যবাদ , একটি কলের সাথে অন্যান্য প্রাসঙ্গিক তথ্য সহ এই তথ্যটি সন্ধান করার একটি উপায় খুঁজে পেয়েছেন:

echo | openssl s_client -servername unix.stackexchange.com -connect unix.stackexchange.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

আউটপুটে ইস্যুকারী, বিষয় (যার কাছে শংসাপত্র জারি করা হয়), জারি করার তারিখ এবং শেষ অবধি মেয়াদ শেষ হওয়ার তারিখ অন্তর্ভুক্ত থাকে :

issuer= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
subject= /C=US/ST=NY/L=New York/O=Stack Exchange, Inc./CN=*.stackexchange.com
notBefore=May 21 00:00:00 2016 GMT
notAfter=Aug 14 12:00:00 2019 GMT
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.