Cách kiểm tra ngày hết hạn chứng chỉ TLS / SSL từ dòng lệnh

0

HTôi có kiểm tra ngày hết hạn chứng chỉ TLS / SSL từ lời nhắc shell prompt Linux hoặc Unix của mình không? Làm cách nào để tìm ngày hết hạn chứng chỉ TLS từ các tập lệnh shell Linux hoặc Unix?

Chúng tôi có thể nhanh chóng giải quyết các vấn đề về chứng chỉ TLS hoặc SSL bằng cách kiểm tra ngày hết hạn của chứng chỉ từ dòng lệnh. Hãy để chúng tôi xem cách xác định ngày hết hạn chứng chỉ TLS hoặc SSL từ tệp chứng chỉ được mã hóa PEM và trang web / tên miền sản xuất trực tiếp khi sử dụng Linux, * Hệ thống giống BSD, macOS hoặc Unix.

Cách kiểm tra ngày hết hạn chứng chỉ TLS / SSL từ dòng lệnh

Để kiểm tra ngày hết hạn chứng chỉ SSL, chúng tôi sẽ sử dụng máy khách dòng lệnh OpenSSL. Ứng dụng khách OpenSSL cung cấp rất nhiều dữ liệu, bao gồm ngày hiệu lực, ngày hết hạn, ai đã cấp chứng chỉ TLS / SSL, v.v.

Kiểm tra ngày hết hạn của chứng chỉ SSL hoặc TLS

Mở ứng dụng Terminal rồi chạy lệnh sau:

$ 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

Hãy để chúng tôi tìm hiểu ngày hết hạn cho www.nixcraft.com, đi vào:

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

Kết quả đầu ra mẫu cho biết ngày tháng và các thông tin khác:

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.nixcraft.com
verify return:1
notBefore=Sep 29 23:10:07 2020 GMT
notAfter=Dec 28 23:10:07 2020 GMT

Thêm lệnh echo để tránh nhấn CTRL + C. Ví dụ:

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

Cách kiểm tra ngày hết hạn của chứng chỉ SSL trên Linux hoặc Unix

OpenSSL đang hoạt động: Kiểm tra ngày và giờ hết hạn chứng chỉ TLS / SSL

Hiểu các tùy chọn lệnh openssl

Openssl là một công cụ chẩn đoán rất hữu ích cho các máy chủ TLS và SSL. Các tùy chọn dòng lệnh openssl như sau:

  1. s_client : Lệnh s_client triển khai một máy khách SSL / TLS chung kết nối với máy chủ từ xa bằng SSL / TLS.
  2. -servername $DOM : Đặt phần mở rộng TLS SNI (Chỉ báo tên máy chủ) trong thông báo ClientHello thành giá trị đã cho.
  3. -connect $DOM:$PORT : Điều này chỉ định máy chủ ($DOM) và cổng tùy chọn ($PORT) để kết nối với.
  4. x509 : Chạy tiện ích hiển thị và ký chứng chỉ.
  5. -noout : Ngăn đầu ra của phiên bản được mã hóa của chứng chỉ.
  6. -dates : In ra ngày bắt đầu và ngày hết hạn của chứng chỉ TLS hoặc SSL.

Tìm ngày hết hạn chứng chỉ SSL từ tệp chứng chỉ được mã hóa PEM

Cú pháp như sau truy vấn tệp chứng chỉ về thời điểm chứng chỉ TLS / SSL sẽ hết hạn

$ openssl x509 -enddate -noout -in {/path/to/my/my.pem}
$ openssl x509 -enddate -noout -in /etc/nginx/ssl/www.cyberciti.biz.fullchain.cer.ecc
$ openssl x509 -enddate -noout -in /etc/nginx/ssl/www.nixcraft.com.fullchain.cer

notAfter=Dec 29 23:48:42 2020 GMT

Chúng tôi cũng có thể kiểm tra xem chứng chỉ có hết hạn trong khung thời gian nhất định hay không. Ví dụ: tìm hiểu xem chứng chỉ TLS / SSL có hết hạn trong vòng 7 ngày tới (604800 giây) hay không:

$ 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

Cách kiểm tra TLS và ngày hết hạn chứng chỉ SSL từ dòng lệnh

Tìm hiểu xem chứng chỉ TLS / SSL đã hết hạn hay sẽ hết hạn trong vòng N ngày tới chỉ trong vài giây.

Tập lệnh Shell để xác định ngày hết hạn chứng chỉ SSL từ chính tệp crt và cảnh báo sysadmin

Đây là một tập lệnh shell mẫu:

#!/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/cyberciti.biz/cyberciti.biz.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.cyberciti.biz/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

 

Xem cách gửi thông báo đẩy tới điện thoại của bạn từ tập lệnh. Tất nhiên, bạn cần một máy chủ SMTP hoạt động để định tuyến email. Tại nơi làm việc, chúng tôi đã định cấu hình AWS SES với Postfix MTA để định tuyến tất cả các email cảnh báo.

Nói xin chào với tập lệnh testssl và ssl-cert-check

Chúng ta có thể sử dụng trình bao testssl kịch bản, là một công cụ dòng lệnh miễn phí kiểm tra dịch vụ của máy chủ trên bất kỳ cổng nào để hỗ trợ mật mã TLS / SSL, giao thức cũng như các lỗ hổng mật mã gần đây và hơn thế nữa. Tải xuống và chạy nó như sau:

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

Một tùy chọn khác là chạy ssl-cert-check kịch bản, là một tập lệnh shell Bourne có thể được sử dụng để báo cáo về các chứng chỉ SSL sắp hết hạn. Tập lệnh được thiết kế để chạy từ cron và có thể cảnh báo qua e-mail hoặc cảnh báo nhật ký thông qua nagios.

Phần kết luận

Trong hướng dẫn nhanh này, bạn đã học cách tìm ngày hết hạn chứng chỉ TLS / SSL từ tệp chứng chỉ được mã hóa PEM, bao gồm tên DNS thực. Chứng chỉ TLS / SSL hết hạn có thể gây ra thời gian chết và nhầm lẫn cho người dùng cuối. Do đó, điều quan trọng là phải theo dõi ngày hết hạn của chứng chỉ TLS / SSL của chúng tôi. Xem các trang người đàn ông sau:

$ man x509
$ man s_client

Để lại bình luận

Địa chỉ email của bạn sẽ được chúng tôi bảo mật thông tin.