जवाबों:
के साथ openssl
:
openssl x509 -enddate -noout -in file.pem
आउटपुट फॉर्म पर है:
notAfter=Nov 3 22:23:50 2014 GMT
यह भी देखें कि प्रमाणपत्र की समय-सीमा समाप्त हो गई है या नहीं, आसानी से कैसे चेक किया जा सकता है या नहीं, इसके लिए माइकडब्ल्यू का जवाब देखें कि वह किसी निश्चित समयावधि के भीतर है, बिना तारीख को पार्स किए।
यदि आप केवल यह जानना चाहते हैं कि क्या प्रमाणपत्र की समय सीमा समाप्त हो गई है (या अगले एन सेकंड के भीतर ऐसा करेगा), तो आपको बताने का -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
यह तारीख / समय की तुलना करने से बचाता है।
openssl
0
यदि प्रमाणपत्र समाप्त नहीं हुआ है और ऊपर के उदाहरण में, अगले 86400 सेकंड के लिए ऐसा नहीं करेगा (शून्य) का एक निकास कोड लौटाएगा । यदि प्रमाणपत्र की समय-सीमा समाप्त हो गई है या पहले ही हो चुकी है - या कुछ अन्य त्रुटि जैसे कि अमान्य / नॉन-सस्टेनेबल फ़ाइल - रिटर्न कोड है 1
।
(बेशक, यह समय / तिथि सही ढंग से निर्धारित है)
-noout
अतिरिक्त तर्क के बिना एक ही आदेश का उपयोग करके एक उपयोगी संदेश देखने का विकल्प छोड़ें । उदाहरण के लिए, openssl x509 -checkend 0 -in file.pem
आउटपुट "प्रमाणपत्र समाप्त हो जाएगा" या "प्रमाणपत्र समाप्त नहीं होगा" यह दर्शाता है कि प्रमाणपत्र शून्य सेकंड में समाप्त हो जाएगा।
हाल ही में सबसे पहले समाप्त होने वाले उनके समाप्ति के क्रम में कई प्रमाणपत्रों को सूचीबद्ध करने के लिए यहां मेरी बैश कमांड लाइन है।
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
0 7 * * 1 /path/to/cert.sh | mail -s "certbot" my@email.com
यहां बैश फ़ंक्शन है जो आपके सभी सर्वरों की जांच करता है, यह मानते हुए कि आप 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
expiry_date
मूल्य को इसके अंत से हटाए गए समय-क्षेत्र का नाम रखना होगा। ऐसा cut
करने के लिए पाइप के अंत में एक अतिरिक्त जोड़ें :| cut -d ' ' -f 1-4
यदि डोमेन का प्रमाणपत्र कुछ समय बाद (पूर्व 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
मैक ओएसएक्स (एल कैपिटन) के लिए निकोलस के उदाहरण के इस संशोधन ने मेरे लिए काम किया।
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
आपके पास अभी-अभी आपके द्वारा बनाई गई Apple Apple साइट से डाउनलोड किया गया है?
स्वीकृत उत्तर के रूप में भी, लेकिन ध्यान दें कि यह .crt
फ़ाइल के साथ भी काम करता है .pem
, न कि केवल फ़ाइल के मामले में, यदि आप .pem
फ़ाइल स्थान खोजने में सक्षम नहीं हैं ।
openssl x509 -enddate -noout -in e71c8ea7fa97ad6c.crt
परिणाम:
notAfter=Mar 29 06:15:00 2020 GMT
-startdate
और-enddate
विकल्पों में बनायाx509
उपयोगिता। वे तुम्हें बचा लेंगेgrep
।