شهادات HTTPS مجانية مع Let's Encrypt
Let's Encrypt جهة إصدار شهادات تصدر شهادات HTTPS مجانية لنطاقك. على VPS يمكنك الحصول على شهادة بضعة أوامر باستخدام Certbot، أو بلا أوامر إطلاقًا باستخدام Caddy، وكلاهما يجددها من تلقاء نفسه. وهناك شرطان: أن يشير النطاق إلى عنوان IP لخادمك، وأن يكون المنفذان 80 و443 مفتوحين من الخارج.
لماذا تحتاج إلى HTTPS؟
يشفّر HTTPS حركة البيانات بين المتصفح والخادم. فلا يستطيع طرف ثالث على الشبكة قراءة كلمة المرور في نموذج الدخول أو تفاصيل الطلب. وقد تعرض المتصفحات تحذير "غير آمن" على المواقع التي لا تستخدم HTTPS. وشهادة Let's Encrypt مجانية، فلم يبقَ سبب وجيه لتجاهل HTTPS.
قبل أن تبدأ
- يجب أن يبيّن سجل A للنطاق عنوان IP لخادمك. وللتحقق نفّذ
dig +short example.com. ينبغي أن يكون الناتج عنوان IP لخادمك. - يجب أن يكون المنفذان 80 و443 مفتوحين، لأن التحقق يتم عبر المنفذ 80 (HTTP-01). وإذا كنت تستخدم ufw فنفّذ
sudo ufw allow 80/tcpوsudo ufw allow 443/tcp. وإن كان لخادمك جدار حماية منفصل في لوحته فتحقق من قواعده هناك أيضًا. - إذا كان للنطاق سجل AAAA (IPv6) فيجب أن يشير إلى هذا الخادم أيضًا. وإن لم يكن كذلك فاحذف السجل.
- يجب أن يكون خادم الويب يعمل ويعرف هذا النطاق.
التثبيت والتحقق بـ Certbot على Nginx أو Apache
تنصح تعليمات Certbot الرسمية بحزمة snap. تأكد أن snapd مثبّت على الخادم (وهو كذلك عادةً على Ubuntu)، وأزل أي Certbot أقدم مثبّت عبر apt.
- ثبّت Certbot:
sudo snap install --classic certbot - اجعل الأمر متاحًا في كل مكان:
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot - احصل على الشهادة ودعها تُثبَّت في خادم الويب. نفّذ
sudo certbot --nginxلـ Nginx أوsudo certbot --apacheلـ Apache. - أجب عن الأسئلة: عنوان بريدك الإلكتروني، والنطاقات التي تريد الشهادة لها، وهل تريد تحويل HTTP إلى HTTPS.
- جرّب التجديد:
sudo certbot renew --dry-run
إذا أردت الحصول على الشهادة فقط وضبط الباقي بنفسك فنفّذ sudo certbot certonly --nginx. تضيف حزمة Certbot مهمة مجدولة من تلقاء نفسها (cron أو مؤقّت systemd)، وتراها في مخرجات systemctl list-timers. ويسرد sudo certbot certificates شهاداتك وتواريخ انتهائها. يجدد Certbot الشهادة حين تقترب مدتها من النفاد، ولا تفعل أنت شيئًا. ومع ذلك قد يفشل التجديد يومًا (بسبب قاعدة في جدار الحماية مثلًا)، فنفّذ --dry-run بين حين وآخر.
للتحقق من الشهادة، انظر أولًا إلى أيقونة القفل في شريط عنوان المتصفح. ولمعرفة تاريخ الانتهاء بأمر، نفّذ:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
السطر notAfter في المخرجات هو تاريخ انتهاء الشهادة. وإذا كنت لا تستخدم التحويل الذي يضيفه Certbot فحوّل HTTP إلى HTTPS بنفسك. وفي Nginx أضف السطر return 301 https://$host$request_uri; إلى كتلة server التي تستمع على المنفذ 80.
مع Caddy وبلا أوامر
إذا كنت تستخدم Caddy فلا حاجة إلى تثبيت أي شيء إضافي. فللنطاق المذكور في إعداداته، يحصل Caddy على الشهادة من Let's Encrypt أو ZeroSSL ويجددها ويحوّل HTTP إلى HTTPS. وبحسب توثيقه الرسمي، يجب أن يشير سجلا A وAAAA للنطاق إلى الخادم، وأن يكون المنفذان 80 و443 قابلين للوصول من الخارج، وأن يكون مجلد بيانات Caddy دائمًا وقابلًا للكتابة. وإذا شغّلت Caddy في Docker فركّب ذلك المجلد على volume. وإلا اختفت الشهادات حين تُحذف الحاوية، وقد يؤدي طلبها من جديد إلى بلوغ حد المعدل.
شهادات wildcard
شهادة wildcard (*.example.com) تغطي كل النطاقات الفرعية بشهادة واحدة، ولا يمكن الحصول عليها إلا بتحقق DNS-01. لا يستخدم هذا التحقق المنفذ 80. بل يطلب منك وضع سجل TXT في DNS نطاقك. ولهذا يحتاج مزوّد DNS لديك إلى API، وتحفظ مفتاح API على الخادم. وتصف وثائق Let's Encrypt حفظ مفاتيح كهذه على خادم ويب بأنه محفوف بالمخاطر. وإن لم تكن بحاجة إلى wildcard فالحصول على شهادات للنطاقات منفردةً بـ HTTP-01 أبسط ولا يتطلب حفظ مفتاح DNS.
الأخطاء الشائعة
| العَرَض | السبب المحتمل | الحل |
|---|---|---|
| يفشل التحقق ولا يُعثر على النطاق | سجل A يشير إلى عنوان IP خاطئ أو لم ينتشر بعد | تحقق من عنوان IP بالأمر dig +short example.com وانتظر |
| انتهت المهلة | المنفذ 80 مغلق | افتح 80 في ufw وفي جدار حماية اللوحة إن كان لديك |
| ينجح التحقق أحيانًا ويفشل أحيانًا أخرى | سجل AAAA يشير إلى خادم آخر | أصلح سجل AAAA أو احذفه |
| خطأ حد المعدل | محاولات كثيرة جدًا | استخدم --dry-run للاختبارات وراجع الصفحة الرسمية لمعرفة الحدود |
| التجديد لا يعمل | لا توجد مهمة مجدولة، أو خادم الويب يحجب المنفذ 80 | يعرض sudo certbot renew --dry-run الخطأ |
تذكر رسالة الخطأ عادةً أي تحقق فشل وأي عنوان حاولت Let's Encrypt الوصول إليه على خادمك. اقرأ الرسالة كما هي. فالجواب كثيرًا ما يكون فيها.
بحسب صفحة Let's Encrypt الرسمية، هناك حد قدره 5 شهادات في الأسبوع للمجموعة نفسها من أسماء النطاقات، و5 عمليات تحقق فاشلة في الساعة للاسم نفسه. لذا استخدم --dry-run أثناء التجربة. فهو يجرّب التجديد في بيئة الاختبار ولا يستهلك حدّك الفعلي.
في التطبيقات الجاهزة على Seturack
تُفتح التطبيقات الجاهزة (WordPress وNextcloud وغيرها) عبر HTTPS على عنوان sslip.io مشتق من عنوان IP لديك، فلا حاجة إلى اسم نطاق. وحين تربط نطاقك الخاص يحصل Caddy على الشهادة من جديد ولا تثبّت شيئًا إضافيًا. وخطوات تعريف Caddy والتطبيق بالنطاق في مقالة المساعدة هذه.
التعليقات0
لا توجد تعليقات بعد
كن أول من يشارك رأيه.
يرجى تسجيل الدخول أو إنشاء حساب لترك تعليق.