Apakah ini cara yang benar untuk menetapkan cron untuk pembaruan sertifikat Let's Encrypt di Apache2? Saya menggunakan Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
cron
lets-encrypt
pengguna3448600
sumber
sumber
/etc/cron.d/certbot
Jawaban:
Bulanan tidak cukup sering. Script ini harus dijalankan setidaknya setiap minggu, dan lebih disukai setiap hari. Ingatlah bahwa sertifikat tidak dapat diperpanjang kecuali mereka hampir kedaluwarsa, dan setiap bulan akan menyebabkan sertifikat Anda yang sudah ada terkadang kadaluwarsa sebelum diperbarui.
Nama programnya adalah
certbot
, yang diubah namanya dariletsencrypt
. Jika Anda masih menggunakanletsencrypt
, Anda perlu memperbarui ke versi saat ini.Selain masalah-masalah itu, ini hampir sama dengan pekerjaan cron saya.
Perhatikan bahwa pada 18,04 LTS paket letsencrypt telah (akhirnya) diganti namanya menjadi certbot. Sekarang termasuk timer systemd yang dapat Anda aktifkan untuk menjadwalkan pembaruan certbot, dengan
systemctl enable certbot.timer
dansystemctl start certbot.timer
. Namun, Ubuntu tidak menyediakan cara untuk menentukan kait. Anda harus mengatur override untukcertbot.service
menimpaExecStart=
dengan baris perintah yang Anda inginkan, sampai Ubuntu memperbaikinya.sumber
--renew-hook
daripada--post-hook
hanya restart jika sertifikat berhasil diperbarui.certbot renew
hanya akan berfungsi ™ExecStartPost=/usr/sbin/service nginx reload
. Bekerja untukku!ExecStartPost=
adalah ide yang bagus. Kenapa aku tidak memikirkan itu? Namun ketahuilah bahwaservice
perintah sudah usang; itu tidak akan ada selamanya. Beralih kesystemctl
perintah yang sesuai .Saya tidak punya reputasi untuk berkomentar, jadi saya akan jawab di sini. Saya baru-baru ini (Oktober 2017) menginstal dan menjalankan certbot pada server Ubuntu 16.04 dan pekerjaan pembaruan cron dibuat secara otomatis di
/etc/cron.d/certbot
.Inilah pekerjaan cron yang telah dibuat:
Sebaiknya periksa, apakah file ini sudah ada sebelum membuat entri crontab.
sumber
certbot renew
jika/run/systemd/system
ada - ini karena alih-alih timer systemd sedang menjalankan certbot - baca lebih lanjut tentang penghitung waktu certbot dan systemd di sini .43 6 * * *
akan membuatnya berjalan setiap hari pukul 6:43 pagi. Sekali sehari sudah mencukupi, tetapi salah satunya berfungsi dengan baik.The dokumentasi certbot merekomendasikan menjalankan script dua kali sehari:
Seperti Michael Hampton menyebutkan nama telah berubah menjadi certbot, tetapi mereka masih menyediakan opsi -auto yang terus diperbarui. The
certbot-auto
perintah perlu hak istimewa root untuk menjalankan, sehingga garis dalam naskah cron Anda harus terlihat seperti ini:Dalam kasus saya sendiri,
certbot-auto
skrip ditempatkan di direktori home git-user. Perintah tepatnya adalahPerhatikan bahwa contoh dalam dokumentasi sesuai dengan jalur relatif, seperti yang ditunjukkan oleh titik yang dapat membingungkan:
./path/to/certbot-auto renew --quiet
Pastikan untuk menguji kembali perintah perpanjangan dalam shell sebelumnya untuk menguji jalan, jika sertifikat tidak jatuh tempo untuk pembaruan tidak akan terjadi apa-apa (jalankan tes ini tanpa
--quiet
tanda untuk melihat apa yang terjadi).Tidak perlu memuat ulang server saat sertifikat diperbarui dengan cara ini, karena jalur ke sertifikat langsung tidak berubah jika disiapkan dengan benar.
Ini benar jika Anda menjalankan apache - untuk nginx, pertimbangkan untuk menambahkan kait perpanjangan, seperti:
sumber
--renew-hook
untuk memulai kembali setelah pembaruan yang berhasil: guyrutenberg.com/2017/01/01/…Anda tidak harus mengatur apa pun. Instalasi Certbot Debian / Ubuntu baru-baru ini harus menginstal timer systemd dan pekerjaan cron (dan pekerjaan cron hanya akan berjalan
certbot
jika systemd tidak aktif, sehingga Anda tidak dapat menjalankan keduanya).pengatur waktu systemd
Anda dapat memeriksa timer sistemd Anda menggunakan perintah
systemctl list-timers
(atausystemctl list-timers --all
jika Anda juga ingin menunjukkan timer tidak aktif). Sesuatu seperti ini:Timer certbot harus ada di sini
/lib/systemd/system/certbot.timer
dan itu akan menjalankan perintah yang ditentukan dalam/lib/systemd/system/certbot.service
certbot.timer
akan menjalankan `certbot.service pukul 12 pagi dan 12 siang, setelah penundaan acak hingga 12 jam (43200 detik).dan
certbot.service
akan menjalankan perintah perpanjangan.pekerjaan cron
Seperti yang disebutkan orang lain, ada juga cron job yang diinstal di
/etc/cron.d/certbot
:Ini dilakukan:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- memeriksa apakah/usr/bin/certbot
adalah file executable dan bahwa/run/systemd/system
adalah tidak sebuah direktori. Hanya melanjutkan ke bit berikutnya jika pemeriksaan ini berhasil.perl -e 'sleep int(rand(43200))'
- tidur dalam jumlah acak antara 0 detik dan 12 jam (43200 = 12 x 60 x 60).certbot -q renew
periksa sertifikat Anda dan perbarui jika diperlukan. The-q
bendera "tenang" - tidak menghasilkan output apapun kecuali ada kesalahan.Saya awalnya bingung dengan pekerjaan cron karena tidak akan berjalan karena systemd, jadi bagaimana certbot dijalankan? Saya menemukan jawaban di posting forum ini yang menjadi dasar jawaban ini.
sumber
/etc/cron.d/certbot
ada,systemctl list-timers
pertunjukancertbot.timer
, tetapi sertifikat saya tidak diperpanjang. Menjalankancertbot
secara manual bekerja dengan baik, jadi saya tidak tahu apa yang terjadi. Akhirnya menambahkancrontab
entri sekolah lama .test
untuk memeriksa apakah systemd aktif dan jika itu, pekerjaan cron segera keluar tanpa berjalancertbot
- lihat teks tentang pekerjaan cron. Saya akan mengedit teks untuk lebih tepatnya.Untuk perpanjangan sertifikat LetsEncrypt, saya biasanya menggunakan getsl . Ini adalah pembungkus shell yang sangat berguna yang bahkan dapat menginstal sertifikat pada mesin lain melalui koneksi SSH.
Entri cron adalah sebagai berikut:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
Seperti yang sudah disarankan, Anda harus menjalankannya setiap hari atau, bahkan lebih baik, dua kali sehari.
sumber
Seperti yang telah disebutkan oleh glaux:
Sumber: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
Jadi saya akhirnya menggunakan ini (berlari adalah dua kali sehari, pukul 01:00 dan pukul 13:00 setiap hari):
atau bahkan lebih baik:
Saya tidak menguji tetapi ini juga harus berfungsi:
Sumber: https://certbot.eff.org/docs/using.html
sumber
--renew-hook
, yang me-restart server Anda hanya ketika sertifikat tersebut benar-benar diperbarui.--post-hook
dan--renew-hook
menjadiservice apache2 restart
bukanservice restart apache2
?service restart apache2
bukan perintah yang benar / layanan.Inilah yang saya gunakan:
memberikan output sebagai:
Dan mengatakan bahwa apache sudah dimulai kembali, jadi tidak perlu melakukannya lagi. Jika saya jalankan lagi:
oleh karena itu tidak masalah untuk memperbarui sertifikat setiap hari, cron saya adalah:
Saya menggunakan skrip untuk men-tweak logging untuk memisahkan file, jadi di sini adalah cronautorenew.sh saya:
sumber
Anggota lain sudah memberikan jawaban yang lebih detail. Tapi sepertinya aku harus menyebutkannya di sini.
Pada certbot versi 0.21.1
--renew-hook
flag diubah menjadi--deploy-hook
Pastikan Anda tidak menggunakan flag yang sudah usang.sumber
Menurut panduan certbot EFF
Jika Anda tidak yakin apakah sistem Anda sudah otomatis atau belum, periksa crontab sistem Anda (biasanya di
/etc/crontab/
dan/etc/cron.*/*
$ crontab -l
dan timer systemd$ systemctl list-timers
.sumber