SSL प्रमाणपत्र मान्य है या नहीं यह जाँचने के लिए स्क्रिप्ट


14

मेरे पास कई एसएसएल प्रमाण पत्र हैं, और जब एक प्रमाण पत्र की समय सीमा समाप्त हो गई है, तो मैं अधिसूचित होना चाहूंगा।

मेरा विचार एक क्रोनजॉब बनाना है, जो हर दिन एक साधारण कमांड निष्पादित करता है।

मुझे पता है कि opensslलिनक्स में कमांड का उपयोग दूरस्थ सर्वर की प्रमाणपत्र जानकारी प्रदर्शित करने के लिए किया जा सकता है, अर्थात:

openssl s_client -connect www.google.com:443

लेकिन मुझे इस आउटपुट की समाप्ति तिथि नहीं दिख रही है। साथ ही, मुझे इस कमांड को CTRL+ के साथ समाप्त करना होगा c

मैं एक स्क्रिप्ट से एक दूरस्थ प्रमाणपत्र की समाप्ति की जांच कैसे कर सकता हूं (अधिमानतः उपयोग करके openssl) और इसे "बैच मोड" में कर सकता हूं ताकि यह उपयोगकर्ता की बातचीत के बिना स्वचालित रूप से चलता रहे?


4
मैं -servername www.google.comएसएनआई सक्षम सर्वरों के साथ < /dev/null
सर्वरनाम

यदि आपकी चल रही Red Hat / CentOS / Fedora, Certmonger पर एक नजर है । यह मानक रिपॉजिटरी से भी उपलब्ध है।
JRFerguson

मैं सर्टिफिकेट चेक को एक निगरानी उपकरण जैसे कि नगियोस या इकिगाना में जोड़ूंगा।
सेबिक्स

जवाबों:


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: बस ईओएफ के बाद कोई इनपुट नहीं दिया जाएगा, ताकि खुलने का समय कनेक्ट होने के बाद बाहर निकल जाए।
    • openssl ...: आपके प्रश्न से आदेश
    • 2>/dev/null: एरर आउटपुट को नजरअंदाज किया जाएगा।
  • openssl x509: X.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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.