Hướng dẫn kiểm tra ngày hết hạn chứng chỉ TLS / SSL từ dòng lệnh
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
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:
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.
-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.
-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.
x509 : Chạy tiện ích hiển thị và ký chứng chỉ.
-noout : Ngăn đầu ra của phiên bản được mã hóa của chứng chỉ.
-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
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
#!/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
Comments (0)