सवाल चलो एन्क्रिप्ट नवीकरण के लिए क्रॉन नौकरी


सेट करने के लिए यह सही तरीका है क्रॉन Apache2 में Let's Encrypt प्रमाणपत्र के नवीनीकरण के लिए? मैं उबंटू 16.04 का उपयोग करता हूं।

@monthly letsencrypt renew && service apache2 reload

67
2017-07-19 19:07


मूल


नीचे दिए गए उत्तरों में से एक के रूप में, certbot v0.19.0 (और शायद कुछ पहले) पहले से ही एक crontab प्रविष्टि बना @ /etc/cron.d/certbot - xgMz
साथ ही, नए प्रमाणपत्र को पुनर्प्राप्त करने के बाद सत्यापन प्रक्रिया के हिस्से के रूप में tls-sni सत्यापन के साथ certbot apache प्लगइन अपाचे को फिर से लोड करेगा। - xgMz


जवाब:


मासिक अक्सर पर्याप्त नहीं है। इस स्क्रिप्ट को कम से कम साप्ताहिक, और अधिमानतः दैनिक चलाना चाहिए। याद रखें कि जब तक वे समाप्ति के नजदीक न हों तब तक कर्ट को नवीनीकृत नहीं किया जाता है, और मासिक आपके मौजूदा कर्ट को कभी-कभी नवीनीकृत होने से पहले ही समाप्त हो जाएगा।

कार्यक्रम का नाम है certbot, जिसका नाम बदल दिया गया था letsencrypt। यदि आप अभी भी उपयोग कर रहे हैं letsencrypt, आपको वर्तमान संस्करण में अपडेट करने की आवश्यकता है।

उन मुद्दों के अलावा, यह मेरे क्रॉन नौकरियों के समान ही है।

43 6 * * * certbot renew --post-hook "systemctl reload nginx"

ध्यान दें कि 18.04 एलटीएस में letsencrypt पैकेज (अंत में) का नाम बदलकर प्रमाणपत्रबॉट कर दिया गया है। इसमें अब एक सिस्टम टाइमर शामिल है जिसे आप प्रमाण-पत्र नवीनीकरण को शेड्यूल करने में सक्षम कर सकते हैं systemctl enable certbot.timer तथा systemctl start certbot.timer। हालांकि, उबंटू ने हुक निर्दिष्ट करने का कोई तरीका नहीं दिया। आपको इसके लिए ओवरराइड सेट अप करना होगा certbot.service उल्लंघन करने के लिए ExecStart= आपकी वांछित कमांड लाइन के साथ, जब तक उबंटू इसे ठीक नहीं करता।


102
2017-07-19 19:33



मैं बस दौड़ सकता हूँ crontab -e और पेस्ट करें @daily certbot renew && systemctl reload apache2 और यह काम करेगा, है ना? मैं लिनक्स के साथ इतना अनुभवी नहीं हूँ। मुझे नहीं पता कि इस क्रॉन नौकरियों का परीक्षण कैसे करें। - user3448600
@ user3448600 आप पढ़ना चाहेंगे serverfault.com/q/449651/126632 - Michael Hampton♦
"समाप्ति के नजदीक" किस समय खिड़की है? - Andre Figueiredo
@AndreFigueiredo मेरे परीक्षण में सर्टिफिकेट ऑटो समाप्त होने से एक महीने पहले ऑटो नवीनीकरण करता है। मैं यह नहीं बता सका कि यह वास्तव में 30 दिन है (मुझे संदेह है कि यह है)। - glaux
अपाचे / httpd के लिए, certbot renew बस काम करेगा - aairey


मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, इसलिए मैं यहां जवाब दूंगा। मैंने हाल ही में (अक्टूबर 2017) स्थापित किया और उबंटू 16.04 सर्वर पर सर्टबॉट चलाया और नवीनीकरण क्रॉन नौकरी स्वचालित रूप से बनाई गई थी /etc/cron.d/certbot

क्रॉन जॉब बनाया गया है जो यहां बनाया गया था:

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew

यह जांचना एक अच्छा विचार होगा, अगर यह फ़ाइल crontab प्रविष्टि बनाने से पहले मौजूद है।


42
2017-10-22 15:34



