প্রশ্ন এর এনক্রিপ্ট পুনর্নবীকরণ জন্য ক্রন কাজ


সেট করার এই সঠিক উপায় ক্রন Apache2 এর Let's এনক্রিপ্ট শংসাপত্র পুনর্নবীকরণের জন্য? আমি উবুন্টু 16.04 ব্যবহার করি।

@monthly letsencrypt renew && service apache2 reload

68
2017-07-19 19:07


উত্স


নীচের উত্তরগুলির মধ্যে একটি হিসাবে, শটবোট v0.19.0 (এবং হয়ত কিছু আগে) ইতিমধ্যে একটি ক্রন্টব এন্ট্রি তৈরি করেছে @ /etc/cron.d/certbot - xgMz
এছাড়াও, নতুন শংসাপত্র পুনরুদ্ধারের পরে TLS-Sni বৈধতা সহ শংসাপত্রের অ্যাপ্যাচ প্লাগইনটি বৈধতা পদ্ধতির অংশ হিসাবে অ্যাপাকে পুনরায় লোড করবে। - xgMz


উত্তর:


মাসিক যথেষ্ট ঘন ঘন হয় না। এই স্ক্রিপ্ট কমপক্ষে সাপ্তাহিক, এবং বিশেষত দৈনিক চালানো উচিত। মনে রাখবেন যে সার্টিফিকেটের মেয়াদ শেষ না হওয়া পর্যন্ত শার্টগুলি পুনর্নবীকরণ করা হয় না এবং মাসিক আপনার পুনর্নবীকরণের আগেই আপনার বিদ্যমান শংসাপত্রগুলি মাঝে মাঝে মেয়াদ শেষ হয়ে যাবে।

প্রোগ্রামের নাম certbot, যা নামকরণ করা হয় letsencrypt। আপনি এখনও ব্যবহার করা হয় letsencrypt, আপনি বর্তমান সংস্করণে আপডেট করতে হবে।

পাশাপাশি যারা বিষয় থেকে, এটা আমার ক্রন কাজ হিসাবে একই সম্পর্কে।

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

মনে রাখবেন যে 18.04 LTS তে lenencrypt প্যাকেজটি (অবশেষে) নামকরণ করা হয়েছে সার্টবট। এটি এখন একটি systemd টাইমার যা আপনি সার্টবোট পুনর্নবীকরণের সময়সূচী করতে সক্ষম করতে পারেন, সহ রয়েছে systemctl enable certbot.timer এবং systemctl start certbot.timer। যাইহোক, উবুন্টু হুক নির্দিষ্ট করার উপায় সরবরাহ করে নি। আপনি জন্য একটি override সেট আপ করতে হবে certbot.service অগ্রাহ্য করা ExecStart= আপনার পছন্দসই কমান্ড লাইন দিয়ে, উবুন্টু এই পর্যন্ত সংশোধন করে।


103
2017-07-19 19:33



আমি শুধু চালাতে পারেন crontab -e এবং পেস্ট @daily certbot renew && systemctl reload apache2 এবং এটা কাজ করবে, ঠিক? আমি লিনাক্সের সাথে এত অভিজ্ঞ নই। আমি এই cron কাজ পরীক্ষা কিভাবে জানি না। - user3448600
@ ব্যবহারকারী 3448600 আপনি পড়তে চান serverfault.com/q/449651/126632 - Michael Hampton♦
কি সময় উইন্ডো "মেয়াদ শেষের কাছাকাছি" হয়? - Andre Figueiredo
@AndreFigueiredo আমার পরীক্ষায় সার্টিফিকেট স্বয়ংক্রিয়ভাবে সার্টিফিকেটের মেয়াদ শেষ হওয়ার প্রায় এক মাস আগে পুনর্নবীকরণ করে। আমি ঠিক 30 দিন কিনা জানিনা (আমি এটা সন্দেহ করি)। - glaux
Apache / 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

