مشكلة طلب الشهادة الناتجة عن تعارض CNAME مع TXT
Categories:
لا يمكن لـ CNAME و TXT مع نفس اللاحقة العيش معًا
ربما يعرف من تعامل مع المجالات أنه لا يمكن لسجلات (A,AAAA) أن تتعايش مع CNAME، ولكن ربما لا يكونوا قد واجهوا حالة تعارض TXT مع CNAME.
في أي حالة يمكن أن يستخدم TXT و CNAME نفس اللاحقة في نفس الوقت؟
هناك حالة واحدة، وهي عند طلب شهادة LetsEncrypt باستخدام تحدي DNS-01 للتحقق من ملكية المجال.
- سيستخدم Certbot مفتاح ackey و acsecret أو token لإنشاء سجل TXT لـ
_acme-challenge.example.com - تقوم Letsencrypt بالبحث عن سجل TXT للتأكد من أن جهة الطلب لديها الحق في إنشاء سجل DNS، مما يثبت ملكيتها للمجال.
- تقوم Letsencrypt بإصدار الشهادة
- يقوم Certbot بإزالة سجل TXT لـ
_acme-challenge.example.com
إذا كان هناك بالفعل سجل CNAME لـ _acme-challenge.example.com عند إنشاء سجل TXT، فقد يفشل إنشاء سجل TXT، مما يؤدي إلى فشل التحقق من تحدي المجال.
لماذا يوجد سجل CNAME لـ _acme-challenge.example.com؟
أطلقت Alibaba Cloud حديثًا خدمة ESA (الحماية والأمن الحدودي)، مشابهة لـ cloudflare، وهي نسخة محدثة ومحسّنة من DCDN للتسريع الشامل. في الاستخدام المبكر، لم تدعم طلب شهادة اسم مجال واسع النطاق ذاتيًا، لذلك كنت أستخدم نصوصًا لنقل شهادة اسم المجال الواسعة النطاق التي أحصل عليها ذاتيًا إلى ESA بشكل دوري، مما يجعل الإدارة غير مريحة بعض الشيء. لاحقًا، تم إصدار DCV المُ托管، والذي يسمح بالحصول على شهادة اسم مجال واسع النطاق وتحديثها ذاتيًا. وفقًا للتعليمات، يمكن بالفعل إدارة شهادة اسم مجال واسع النطاق ذاتيًا. لكن الخطر المدفون لم يُكتشف إلا بعد عدة أشهر. يستمر هذا السجل CNAME في الوجود، مما يؤدي إلى عدم القدرة على إنشاء سجل TXT بنفس اللاحقة، وبالتالي لا يمكنني إثبات ملكية المجال في مكان آخر.

حلول
الحل الأول: عدم استخدام DCV المُ托管
يتطلب DCV المُ托管 كتابة _acme-challenge.example.com إلى قيمة محددة، في جوهره يعلن أن هذا المجال يخص طرفًا ثالثًا، ولا أمتلك السيطرة على هذا المجال بعد الآن.
إذا كنت بحاجة إلى شهادة اسم مجال واسع النطاق، يمكنك استخدام نصوص مهام لاستدعاء API الخاص بـ ESA، وتحميل شهادة اسم مجال واسع النطاق إلى ESA بشكل دوري.
الحل الثاني: عدم استخدام DNS-01 للتحقق من ملكية المجال
يوفر Certbot عدة طرق للتحقق من ملكية المجال (challenge، التحدي)، إلى جانب التحقق من اسم المجال الجذر (DNS-01)، يمكن أيضًا استخدام طرق مثل HTTP-01 و TLS-ALPN-01.
تتطلب طرق HTTP-01 و TLS-ALPN-01 وجود خدمة مسبقًا، والتحقق من إمكانية الوصول إليها قبل إصدار الشهادة.
يمكن لـ DNS-01 الحصول على الشهادة قبل إعداد الخدمة.
الحل الثالث: كسر الجدار بين ESA و DNS للتحليل السحابي
هذان النشاطان ينتميان إلى Alibaba Cloud، لكن كل منهما ينفذ一套 DNS API، إذا كان بإمكان ESA إعداد سجلات CNAME أو TXT في DNS للتحليل السحابي ذاتيًا، والحصول على الشهادة ثم حذف السجلات، فلن يؤثر ذلك على استخدام تحدي DNS-01 في أماكن أخرى.
الحل الرابع: عدم استخدام ESA من Alibaba
لا يوجد مثل هذا الشيء على cloudflare، الشهادات متاحة بحرية.