skrip untuk memeriksa apakah sertifikat SSL valid

14

Saya memiliki beberapa sertifikat SSL, dan saya ingin diberi tahu, ketika sertifikat telah kedaluwarsa.

Ide saya adalah membuat cronjob, yang mengeksekusi perintah sederhana setiap hari.

Saya tahu bahwa opensslperintah di Linux dapat digunakan untuk menampilkan info sertifikat server jarak jauh, yaitu:

openssl s_client -connect www.google.com:443

Tapi saya tidak melihat tanggal kedaluwarsa dalam output ini. Juga, saya harus mengakhiri perintah ini dengan CTRL+ c.

Bagaimana saya bisa memeriksa kedaluwarsa sertifikat jauh dari skrip (lebih disukai menggunakan openssl) dan melakukannya dalam "mode batch" sehingga berjalan secara otomatis tanpa interaksi pengguna?

Martin Vegter
sumber
4
Saya akan merekomendasikan untuk juga mengirim servername dengan -servername www.google.comuntuk server yang mendukung SNI. Untuk menghindari perlunya penghentian kirim / dev / null ke sana< /dev/null
syss
Jika Anda menjalankan Red Hat / CentOS / Fedora, lihat certmonger . Ini juga tersedia dari repositori standar.
JRFerguson
Saya akan menambahkan cek sertifikat di alat pemantauan seperti nagios atau icinga.
sebix

Jawaban:

18

Perintah Anda sekarang akan mengharapkan permintaan http seperti GET index.phpmisalnya. Gunakan ini sebagai gantinya:

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: tidak akan memberikan input diikuti oleh eof, sehingga openssl keluar setelah menghubungkan.
    • openssl ...: perintah dari pertanyaan Anda
    • 2>/dev/null: output kesalahan akan diabaikan.
  • openssl x509: mengaktifkan Manajemen Data Sertifikat X.509.
    • Ini akan membaca dari input standar secara default
    • -noout: Menekan seluruh output sertifikat
    • -checkend 0: periksa apakah sertifikat kedaluwarsa dalam 0 detik berikutnya
kekacauan
sumber
-checkendjauh lebih mudah daripada skrip yang saya temukan yang sedang melakukan aritmatika tanggal!
Auspex
7

Itu membuat Anda mendapatkan sertifikat, tetapi itu tidak memecahkan kode itu. Karena itu akan diperlukan jika Anda menginginkan tanggal, Anda tidak melihatnya. Jadi yang diperlukan adalah Anda menyalurkannya ke x509aplikasi OpenSSL untuk memecahkan kode sertifikat:

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

Ini akan memberi Anda sertifikat dekode penuh pada stdout, termasuk tanggal validitasnya.

Wouter Verhelst
sumber
3

Jika Anda perlu memeriksa tanggal kedaluwarsa, berkat posting blog ini , temukan cara untuk menemukan informasi ini dengan informasi lain yang relevan dengan satu panggilan:

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

Outputnya termasuk penerbit, subjek (kepada siapa sertifikat diterbitkan), tanggal penerbitan dan akhirnya tanggal kedaluwarsa :

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
Robert Lujo
sumber