يوضح لك هذا الدليل كيفية إنشاء CSR (طلب توقيع الشهادة) على qmail باستخدام سطر أوامر OpenSSL. لا يتضمن qmail (وفرعه الذي يخضع للصيانة النشطة، notqmail) أداة CSR مدمجة. تستخدم OpenSSL لإنشاء ملفين دفعة واحدة: مفتاح خاص يبقى على الخادم، وCSR الذي تقدمه إلى جهة إصدار الشهادات (CA) الخاصة بك.
يشفّر CSR اسم مضيف البريد الذي يعرضه خادمك أثناء STARTTLS، وتفاصيل مؤسستك، والنصف العام من المفتاح. المفتاح الخاص المطابق لا يغادر الخادم أبدًا. إذا فقدته، تصبح الشهادة الصادرة غير قابلة للاستخدام ويتعين عليك إنشاء زوج جديد.
ملاحظة حول qmail مقابل notqmail: تم تجميد qmail الأصلي بواسطة Daniel J. Bernstein في عام 1998 ولم يتلقَّ أي تحديثات من المصدر منذ ذلك الحين. notqmail (أحدث إصدار: 1.09، مايو 2024) هو الفرع الذي يخضع للصيانة من قبل المجتمع، والذي يضيف إصلاحات أمنية وتوافق بناء حديثًا واستمرارًا في العمل على قابلية النقل. TLS ليس جزءًا منه: في notqmail، كما هو الحال في qmail الأصلي، يأتي STARTTLS من رقعة (patch) خارجية، وتسجل ملاحظات إصدار 1.09 أن رقعة smtp-tls الحالية لا تنطبق على ذلك الإصدار وأن هناك حاجة إلى رقعة جديدة من المصدر. تحقق من حالة الرقعة للإصدار الذي تشغّله قبل طلب شهادة. عملية إنشاء CSR متطابقة في كلتا الحالتين، لأنها تستخدم OpenSSL بدلاً من أي ملف تنفيذي خاص بـ qmail. إذا كنت لا تزال تشغّل qmail الأصلي، ففكر في الانتقال إلى notqmail أو Postfix للحصول على دعم أمني مستمر.
المتطلبات الأساسية
- وصول جذري أو عبر sudo إلى الخادم الذي يشغّل qmail (أو notqmail).
- تثبيت OpenSSL. يأتي مدمجًا في النظام الأساسي لكل توزيعة رئيسية من Linux وBSD. تحقق باستخدام
openssl version. - اسم مضيف البريد المؤهل بالكامل الذي تريده على الشهادة، على سبيل المثال mail.example.com. يجب أن يتطابق هذا مع سجل MX الذي يتصل به العملاء عبر STARTTLS، وليس مع النطاق الأساسي المجرد.
الخطوة 1: تحضير دليل للمفتاح وCSR
يقرأ Qmail-smtpd شهادة TLS الخاصة به من المسار /var/qmail/control/servercert.pem، وهو المسار الذي تحدده رقعة TLS بشكل ثابت. أنشئ دليلاً فرعيًا لمواد المفتاح وقم بتقييد الوصول إليه بحيث يقتصر على الجذر:
sudo mkdir -p /var/qmail/control/ssl
sudo chmod 700 /var/qmail/control/ssl
cd /var/qmail/control/ssl
ستنشئ المفتاح وCSR داخل هذا الدليل. بعد أن تصدر جهة إصدار الشهادات الشهادة، تدمج الملفات في ملف servercert.pem الذي يقرأه qmail-smtpd عند بدء التشغيل.
الخطوة 2: إنشاء المفتاح الخاص وCSR
نفّذ الأمر أدناه. ينشئ هذا الأمر المفتاح الخاص وCSR في خطوة واحدة ويتضمن اسم الموضوع البديل (SAN) الذي تتطلبه عملاء البريد الحديثة وجهات إصدار الشهادات. يجب أن يسرد SAN اسم مضيف البريد (الاسم الذي يشير إليه سجل MX الخاص بك):
sudo openssl req -new -newkey rsa:2048 -nodes
-keyout /var/qmail/control/ssl/mail.example.com.key
-out /var/qmail/control/ssl/mail.example.com.csr
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=mail.example.com"
-addext "subjectAltName=DNS:mail.example.com"
إليك ما يفعله كل جزء:
- req -new ينشئ طلب توقيع شهادة جديد.
- -newkey rsa:2048 ينشئ مفتاحًا خاصًا جديدًا من نوع RSA بطول 2048 بت. يُعد 2048 بت الحد الأدنى الحالي للشهادات العامة؛ يمكنك استخدام rsa:4096 للحصول على مفتاح أكبر.
- -nodes يترك المفتاح الخاص غير مشفّر (بدون عبارة مرور)، حتى يتمكن qmail-smtpd من تحميله عند بدء التشغيل دون طلب إدخال.
- -keyout يكتب المفتاح الخاص. حافظ على خصوصية هذا الملف ولا ترسله أبدًا لأي شخص، بما في ذلك جهة إصدار الشهادات.
- -out يكتب CSR الذي تقدمه إلى جهة إصدار الشهادات.
- -subj يملأ حقول الموضوع مباشرة بحيث يعمل الأمر دون طلبات تفاعلية. اضبط CN (الاسم الشائع) على اسم مضيف البريد الخاص بك.
- -addext “subjectAltName=…” يضيف إدخال SAN. تُصدر جهات إصدار الشهادات وفقًا لقائمة SAN، لذا يجب أن يظهر اسم مضيف البريد هنا.
استبدل mail.example.com باسم المضيف الحقيقي الذي يتصل به العملاء (غالبًا ما يكون نفس اسم سجل MX الخاص بك)، وقم بتعديل قيم -subj لتتوافق مع مؤسستك. يجب أن يكون رمز البلد المكون من حرفين (C) بأحرف كبيرة، على سبيل المثال US أو GB. بالنسبة لشهادة التحقق من النطاق (DV)، لا يتم التحقق من حقول المؤسسة، لكن الأمر لا يزال بحاجة إلى قيم صالحة. يوقّع OpenSSL الحديث على CSR باستخدام SHA-256 افتراضيًا، وهو ما تتطلبه كل جهة إصدار شهادات عامة.
إذا كنت تفضل ملء الحقول بشكل تفاعلي بدلاً من استخدام -subj، فاحذف تلك العلامة وسيطلب منك OpenSSL إدخال كل قيمة:
sudo openssl req -new -newkey rsa:2048 -nodes
-keyout /var/qmail/control/ssl/mail.example.com.key
-out /var/qmail/control/ssl/mail.example.com.csr
-addext "subjectAltName=DNS:mail.example.com"
عند المطالبة، اترك حقلي challenge password وoptional company name فارغين بالضغط على Enter. تتجاهل جهات إصدار الشهادات هذه الحقول، وقد تسبب عبارة مرور التحدي مشاكل لاحقًا.
تغطية أكثر من اسم مضيف واحد
إذا كانت نفس نسخة qmail تستجيب على أكثر من اسم واحد (على سبيل المثال، كل من mail.example.com وsmtp.example.com)، فأدرج كل اسم مضيف في قيمة SAN، مفصولة بفواصل:
-addext "subjectAltName=DNS:mail.example.com,DNS:smtp.example.com"
يجب أن يظل الاسم الشائع هو اسم مضيف البريد الرئيسي. إضافة النطاق الأساسي المجرد إلى SAN مفيدة فقط إذا كانت عملاء البريد تتصل به مباشرة في أي وقت؛ إذا كان سجل MX الخاص بك يشير إلى اسم مضيف فرعي، فلست بحاجة إلى النطاق الأساسي على الشهادة.
هل تفضل مفتاح ECDSA؟
مفاتيح ECDSA أصغر حجمًا وأسرع من RSA بنفس مستوى الأمان، وهي مدعومة من قبل كل عملاء البريد وجهات إصدار الشهادات الحالية. لإنشاء مفتاح P-256 (prime256v1) وCSR بدلاً من ذلك، استبدل وسيطة -newkey:
sudo openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes
-keyout /var/qmail/control/ssl/mail.example.com.key
-out /var/qmail/control/ssl/mail.example.com.csr
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=mail.example.com"
-addext "subjectAltName=DNS:mail.example.com"
لاحظ أن qmail الأصلي مع رقعات TLS الخاصة بـ DJB قد لا يدعم ECDSA. إذا كنت تشغّل notqmail مع إصدار حديث من OpenSSL، فإن ECDSA يعمل دون مشاكل.
الخطوة 3: حماية المفتاح الخاص
قم بتقييد الوصول إلى المفتاح الخاص بحيث يمكن للجذر فقط قراءته. لا يُحتاج إلى ملف المفتاح الأصلي إلا عند بناء ملف servercert.pem المدمج لاحقًا، لذا فإن ملكية الجذر والوضع 600 صحيحان:
sudo chown root:root /var/qmail/control/ssl/mail.example.com.key
sudo chmod 600 /var/qmail/control/ssl/mail.example.com.key
ملف CSR ليس سريًا (فهو يحتوي فقط على المفتاح العام وتفاصيل الموضوع الخاصة بك)، لكن الاحتفاظ به في نفس الدليل المقيد يحافظ على تنظيم البنية.
الخطوة 4: التحقق من CSR
قبل تقديم الطلب، تأكد من أنه يحتوي على اسم المضيف وSAN الصحيحين وأن توقيعه صالح:
openssl req -noout -text -verify -in /var/qmail/control/ssl/mail.example.com.csr
ابحث عن عبارة verify OK في المُخرَجات، وتحقق من أن سطر Subject يعرض اسم مضيف البريد الخاص بك كاسم شائع، وتأكد من أن قسم X509v3 Subject Alternative Name يسرد كل اسم مضيف تتوقعه. إذا كان هناك اسم SAN مفقود، فأعد إنشاء CSR بالقيمة الصحيحة لـ -addext: لا يمكن لجهة إصدار الشهادات إضافة أسماء مضيف بعد الإصدار. يمكنك أيضًا لصق CSR في أداة CSR Decoder الخاصة بنا عبر الإنترنت للتحقق من هذه الحقول في المتصفح.
الخطوة 5: تقديم CSR
افتح ملف CSR وانسخ محتواه بالكامل، بما في ذلك سطري BEGIN وEND:
cat /var/qmail/control/ssl/mail.example.com.csr
تبدو الكتلة على هذا الشكل. انسخ كل شيء من السطر الأول إلى السطر الأخير، بما في ذلك الشرطات الخمس على كلا جانبي علامتي BEGIN وEND:
-----BEGIN CERTIFICATE REQUEST-----
MIIC...base64-encoded data...AB
-----END CERTIFICATE REQUEST-----
الصق تلك الكتلة في نموذج طلب SSL الخاص بك. بعد أن تتحقق جهة إصدار الشهادات من CSR وتصدر الشهادة، اتبع دليل تثبيت SSL على qmail الخاص بنا لنشرها. احتفظ بملف .key على الخادم: فأنت بحاجة إليه مع الشهادة الصادرة لتفعيل STARTTLS، ويجب ألا ترسله أبدًا إلى جهة إصدار الشهادات أو إلى أي شخص آخر.
إذا كنت تفضل عدم استخدام سطر الأوامر، فقم ببناء الطلب باستخدام CSR Generator الخاص بنا والصق النتيجة في طلبك. تُرجع الأداة مفتاحًا خاصًا مطابقًا تضعه في نفس المسار على الخادم.
أين تذهب الملفات في qmail
للتوضيح، هذه هي الطريقة التي يتم بها ربط الملفات التي أنشأتها للتو في qmail بمجرد أن تُعيد جهة إصدار الشهادات الشهادة والشهادة الوسيطة (حزمة CA). يقرأ Qmail-smtpd مواد TLS الخاصة به من ملف PEM واحد مدمج في المسار /var/qmail/control/servercert.pem. يجب أن يحتوي هذا الملف على المفتاح الخاص وشهادة الخادم والشهادات الوسيطة، مُدمجة بهذا الترتيب:
cat mail.example.com.key mail.example.com.crt intermediate.pem
> /var/qmail/control/servercert.pem
sudo chown root:nofiles /var/qmail/control/servercert.pem
sudo chmod 640 /var/qmail/control/servercert.pem
مجموعة nofiles هي المجموعة الافتراضية لمستخدم qmaild الذي يعمل تحته qmail-smtpd. يسمح الوضع 640 لـ qmaild بقراءة الملف من خلال عضوية المجموعة مع إبقائه غير قابل للقراءة من قبل مستخدمين آخرين. إذا كان نظامك يستخدم مجموعة مختلفة لـ qmaild، فاستبدل اسم تلك المجموعة في أمر chown.
لا يوفّر Qmail-smtpd STARTTLS إلا عندما يكون مبنيًا بدعم TLS، وهو ما لا يأتي مدمجًا لا في qmail الأصلي ولا في notqmail من تلقاء نفسه. الطريقة المعتادة في كليهما هي رقعة qmail-tls الخاصة بـ Frederik Vermeulen: فهي التي تجعل qmail-smtpd يقرأ servercert.pem ويعلن عن STARTTLS بمجرد وضع ذلك الملف في مكانه. الطريقة الأخرى هي s/qmail الخاص بـ Erwin Hoffmann مع ucspi-ssl، حيث يصدّر sslserver متغير البيئة UCSPITLS في /service/qmail-smtpd/run ويوضع المفتاح في ملف منفصل باسم serverkey.pem، لذا فإن بنية الملف الواحد المذكورة أعلاه لا تنطبق هناك. بعد وضع ملف PEM المدمج، أعد تشغيل خدمة qmail-smtpd:
sudo svc -t /service/qmail-smtpd
شرح التثبيت الكامل، بما في ذلك التحقق من سلسلة الشهادات باستخدام OpenSSL، موجود في دليل تثبيت SSL على qmail الخاص بنا.
التحقق من STARTTLS بعد التثبيت
بمجرد تثبيت الشهادة، تأكد من أن خادمك يعلن عن STARTTLS ويقدّم سلسلة صالحة:
openssl s_client -connect mail.example.com:25 -starttls smtp -servername mail.example.com
ابحث عن عبارة Verify return code: 0 (ok) وتأكد من أن الموضوع والجهة المُصدرة يتطابقان مع شهادتك. يمكنك أيضًا فحص الخادم باستخدام أداة SSL Checker الخاصة بنا للحصول على تقرير مرئي عن سلسلة الشهادات وتاريخ انتهاء الصلاحية.
إنشاء CSR على منصات بريد أخرى
هل تشغّل خادم بريد مختلفًا؟ راجع أدلة CSR الأخرى لدينا:
وفِّر 10% على شهادات SSL عند الطلب اليوم!
إصدار سريع، وتشفير قوي، وثقة في المتصفح بنسبة 99.99%، ودعم مخصص، وضمان استرداد المال خلال 25 يومًا. رمز القسيمة: SAVE10


