هل أنت قلق من عدم إمكانية تجديد (تجديد) شهادة حرف البدل Letencrypt تلقائيًا باستخدام أداة certbot؟ هذه الأداة يمكن أن تساعد!
بغض النظر عن الطلب أو التجديد، طالما أنها شهادة بدل، فلا يمكن التحقق من اسم مجال مقدم الطلب إلا باستخدام dns-01، مما يعني أنه يجب على مشغل certbot إضافة سجلات DNS TXT يدويًا.
إذا كتبت Cron (مثل 1 1 */1 * * root certbot-auto Renew) لتجديد شهادة حرف البدل تلقائيًا، فلن يتمكن Cron من إضافة سجل TXT تلقائيًا، وبالتالي ستفشل عملية التجديد.
يوفر certbot خطافًا يسمح لك بكتابة برنامج نصي Shell والسماح للبرنامج النصي باستدعاء واجهة API الخاصة بموفر خدمة DNS لإضافة سجلات TXT ديناميكيًا، بحيث لا يلزم التدخل اليدوي.
من بين أمثلة المكونات الإضافية والربطات المقدمة رسميًا بواسطة certbot، لا توجد أمثلة لخوادم DNS المحلية، لذلك كتبت مثل هذه الأداة، التي تدعم حاليًا Alibaba Cloud DNS و Tencent Cloud DNS و Huawei Cloud NDS و GoDaddy (لا يحتوي certbot على المعادل الرسمي).
لقد تم دمج العديد من العلاقات العامة مؤخرًا ولم يتم اختبارها. إذا كانت لديك أية أسئلة، فيرجى إعطائي تعليقاتك.
1: تحميل
$ git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
$ cd certbot-letencrypt-wildcardcertificates-alydns-au
$ chmod 0777 au.sh
2: التكوين
(1)domain.ini
إذا كان الملف domain.ini لا يحتوي على اسم المجال الجذر الخاص بك، فيرجى إضافته بنفسك.
(2) مفتاح DNS API:
ماذا يعني مفتاح API هذا؟ نظرًا لأنك تحتاج إلى تشغيل سجلات Alibaba Cloud DNS وTencent Cloud DNS من خلال واجهة برمجة التطبيقات، فأنت بحاجة إلى الحصول على مفتاح API من مزود خدمة اسم المجال، ثم تكوينه في ملف au.sh:
(3) حدد بيئة التشغيل
حاليًا، تدعم الأداة خمس بيئات وسيناريوهات تشغيل، والتي يتم استدعاؤها من خلال ملفات ومعلمات الربط:
اختر أي غلاف ربط (بما في ذلك المعلمات المقابلة) وفقًا لبيئة الخادم الخاصة بك وموفر خدمة اسم المجال، انظر أدناه لمعرفة الاستخدام المحدد.
3: التقدم بطلب للحصول على الشهادة
اختبار الأخطاء:
$ ./certbot-auto certonly -d *.example.com --manual --preferred-challenges dns --dry-run --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
تصحيح الأخطاء: قد تواجه سلسلة من المشكلات عند تشغيل DNS API، مثل عدم كفاية أذونات الرمز المميز لواجهة برمجة التطبيقات. إذا واجهت مشكلات ذات صلة، فيمكنك التحقق من /var/log/certd.log.
شرح مهم: --manual-auth-hook و --manual-cleanup-hook لهما ثلاث معلمات:
على سبيل المثال، إذا كنت تريد اختيار بيئة Python، فيمكنك تغيير إدخال --manual-auth-hook إلى "/script Directory/au.sh python aly add"، وإدخال --manual-cleanup-hook إلى "/ دليل البرنامج النصي/au.sh بيثون علي نظيف"
بعد التأكد من صحته، قم بتشغيله فعليًا (قم بإزالة معلمة --dry-run):
# 实际申请
$ ./certbot-auto certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
شرح المعلمة (لا داعي للقلق بشأن ذلك):
إذا كنت تريد التقدم بطلب للحصول على شهادات أحرف البدل لأسماء نطاقات متعددة (مدمجة في شهادة واحدة، وتسمى أيضًا شهادة SAN Wildcard )، فما عليك سوى إدخال معلمات -d مباشرة، على سبيل المثال:
$ ./certbot-auto certonly -d *.example.com -d *.example.org -d www.example.cn --manual --preferred-challenges dns --dry-run --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
1: تجديد كافة الشهادات الموجودة على الجهاز
$ ./certbot-auto renew --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
2: تجديد شهادة معينة
انظر أولاً إلى عدد الشهادات الموجودة على الجهاز:
$ ./certbot-auto certificates
ويمكنك مشاهدة العديد من الشهادات كما هو موضح في الشكل:
تذكر اسم الشهادة، مثل simplehttps.com، ثم قم بتشغيل الأمر التالي:
$ ./certbot-auto renew --cert-name simplehttps.com --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
تحرير الملف /etc/crontab:
#证书有效期<30天才会renew,所以crontab可以配置为1天或1周
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
إذا كان جهاز certbot هو نفس الجهاز الذي يقوم بتشغيل خدمات الويب (مثل nginx وApache)، فبعد تجديد الشهادة بنجاح، يمكنك بدء خادم الويب المقابل وتشغيل crontab التالي:
# 注意只有成功renew证书,才会重新启动nginx
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns --deploy-hook "service nginx restart" --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
ملاحظة: يوصى بالتشغيل بهذه الطريقة فقط على جهاز واحد. إذا كنت تريد مزامنة الشهادة مع خوادم ويب متعددة، فأنت بحاجة إلى حل آخر قيد التطوير حاليًا، والغرض الرئيسي هو مزامنة الشهادة مع خادم المجموعة.
رمز الاستجابة السريعة للحساب الرسمي:
"مقدمة متعمقة لـ HTTPS: من المبادئ إلى الممارسة" رمز الاستجابة السريعة: