PEM एन्कोडेड प्रमाणपत्र से SSL प्रमाणपत्र समाप्ति तिथि कैसे निर्धारित करें?


326

यदि मेरे पास वास्तविक फ़ाइल और मैक या लिनक्स में बैश शेल है, तो मैं प्रमाणित फ़ाइल को क्वेरी कैसे कर सकता हूं, जब यह समाप्त हो जाएगी? एक वेब साइट नहीं है, लेकिन वास्तव में प्रमाण पत्र फ़ाइल है, मुझे लगता है कि मेरे पास सीएसआर, कुंजी, पीएम और चेन फाइलें हैं।

जवाबों:


628

के साथ openssl:

openssl x509 -enddate -noout -in file.pem

आउटपुट फॉर्म पर है:

notAfter=Nov  3 22:23:50 2014 GMT

यह भी देखें कि प्रमाणपत्र की समय-सीमा समाप्त हो गई है या नहीं, आसानी से कैसे चेक किया जा सकता है या नहीं, इसके लिए माइकडब्ल्यू का जवाब देखें कि वह किसी निश्चित समयावधि के भीतर है, बिना तारीख को पार्स किए।


19
आप यह भी है -startdateऔर -enddateविकल्पों में बनाया x509उपयोगिता। वे तुम्हें बचा लेंगे grep
jww

2
यह भी काम करता है अगर फ़ाइल pem प्रारूप में नहीं है। 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

बहुत अच्छा! यह वही है जो मैं बाद में था। अब मेरे पास प्रमाणपत्रों का अवलोकन है जिसे मुझे जल्द ही नवीनीकृत करना होगा। इसे मेरे होम फोल्डर में checkcerts.sh के रूप में सहेजा है ताकि मैं इसे नियमित रूप से जांच सकूं। अगली बात यह होगी कि हर महीने जांच करने के लिए सीआरओएन काम होना चाहिए और उन प्रमाणपत्रों को ईमेल करना चाहिए जो नवीकरण की आवश्यकता है।
पीट

3
बहुत उपयोगी धन्यवाद। मैं इस क्रोनजॉब का उपयोग करता हूं0 7 * * 1 /path/to/cert.sh | mail -s "certbot" my@email.com
मथिउ

10

यहां बैश फ़ंक्शन है जो आपके सभी सर्वरों की जांच करता है, यह मानते हुए कि आप DNS राउंड-रॉबिन का उपयोग कर रहे हैं। ध्यान दें कि इसके लिए जीएनयू तिथि की आवश्यकता है और मैक ओएस पर काम नहीं करेगा

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

आश्चर्यजनक रूप से osx 10.13.4 आपके शेल को ठीक से चलाता है (मुझे जज न करें मैं केवल आज ही ओएक्स पर हूं एक ऐप को ऐप स्टोर पर धकेलने के लिए ... जल्द ही लिनक्स में वापस बूटिंग ;-)
स्कॉट स्टेंसलैंड

1
@ScottStensland हम जज कर रहे हैं :-P मैं मैक का बहुत उपयोग करता हूं लेकिन लिनक्स वास्तव में बहुत बेहतर है।
माइक क्यू

उस कोड स्निपिट के लिए बहुत बहुत धन्यवाद! एक कष्टप्रद कार्य :), मैं चाहता हूं कि ओपनसीएल के लिए एक अविराम टाइमस्टैम्प झंडा हो।
user1279741

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मेरे सिस्टम पर झंडे पसंद नहीं थे ।


अगर आपने .pem फ़ाइलों को नहीं बनाया है, तो आप ऐसा कैसे करेंगे, लेकिन .cerआपके पास अभी-अभी आपके द्वारा बनाई गई Apple Apple साइट से डाउनलोड किया गया है?
एलेक्स ज़ावाटोन

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.