मेरे लिए एक ही स्थिति। सर उठाने के लिए धन्यवाद! - Osborne Cox
मैंने देखा कि मेरे पास प्रमाण-पत्र चलाने के बाद भी यह था। बहुत अच्छा है कि एन्क्रिप्ट करने की अनुमति देता है! यह एक महान परियोजना है। - Bjorn Tipling
यह ध्यान देने योग्य है कि उपर्युक्त क्रॉन नौकरी नहीं होगा रन certbot renew अगर /run/systemd/system मौजूद है - ऐसा इसलिए है क्योंकि इसके बजाय एक systemd टाइमर certbot चल रहा है - यहां प्रमाणपत्रबॉट और सिस्टमड टाइमर के बारे में और पढ़ें। - Hamish Downer


प्रमाणपत्र दस्तावेज दिन में दो बार स्क्रिप्ट चलाने की सिफारिश करता है:

ध्यान दें:

यदि आप एक क्रॉन या व्यवस्थित नौकरी स्थापित कर रहे हैं, तो हम प्रतिदिन दो बार इसे चलाने की सलाह देते हैं (यह तब तक कुछ नहीं करेगा जब तक कि आपके प्रमाणपत्र नवीनीकरण या निरस्त करने के कारण न हों, लेकिन नियमित रूप से इसे चलाने से आपकी साइट को ऑनलाइन रहने का मौका मिलेगा मामला चलो एन्क्रिप्ट-आरंभिक निरसन कुछ कारणों से हुआ)। कृपया अपने नवीकरण कार्यों के लिए घंटे के भीतर एक यादृच्छिक मिनट का चयन करें।

जैसा कि माइकल हैम्पटन का उल्लेख है कि नाम प्रमाणपत्रबॉट में बदल गया है, लेकिन वे अभी भी -उटो विकल्प प्रदान करते हैं जो स्वयं को अद्यतन रखता है। certbot-auto कमांड को चलाने के लिए रूट निजीकृत की आवश्यकता है, इसलिए आपकी क्रॉन स्क्रिप्ट में लाइन को इस तरह कुछ दिखना चाहिए:

52 0,12 * * * root /full/path/to/certbot-auto renew --quiet

मेरे अपने मामले में certbot-auto गिट-उपयोगकर्ता की होम निर्देशिका में स्क्रिप्ट रखा गया है। तब सटीक आदेश है

52 0,12 * * * root /home/git/certbot-auto renew --quiet

ध्यान दें कि प्रलेखन में उदाहरण एक सापेक्ष पथ से मेल खाता है, जैसा कि डॉट द्वारा इंगित किया गया है जो भ्रमित हो सकता है:

./path/to/certbot-auto renew --quiet

पथ का परीक्षण करने के लिए पहले से खोल में नवीनीकरण आदेश को टेस्ट्रुन करना सुनिश्चित करें, अगर प्रमाण पत्र नवीनीकरण के लिए नहीं है तो कुछ भी नहीं होगा (इस परीक्षण को बिना चलाए --quiet क्या हो रहा है यह देखने के लिए ध्वज)।

सर्टिफिकेट को इस तरह नवीनीकृत होने पर सर्वर को पुनः लोड करने के लिए सख्ती से जरूरी नहीं है, क्योंकि सही तरीके से सेट होने पर लाइव प्रमाणपत्र का पथ बदल नहीं जाता है।

यह सही है अगर आप अपाचे चला रहे हैं - nginx के लिए, नवीनीकरण हुक जोड़ने पर विचार करें, जैसे कि:

52 0,12 * * * root certbot renew --renew-hook 'service nginx reload'

35
2018-01-09 09:07



मुझे यह पसंद है कि यह कैसे समझाया गया है, सेवा पुनरारंभ करने की जानकारी की आवश्यकता नहीं है (अगर कोई इस पर कुछ भी कर रहा है, तो दिन में दो बार मौका पाने का मौका है) और विशेषाधिकारों की जरुरत है। - Gusstavv Gil
यह सच नहीं है - यह है सर्वर को फिर से लोड करने के लिए आवश्यक है, कम से कम Nginx - nginx प्रारंभिक प्रमाणपत्र को कैश करने के लिए प्रतीत होता है और फ़ाइल में बदलाव होने पर भी एक नया प्रमाणपत्र पंजीकृत नहीं करता है। उपयोग करने के बारे में जानकारी के लिए इस पोस्ट को देखें --renew-hook सफल नवीनीकरण के बाद ही पुनरारंभ करें: guyrutenberg.com/2017/01/01/... - Whatcould


LetsEncrypt प्रमाणपत्र नवीनीकरण के लिए, मैं आमतौर पर उपयोग करता हूं getssl। यह एक बहुत आसान शेल रैपर है जो एसएसएच कनेक्शन के माध्यम से अन्य मशीनों पर सर्टिफिकेट भी इंस्टॉल कर सकता है।