একটি ক্রন্টব এন্ট্রি তৈরি করার আগে এই ফাইলটি ইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করা একটি ভাল ধারণা।


43
2017-10-22 15:34



আমার জন্য একই অবস্থা। সতর্ক থাকুন জন্য ধন্যবাদ! - Osborne Cox
আমি সার্টবোট চলমান পরে ভাল ছিল এই দেখেছি। খুব চমৎকার যে এনক্রিপ্ট এই কাজ করতে দেয়! এটি একটি মহান প্রকল্প। - Bjorn Tipling
উপরের ক্রন কাজ সচেতন হচ্ছে এটা মূল্যবান না করবে না চালান certbot renew যদি /run/systemd/system বর্তমান - এটি একটি systemd টাইমার শংসাপত্র চলমান হয়, কারণ এই হয় - এখানে certbot এবং systemd টাইমার সম্পর্কে আরও পড়ুন। - Hamish Downer


দ্য Certbot ডকুমেন্টেশন স্ক্রিপ্টটি দিনে দুইবার চালানোর সুপারিশ:

বিঃদ্রঃ:

যদি আপনি একটি ক্রন বা systemd কাজ সেট আপ করছেন, আমরা প্রতিদিন এটি দুইবার চালানোর সুপারিশ করি (আপনার শংসাপত্রগুলি পুনর্নবীকরণ বা প্রত্যাহারের জন্য এটি না হওয়া পর্যন্ত এটি কিছু করবে না, তবে নিয়মিত এটি চালানো আপনার সাইটে অনলাইন থাকার সুযোগ দেবে। মামলার একটি কারণ এর জন্য এনক্রিপ্ট-প্রবর্তিত বাতিল বাতিল করা হয়েছে)। আপনার পুনর্নবীকরণ কর্ম জন্য ঘন্টা মধ্যে একটি র্যান্ডম মিনিট নির্বাচন করুন।

মাইকেল হ্যাম্পটন উল্লেখ করেছেন যে নামটি সার্টবোটে পরিবর্তিত হয়েছে, তবে তারা এখনও -auto বিকল্পটি সরবরাহ করে যা নিজে আপডেট হয়। দ্য certbot-auto কমান্ডটি চালানোর জন্য রুট priviledges প্রয়োজন, তাই আপনার ক্রন স্ক্রিপ্ট লাইন এই মত কিছু চেহারা উচিত:

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

আমার নিজের ক্ষেত্রে certbot-auto স্ক্রিপ্ট git-user এর হোম ডিরেক্টরিতে স্থাপন করা হয়। তারপর সঠিক কমান্ড হয়

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

নোট করুন যে ডকুমেন্টেশনের উদাহরণটি আপেক্ষিক পাথের সাথে সম্পর্কিত, যা বিন্দু দ্বারা বিভ্রান্তিকর হতে পারে তা নির্দেশ করে:

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

যদি শংসাপত্রটি পুনর্নবীকরণের জন্য নূন্যতম না হয় তবে পরীক্ষাটি অবশ্যই পরীক্ষার পূর্বে শেলে পুনর্নবীকরণ কমান্ড পরীক্ষা করা নিশ্চিত করুন (এই পরীক্ষাটি চালানো ছাড়া --quiet কি ঘটেছে তা দেখতে পতাকা)।

যখন সার্টিফিকেটটি এইভাবে পুনর্নবীকরণ করা হয় তখন সার্ভার পুনরায় লোড করার জন্য কঠোরভাবে প্রয়োজনীয় নয়, কারণ সঠিকভাবে সেট আপ করলে লাইভ শংসাপত্রের পথ পরিবর্তন হয় না।

আপনি যদি apache চালাচ্ছেন তবে এটি সত্য - 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





ইতিমধ্যে glaux দ্বারা উল্লিখিত:

