tập lệnh để kiểm tra xem chứng chỉ SSL có hợp lệ không


14

Tôi có một số chứng chỉ SSL và tôi muốn được thông báo khi chứng chỉ đã hết hạn.

Ý tưởng của tôi là tạo ra một cronjob, thực thi một lệnh đơn giản mỗi ngày.

Tôi biết rằng openssllệnh trong Linux có thể được sử dụng để hiển thị thông tin chứng chỉ của máy chủ từ xa, tức là:

openssl s_client -connect www.google.com:443

Nhưng tôi không thấy ngày hết hạn trong sản phẩm này. Ngoài ra, tôi phải chấm dứt lệnh này với CTRL+ c.

Làm cách nào tôi có thể kiểm tra hết hạn chứng chỉ từ xa từ tập lệnh (tốt nhất là sử dụng openssl) và thực hiện trong "chế độ hàng loạt" để nó tự động chạy mà không cần tương tác của người dùng?


4
Tôi cũng khuyên bạn nên gửi tên -servername www.google.commáy chủ cho các máy chủ hỗ trợ SNI Để tránh sự cần thiết phải gửi / dev / null cho nó< /dev/null
syss

Nếu Red Hat / CentOS / Fedora đang chạy của bạn, hãy xem certmonger . Nó cũng có sẵn từ các kho lưu trữ tiêu chuẩn.
JRFerguson

Tôi sẽ thêm kiểm tra chứng chỉ trong một công cụ giám sát như nagios hoặc icinga.
sebix

Câu trả lời:


18

Lệnh của bạn bây giờ sẽ mong đợi một yêu cầu http chẳng GET index.phphạn. Sử dụng cái này thay thế:

if true | openssl s_client -connect www.google.com:443 2>/dev/null | \
  openssl x509 -noout -checkend 0; then
  echo "Certificate is not expired"
else
  echo "Certificate is expired"
fi

  • true: sẽ chỉ cung cấp không có đầu vào theo sau bởi eof, do đó openssl thoát sau khi kết nối.
    • openssl ...: lệnh từ câu hỏi của bạn
    • 2>/dev/null: lỗi đầu ra sẽ bị bỏ qua.
  • openssl x509: kích hoạt Quản lý dữ liệu chứng chỉ X.509.
    • Điều này sẽ đọc từ đầu vào tiêu chuẩn mặc định
    • -noout: Loại bỏ toàn bộ đầu ra chứng chỉ
    • -checkend 0: kiểm tra xem chứng chỉ đã hết hạn trong 0 giây tiếp theo

-checkenddễ dàng hơn nhiều so với kịch bản mà tôi đã tìm thấy đang thực hiện số học ngày!
Auspex

7

Nó giúp bạn có được chứng chỉ, nhưng nó không giải mã được. Vì điều đó sẽ là cần thiết nếu bạn muốn ngày, bạn không nhìn thấy nó. Vì vậy, điều cần thiết là bạn đưa nó vào x509ứng dụng của OpenSSL để giải mã chứng chỉ:

openssl s_client -connect www.example.com:443 \
    -servername www.example.com </dev/null |\
    openssl x509 -in /dev/stdin -noout -text

Điều này sẽ cung cấp cho bạn chứng chỉ được giải mã đầy đủ trên thiết bị xuất chuẩn, bao gồm cả ngày hiệu lực của nó.


3

Nếu bạn cần kiểm tra ngày hết hạn, nhờ vào bài đăng trên blog này , đã tìm thấy một cách để tìm thông tin này với thông tin liên quan khác với một cuộc gọi:

echo | openssl s_client -servername unix.stackexchange.com -connect unix.stackexchange.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

Đầu ra bao gồm nhà phát hành, chủ đề (người được cấp giấy chứng nhận), ngày cấp và cuối cùng là ngày hết hạn :

issuer= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
subject= /C=US/ST=NY/L=New York/O=Stack Exchange, Inc./CN=*.stackexchange.com
notBefore=May 21 00:00:00 2016 GMT
notAfter=Aug 14 12:00:00 2019 GMT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.