क्रॉन प्रविष्टि निम्न है:

01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful

जैसा कि पहले से ही सुझाव दिया गया है, आपको दिन में दो बार इसे दैनिक या बेहतर भी चलाया जाना चाहिए।


4
2018-01-09 09:46





जैसा कि पहले से ही ग्लोक्स द्वारा उल्लेख किया गया है:

नोट: यदि आप एक क्रॉन या व्यवस्थित नौकरी स्थापित कर रहे हैं, तो हम चलने की अनुशंसा करते हैं   यह प्रति दिन दो बार (यह तब तक कुछ नहीं करेगा जब तक आपके प्रमाणपत्र देय न हों   नवीनीकरण या निरस्त करने के लिए, लेकिन नियमित रूप से इसे चलाने से आपकी साइट मिल जाएगी   लेट एन्क्रिप्टेड-शुरू होने पर ऑनलाइन रहने का मौका   निरसन कुछ कारणों से हुआ)। कृपया एक यादृच्छिक मिनट का चयन करें   आपके नवीकरण कार्यों के लिए घंटे के भीतर।

स्रोत: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache

तो मैं इसका उपयोग कर समाप्त हुआ (चल रहा है दिन में दो बार, 01:00 बजे और 13:00 बजे):

6 1,13 * * * certbot renew --post-hook "service apache2 restart"

या इससे भी बेहतर:

6 1,13 * * * certbot renew --renew-hook "service apache2 restart"

मैंने परीक्षण नहीं किया लेकिन यह भी काम करना चाहिए:

6 1,13 * * * certbot renew --post-hook "/etc/init.d/apache2 restart"
6 1,13 * * * certbot renew --renew-hook "/etc/init.d/apache2 restart"

--pre-hook और --ost-hook हुक हर नवीकरण प्रयास से पहले और बाद में चलाते हैं। यदि आप सफल हुक के बाद ही अपना हुक चलाने के लिए चाहते हैं,   इस तरह के कमांड में --renew-hook का उपयोग करें।

स्रोत: https://certbot.eff.org/docs/using.html


3
2017-07-05 09:49



"कृपया अपने नवीनीकरण कार्यों के लिए घंटे के भीतर एक यादृच्छिक मिनट चुनें।" - Isius
ऊपर मेरे नोट के अनुसार, आप बेहतर हो जाएगा --renew-hook, जो केवल आपके सर्वर को पुनरारंभ करता है जब प्रमाण वास्तव में नवीनीकृत होता है। - Whatcould
@Isius धन्यवाद, मैंने इसे एक यादृच्छिक मिनट में बदल दिया (6)। - JedatKinports
@ जेडैटकिन्पोर्ट्स: नहीं होना चाहिए --post-hook तथा --renew-hook होना service apache2 restart के बजाय service restart apache2? - Paul Ratazzi
आदेश है सेवा apache2 पुनरारंभ करें! service restart apache2 सही आदेश / सेवा नहीं है। - GTodorov


यही है वह जो मेरे द्वारा उपयोग किया जाता है:

/opt/letsencrypt/letsencrypt-auto renew

आउटपुट देता है:

Upgrading certbot-auto 0.8.1 to 0.9.1...
Replacing certbot-auto...
Creating virtual environment...
...
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem
-------------------------------------------------------------------------------

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem (success)

और यह कह रहा है कि अपाचे पहले से ही पुनरारंभ किया गया है, इसलिए इसे फिर से करने की आवश्यकता नहीं है। अगर मैं इसे फिर से चलाता हूं:

Cert not yet due for renewal

इसलिए दैनिक प्रमाण पत्र को नवीनीकृत करने में समस्या नहीं है, तो मेरा क्रॉन तब है:

@daily /opt/letsencrypt/cronautorenew.sh

मैं फ़ाइल को अलग करने के लिए लॉगिंग को ट्विक करने के लिए स्क्रिप्ट का उपयोग करता हूं, इसलिए यहां मेरा cronautorenew.sh है:

#!/usr/bin/env bash
printf "\nattempt to renew certificates" >>/var/log/letsencrypt_cron.log 2>&1
date >>/var/log/letsencrypt_cron.log 2>&1
/opt/letsencrypt/letsencrypt-auto renew >>/var/log/letsencrypt_cron.log 2>&1
printf "renew finished\n" >>/var/log/letsencrypt_cron.log 2>&1

1
2017-10-10 11:50