দ্রষ্টব্য: যদি আপনি একটি cron বা systemd কাজ সেট আপ করা হয়, আমরা চলমান সুপারিশ   এটি প্রতিদিন দুইবার (আপনার শংসাপত্রের কারণে এটি কিছু না করবে   পুনর্নবীকরণ বা বাতিল, কিন্তু নিয়মিত এটি চলমান আপনার সাইট দিতে হবে   একটি লেট এর এনক্রিপ্ট-প্রবর্তিত ক্ষেত্রে অনলাইন থাকার একটি সুযোগ   বাতিল কিছু কারণে ঘটেছে)। একটি র্যান্ডম মিনিট নির্বাচন করুন   আপনার পুনর্নবীকরণ কর্ম জন্য ঘন্টা মধ্যে।

সূত্র: 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"

- পূর্ব-হুক এবং - পোস্ট-হুক হুকগুলি প্রতিটি পুনর্নবীকরণের প্রচেষ্টা আগে এবং পরে চালানো হয়। যদি আপনি সফলভাবে পুনর্নবীকরণের পরে আপনার হুক চালাতে চান,   এই ধরনের কমান্ডে --renew-hook ব্যবহার করুন।

সূত্র: https://certbot.eff.org/docs/using.html


3
2017-07-05 09:49



"আপনার পুনর্নবীকরণ কাজগুলির জন্য ঘন্টার মধ্যে একটি র্যান্ডম মিনিট নির্বাচন করুন।" - Isius
উপরে আমার নোট প্রতি, আপনি ভাল বন্ধ হবে --renew-hook, যা শংসাপত্র আসলে পুনর্নবীকরণ করা হয় শুধুমাত্র যখন আপনার সার্ভার পুনরায় আরম্ভ। - Whatcould
@ ইসিউস ধন্যবাদ, আমি এটি একটি এলোমেলো মিনিটে (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

আমি পৃথক ফাইল লগিং tweak স্ক্রিপ্ট ব্যবহার, তাই এখানে আমার 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 সক্রিয় না হলে cron কাজ শুধুমাত্র চালানো হবে, সুতরাং আপনি উভয় চলমান পাবেন না)।

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 টা এবং 1২ টাতে `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

ক্রন কাজ

অন্যদের উল্লেখ আছে, একটি cron কাজ ইনস্টল করা আছে /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 অংশটি কার্যকরভাবে অর্থাত্ যদি systemd চলছে, ক্রন কাজের থেকে শটবোট চালান না - টাইমারটি ছেড়ে যান।
  • perl -e 'sleep int(rand(43200))' - 0 সেকেন্ড এবং 12 ঘন্টা (43200 = 12 x 60 x 60) এর মধ্যে একটি র্যান্ডম পরিমাণ ঘুমাও।
  • certbot -q renew আপনার সার্টিফিকেট চেক এবং প্রয়োজন হলে পুনর্নবীকরণ। দ্য -q পতাকাটি "নীরব" - যদি কোন ত্রুটি না থাকে তবে আউটপুট উত্পাদন করবেন না।

আমি মূলত cron কাজ দ্বারা বিভ্রান্ত ছিল হিসাবে এটি systemd কারণে চালানো যাচ্ছে না, তাই কিভাবে certbot চালানো হবে? আমি উত্তর খুঁজে পেয়েছি এই ফোরাম পোস্ট যা আমি এই উত্তর উপর ভিত্তি করে।


1
2017-08-02 20:14



"আপনাকে কিছু সেট আপ করতে হবে না" তবে আমার শংসাপত্র সম্প্রতি মেয়াদ শেষ হয়ে গেছে, এবং আমি প্রায় 3 মাস আগে সার্টবুকটি ইনস্টল করেছি। /etc/cron.d/certbot বিদ্যমান, systemctl list-timers শো certbot.timer, কিন্তু আমার সার্টিফিকেট পুনর্নবীকরণ করা হয় নি। চলমান certbot নিজে জরিমানা কাজ করেছে, তাই আমি কি ঘটছে তা জানি না। একটি পুরানো স্কুল যোগ শেষ crontab এন্ট্রি। - Dan Dascalescu