گواهی‌های منقضی شده TLS / SSL می‌توانند باعث خرابی و سردرگمی کاربران نهایی شوند. از این رو، نظارت بر تاریخ انقضا برای گواهینامه‌های TLS / SSL بسیار مهم است. در اینجا، نحوه تعیین تاریخ انقضا گواهی TLS یا SSL، از طریق یک فایل گواهی رمزگذاری شده PEM و نام وب‌سایت/دامنه در سیستم‌های لینوکس، BSD، macOS یا سیستم‌های یونیکسی شرح داده شده است.

 

 

یافتن تاریخ انقضای SSL از طریق خط فرمان

به منظور بررسی تاریخ انقضای گواهی SSL، می‌توانید از کلاینت خط فرمان OpenSSL استفاده کنید. کلاینت OpenSSL تعداد زیادی داده از جمله تاریخ اعتبار، تاریخ انقضا، صادر کننده گواهی TLS / SSL و موارد دیگر را ارائه می‌دهد.

به منظور بدست آوردن این اطلاعات، برنامه Terminal را باز کرده و سپس دستور زیر را اجرا نمایید.

openssl s_client -servername {SERVER_NAME} -connect {SERVER_NAME}:{PORT} | openssl x509 -noout -dates
echo | openssl s_client -servername {SERVER_NAME} -connect {SERVER_NAME}:{PORT} | openssl x509 -noout -dates

به عنوان مثال، برای بدست آوردن تاریخ انقضای گواهی www.jeyserver.com کافیست دستور زیر را وارد کنید:

DOM="www.jeyserver.com"
PORT="443"
openssl s_client -servername $DOM -connect $DOM:$PORT \
| openssl x509 -noout -dates

خروجی این دستور، تاریخ‌ها و سایر اطلاعات را مشابه زیر نشان می‌دهد:

depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = www.jeyserver.com
verify return:1
notBefore=Sep 29 23:10:07 2020 GMT
notAfter=Dec 28 23:10:07 2020 GMT

 

این مطلب نیز ممکن است برای شما مفید باشد: ایمن سازی Nginx با Let’s Encrypt در CentOS 7

 

به منظور عدم نیاز به فشردن CTRL + C، دستور echo را به صورت زیر اضافه نمایید:

DOM="www.jeyserver.com"
PORT="443"
## note echo added ##
echo | openssl s_client -servername $DOM -connect $DOM:$PORT \
| openssl x509 -noout -dates

 

شرح گزینه‌های دستور openssl

Openssl، یک ابزار تشخیصی بسیار مفید برای سرورهای TLS و SSL است. گزینه‌های خط فرمان openssl به شرح زیر است:

s_client: دستور s_client، یک کلاینت عمومی SSL/TLS را پیاده سازی می‌کند که با استفاده از SSL/TLS به یک میزبان ریموت متصل می‌شود.

servername $ DOM: پسوند TLS SNI (نشانگر نام سرور) را در پیام ClientHello بر روی مقدار داده شده تنظیم می‌نماید.

connect $ DOM:$PORT: میزبان ($ DOM) و پورت اختیاری ($ PORT) را برای اتصال به آن مشخص می‌کند.

x509: برنامه نمایش و امضای گواهی را اجرا می‌نماید.

-noout: از خروج نسخه رمزگذاری شده گواهی جلوگیری می‌کند.

-dates: تاریخ شروع و انقضای گواهی TLS یا SSL را چاپ می‌نماید.

 

این مطلب نیز ممکن است برای شما مفید باشد: فعال سازی Lets Encrypt برای دایرکت ادمین

 

یافتن تاریخ انقضا گواهی SSL از طریق فایل گواهی رمزگذاری شده PEM

شما می‌توانید، فایل گواهی را به منظور یافتن زمان انقضای گواهینامه TLS / SSL جستجو کنید.

openssl x509 -enddate -noout -in {/path/to/my/my.pem}
openssl x509 -enddate -noout -in /etc/nginx/ssl/www.jeyserver.com.fullchain.cer.ecc
openssl x509 -enddate -noout -in /etc/nginx/ssl/www.jeyserver.com.fullchain.cer
notAfter=Dec 29 23:48:42 2020 GMT

همچنین می‌توانید، بررسی نمایید که آیا گواهی در یک بازه زمانی مشخص منقضی شده است یا خیر. به عنوان مثال، ببینید آیا گواهی TLS / SSL تا 7 روز آینده (604800 ثانیه دیگر) منقضی می‌شود، یا خیر:

openssl x509 -enddate -noout -in my.pem -checkend 604800
# Check if the TLS/SSL cert will expire in next 4 months #
openssl x509 -enddate -noout -in my.pem -checkend 10520000

 

یافتن تاریخ انقضا گواهی SSL از طریق Shell script با استفاده از فایل crt و alert sysadmin

در اینجا یک نمونه shell script ارائه شده است:

#!/bin/bash
# Purpose: Alert sysadmin/developer about the TLS/SSL cert expiry date in advance
# Author: Vivek Gite {https://www.cyberciti.biz/} under GPL v2.x+
# -------------------------------------------------------------------------------
PEM="/etc/nginx/ssl/letsencrypt/jeyserver.com/jeyserver.com.fullchain.cer"
 
# 7 days in seconds 
DAYS="604800" 
 
# Email settings 
_sub="$PEM will expire within $DAYS (7 days)."
_from="system-account@your-dommain"
_to="sysadmin@your-domain"
_openssl="/usr/bin/openssl"
$_openssl x509 -enddate -noout -in "$PEM"  -checkend "$DAYS" | grep -q 'Certificate will expire'
 
# Send email and push message to my mobile
if [ $? -eq 0 ]
then
	echo "${_sub}"
        mail -s "$_sub" -r "$_from" "$_to" <<< "Warning: The TLS/SSL certificate ($PEM) will expire soon on $HOSTNAME [$(date)]"
        # See https://www.jeyserver.com/mobile-devices/android/how-to-push-send-message-to-ios-and-android-from-linux-cli/ #
        source ~/bin/cli_app.sh
        push_to_mobile "$0" "$_sub. See $_to email for detailed log. -- $HOSTNAME " >/dev/null
fi

 

این مطلب نیز ممکن است برای شما مفید باشد: راه اندازی وب سرور امن Apache با SSL و TSL

 

شما می‌توانید از ابزار خط فرمان رایگان testssl shell script استفاده کنید که سرویس سرور را در هر پورت برای پشتیبانی از رمزهای TLS / SSL، پروتکل‌ها و همچنین موراد مربوط به رمزنگاری و دیگر موارد را بررسی می‌نماید. این ابزار را می‌توان به صورت زیر بارگیری و اجرا کرد:

wget https://testssl.sh/testssl.sh
chmod +x testssl.sh
testssl.sh --fast --parallel https://www.cyberciti.biz/

گزینه دیگر، اجرای اسکریپت ssl-cert-check است که یک Bourne shell script است و می‌تواند برای گزارش انقضای اعتبار گواهی‌های SSL استفاده شود. این اسکریپت، به گونه‌ای طراحی شده است که از طریق cron قابل اجرا است و می‌تواند از طریق هشدارها را ایمیل کرده یا از طریق nagios ثبت کند.

به منظور کسب اطلاعات بیشتر در این زمینه می‌توانید از دستورات راهنمای زیر استفاده کنید:

man x509
man s_client

 

 

 

منبع:

cyberciti