आपको कुछ भी सेट अप नहीं करना चाहिए। सर्टबॉट के किसी भी हालिया डेबियन / उबंटू इंस्टॉलेशन को एक सिस्टम टाइमर और एक क्रॉन जॉब स्थापित करना चाहिए (और क्रॉन जॉब केवल तभी चलाया जाएगा जब systemd सक्रिय नहीं है, इसलिए आप दोनों चल रहे नहीं हैं)।

systemd टाइमर

आप आदेश का उपयोग कर अपने systemd टाइमर की जांच कर सकते हैं systemctl list-timers (या systemctl list-timers --all यदि आप निष्क्रिय टाइमर भी दिखाना चाहते हैं)। कुछ इस तरह:

% sudo systemctl list-timers
NEXT                         LEFT        LAST                         PASSED      UNIT                         ACTIVATES
Fri 2018-08-03 06:17:25 UTC  10h left    Thu 2018-08-02 06:27:13 UTC  13h ago     apt-daily-upgrade.timer      apt-daily-upgrade.service
Fri 2018-08-03 11:43:29 UTC  15h left    Thu 2018-08-02 16:54:52 UTC  3h 7min ago certbot.timer                certbot.service
Fri 2018-08-03 12:44:58 UTC  16h left    Thu 2018-08-02 19:14:58 UTC  47min ago   apt-daily.timer              apt-daily.service
Fri 2018-08-03 19:43:44 UTC  23h left    Thu 2018-08-02 19:43:44 UTC  18min ago   systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2018-08-06 00:00:00 UTC  3 days left Mon 2018-07-30 00:00:09 UTC  3 days ago  fstrim.timer                 fstrim.service

सर्टबॉट टाइमर यहां होना चाहिए /lib/systemd/system/certbot.timer और यह निर्दिष्ट आदेश निष्पादित करेगा /lib/systemd/system/certbot.service

certbot.timer 12 घंटे (43200 सेकेंड) तक की यादृच्छिक देरी के बाद, 12 बजे और 12 बजे `certbot.service निष्पादित करेगा।

# cat /lib/systemd/system/certbot.timer
[Unit]
Description=Run certbot twice daily

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true

[Install]
WantedBy=timers.target

तथा certbot.service नवीनीकरण आदेश निष्पादित करेगा।

# cat /lib/systemd/system/certbot.service
[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://letsencrypt.readthedocs.io/en/latest/
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true

क्रॉन नौकरी

जैसा कि अन्य ने उल्लेख किया है, इसमें एक क्रॉन नौकरी भी स्थापित है /etc/cron.d/certbot:

# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

यह कर रहा है:

  • test -x /usr/bin/certbot -a \! -d /run/systemd/system - अगर जांच /usr/bin/certbot एक निष्पादन योग्य फ़ाइल है और वह /run/systemd/system है नहीं एक निर्देशिका यदि यह चेक सफल होता है तो केवल अगले बिट पर ही जारी रखें।
    • चेक का व्यवस्थित हिस्सा प्रभावी ढंग से मतलब है कि यदि systemd चल रहा है, तो क्रॉन नौकरी से प्रमाणपत्र नहीं चलाएं - टाइमर पर छोड़ दें।
  • perl -e 'sleep int(rand(43200))' - 0 सेकंड और 12 घंटे (43200 = 12 x 60 x 60) के बीच यादृच्छिक राशि सोएं।
  • certbot -q renew अपने प्रमाणपत्रों की जांच करें और यदि आवश्यक हो तो नवीनीकृत करें। -q झंडा "शांत" है - जब तक कोई त्रुटि न हो तब तक कोई आउटपुट उत्पन्न न करें।

मैं मूल रूप से क्रॉन नौकरी से उलझन में था क्योंकि यह systemd के कारण चलाने के लिए नहीं जा रहा था, तो प्रमाणपत्र कैसे चलाया जाएगा? मुझे जवाब मिला यह मंच पोस्ट यही वह है जिसे मैंने इस उत्तर पर आधारित किया।


1
2017-08-02 20:14



"आपको कुछ भी सेट अप नहीं करना चाहिए" लेकिन मेरा प्रमाण हाल ही में समाप्त हो गया, और मैंने लगभग 3 महीने पहले प्रमाण पत्र स्थापित किया था। /etc/cron.d/certbot मौजूद, systemctl list-timers दिखाता है certbot.timer, लेकिन मेरे certs नवीनीकृत नहीं किया गया था। चल रहा है certbot मैन्युअल रूप से ठीक काम किया, इसलिए मुझे नहीं पता कि क्या हो रहा है। एक पुराना स्कूल जोड़ना समाप्त हो गया crontab प्रवेश। - Dan Dascalescu