تفعيل HTTPS على خوادمك

Chris Palmer
Chris Palmer

تقدّم هذه الصفحة إرشادات حول إعداد بروتوكول HTTPS على خوادمك، بما في ذلك الخطوات التالية:

  • إنشاء مفتاحَي تشفير عام/خاص بترميز RSA بحجم 2048 بت
  • إنشاء طلب توقيع شهادة (CSR) يتضمّن مفتاحك العام
  • مشاركة طلب توقيع الشهادة مع هيئة إصدار الشهادات (CA) للحصول على شهادة نهائية أو سلسلة شهادات
  • تثبيت شهادتك النهائية في مكان لا يمكن الوصول إليه من الويب، مثل /etc/ssl (Linux وUnix) أو أي مكان يتطلبه خادم IIS (Windows)

يستخدم هذا القسم برنامج سطر الأوامر openssl، الذي يأتي مع معظم أنظمة Linux وBSD وMac OS X، لإنشاء مفاتيح خاصة وعامة وطلب تصديق.

إنشاء مفتاحَي تشفير عام/خاص

للبدء، أنشئ مفتاحَي تشفير RSA بحجم 2,048 بت. يمكن كسر مفتاح أقصر باستخدام هجمات التخمين العشوائي، وتستخدم المفاتيح الأطول موارد غير ضرورية.

استخدِم الأمر التالي لإنشاء مفتاحَي تشفير RSA:

openssl genrsa -out www.example.com.key 2048

ينتج عن ذلك الإخراج التالي:

Generating RSA private key, 2048 bit long modulus
.+++
.......................................................................................+++
e is 65537 (0x10001)

إنشاء طلب توقيع شهادة

في هذه الخطوة، يمكنك تضمين مفتاحك العام ومعلومات عن مؤسستك وموقعك الإلكتروني في طلب توقيع شهادة أو طلب تصديق مفتاح. يطلب منك الأمر openssl البيانات الوصفية المطلوبة.

تنفيذ الأمر التالي:

openssl req -new -sha256 -key www.example.com.key -out www.example.com.csr

تعرِض ما يلي:

You are about to be asked to enter information that will be incorporated
into your certificate request

What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:California
Locality Name (for example, city) []:Mountain View
Organization Name (for example, company) [Internet Widgits Pty Ltd]:Example, Inc.
Organizational Unit Name (for example, section) []:Webmaster Help Center Example
Team
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:webmaster@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

لضمان صلاحية طلب الحصول على شهادة مفتاح التوقيع، نفِّذ الأمر التالي:

openssl req -text -in www.example.com.csr -noout

من المفترض أن تظهر الاستجابة على النحو التالي:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CA, ST=California, L=Mountain View, O=Google, Inc.,
OU=Webmaster Help Center Example Team,
CN=www.example.com/emailAddress=webmaster@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e:
                    f8:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc:
                    ...
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87:
         2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4:
         ...

إرسال طلب توقيع الشهادة إلى هيئة إصدار الشهادات

تتطلّب منك مراجع إصدار الشهادات المختلفة إرسال طلبات الحصول على الشهادات إليها بطرق مختلفة. ويمكن أن يشمل ذلك استخدام نموذج على موقعه الإلكتروني أو إرسال طلب الحصول على الدعم من خلال البريد الإلكتروني. قد تُتمتِع بعض جهات إصدار الشهادات أو المورّدين التابعين لها بإمكانية أتمتة بعض أو كل العملية، بما في ذلك في بعض الحالات إنشاء مفتاحَي التشفير وCSR.

أرسِل طلب توقيع الشهادة إلى هيئة إصدار الشهادات واتّبِع تعليماتها للحصول على ملف الشهادة النهائي أو سلسلة الشهادات.

تحصّل جهات إصدار الشهادات المختلفة مبالغ مالية مختلفة مقابل خدمة التعهد بمفتاحك العام.

تتوفّر أيضًا خيارات لربط مفتاحك بأكثر من اسم نظام أسماء نطاقات واحد، بما في ذلك عدة أسماء مختلفة (مثل example.com وwww.example.com وexample.net وwww.example.net) أو أسماء "عابر النطاقات" مثل *.example.com.

انسخ الشهادات إلى جميع خوادم الواجهة الأمامية في مكان لا يمكن للويب الوصول إليه، مثل /etc/ssl (Linux وUnix) أو أي مكان يتطلبه IIS ‏ (Windows).

تفعيل بروتوكول HTTPS على خوادمك

يُعدّ تفعيل بروتوكول HTTPS على خوادمك خطوة ضرورية لتوفير الأمان لصفحات الويب.

  • استخدِم أداة إعداد الخادم من Mozilla لإعداد خادمك للتوافق مع بروتوكول HTTPS.
  • اختبِر موقعك الإلكتروني بانتظام باستخدام "اختبار خادم طبقة المقابس الآمنة" من Qualys وتأكَّد من حصولك على درجة A أو A+ على الأقل.

في هذه المرحلة، عليك اتّخاذ قرار مهم بشأن العمليات. اختَر أحد الخيارَين التاليَين:

  • خصِّص عنوان IP فريدًا لكل اسم مضيف يعرض خادم الويب المحتوى منه.
  • استخدِم الاستضافة الافتراضية المستندة إلى الاسم.

إذا كنت تستخدم عناوين IP مختلفة لكل اسم مضيف، يمكنك إتاحة بروتوكولَي HTTP وHTTPS لكل العملاء. ومع ذلك، يستخدم معظم مشغّلي المواقع الإلكترونية أسلوبًا واسِع النطاق للحفاظ على عناوين IP ولأنّه أكثر ملاءمةً بشكلٍ عام.

إذا لم تكن خدمة HTTPS متاحة على خوادمك، فعِّلها الآن (بدون إعادة توجيه HTTP إلى HTTPS. يمكنك الاطّلاع على إعادة توجيه HTTP إلى HTTPS لمزيد من المعلومات). اضبط خادم الويب لاستخدام الشهادات التي اشتريتها وثبتّتها. قد يكون أداة إنشاء الإعدادات من Mozilla مفيدة.

إذا كان لديك العديد من أسماء المضيفين أو النطاقات الفرعية، يجب أن يستخدم كل منها الشهادة المناسبة.

الآن، وبشكل منتظم طوال مدة عمل موقعك الإلكتروني، تحقّق من إعدادات بروتوكول HTTPS باستخدام اختبار خادم طبقة المقابس الآمنة من Qualys. يجب أن يحصل موقعك الإلكتروني على درجة A أو A+. ويجب اعتبار أيّ شيء يتسبب في الحصول على درجة أقل خطأً، ويجب الحرص دائمًا لأنّه يتم تطوير هجمات جديدة ضد الخوارزميات والبروتوكولات.

جعل عناوين URL داخل الموقع نسبية

بعد أن أصبح موقعك الإلكتروني معروضًا على كل من HTTP وHTTPS، من المفترض أن تعمل الأمور بشكلٍ سلس قدر الإمكان بغض النظر عن البروتوكول. ومن العوامل المهمة استخدام عناوين URL نسبية للروابط داخل الموقع الإلكتروني.

تأكَّد من أنّ عناوين URL داخل الموقع وعناوين URL الخارجية لا تعتمد على بروتوكول معيّن. استخدِم المسارات النسبية أو احذف البروتوكول كما هو موضّح في //example.com/something.js.

يمكن أن يؤدي عرض صفحة تحتوي على موارد HTTP باستخدام HTTPS إلى حدوث مشاكل. عندما يصادف المتصفّح صفحة آمنة تستخدم موارد غير آمنة، يُحذّر المستخدمين من أنّ الصفحة غير آمنة تمامًا، ويرفض بعض المتصفّحات تحميل موارد HTTP أو تنفيذها، ما يؤدي إلى تعطُّل الصفحة. ومع ذلك، يمكنك تضمين موارد HTTPS بأمان في صفحة HTTP. لمزيد من الإرشادات حول حلّ هذه المشاكل، يُرجى الاطّلاع على مقالة حلّ مشكلة المحتوى المختلط.

يمكن أن يؤدي أيضًا اتّباع الروابط المستندة إلى HTTP إلى صفحات أخرى على موقعك الإلكتروني إلى خفض مستوى تجربة المستخدم من HTTPS إلى HTTP. لحلّ هذه المشكلة، اجعل عناوين URL داخل الموقع الإلكتروني نسبية قدر الإمكان، وذلك إما من خلال جعلها نسبية إلى البروتوكول (بدون بروتوكول، تبدأ بالرمز //example.com) أو نسبية إلى المضيف (تبدأ فقط بالمسار، مثل /jquery.js).

الإجراءات الموصى بها
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
استخدِم عناوين URL النسبية داخل الموقع الإلكتروني.
الإجراءات الموصى بها
<h1>Welcome To Example.com</h1>
<script src="//example.com/jquery.js"></script>
<link rel="stylesheet" href="//assets.example.com/style.css"/>
<img src="//img.example.com/logo.png"/>;
<p>A <a href="//example.com/2014/12/24/">new post on cats!</a></p>
يمكنك بدلاً من ذلك استخدام عناوين URL داخل الموقع الإلكتروني ذات الصلة بالبروتوكول.
الإجراءات الموصى بها
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
<p>Check out this <a href="https://foo.com/"><b>other cool site.</b></a></p>
استخدِم عناوين URL بتنسيق HTTPS للروابط التي تؤدي إلى مواقع إلكترونية أخرى، إن أمكن.

يمكنك تعديل الروابط باستخدام نص برمجي، وليس يدويًا، لتجنّب ارتكاب الأخطاء. إذا كان محتوى موقعك الإلكتروني متوفرًا في قاعدة بيانات، اختبِر النص البرمجي على نسخة تطوير من قاعدة البيانات. إذا كان محتوى موقعك الإلكتروني يتألف من ملفات بسيطة فقط، اختبِر النص البرمجي على نسخة تطوير من الملفات. لا تُرسِل التغييرات إلى قناة الإصدار العلني إلا بعد اجتياز التغييرات لفحص الجودة، كالمعتاد. يمكنك استخدام النص البرمجي الذي أنشأه "برام فان دام" أو بديلاً مشابهًا لرصد المحتوى المختلط في موقعك الإلكتروني.

عند إضافة روابط تؤدي إلى مواقع إلكترونية أخرى (بدلاً من تضمين مراجع منها)، لا تغيِّر البروتوكول. ولا يمكنك التحكّم في طريقة عمل هذه المواقع الإلكترونية.

لتسهيل نقل البيانات للمواقع الإلكترونية الكبيرة، ننصحك باستخدام عناوين URL ذات الصلة بالبروتوكول. إذا لم تكن متأكّدًا من إمكانية نشر HTTPS بالكامل بعد، قد يؤدي فرض استخدام HTTPS على موقعك الإلكتروني لجميع الموارد الفرعية إلى نتائج عكسية. من المرجّح أن تستمر فترة زمنية يكون فيها بروتوكول HTTPS جديدًا وغريبًا بالنسبة إليك، ومن المفترض أن يظلّ الموقع الإلكتروني الذي يستخدم بروتوكول HTTP يعمل بالشكل المعتاد. وبمرور الوقت، ستكمل عملية نقل البيانات وتستخدم بروتوكول HTTPS بشكل دائم (راجِع القسمَين التاليَين).

إذا كان موقعك الإلكتروني يعتمد على نصوص برمجية أو صور أو موارد أخرى يتم عرضها من جهة خارجية، مثل شبكة توصيل المحتوى (CDN) أو jquery.com، لديك خياران:

  • استخدِم عناوين URL ذات صلة بالبروتوكول لهذه الموارد. إذا كانت الجهة الخارجية لا تستخدم بروتوكول HTTPS، اطلب منها استخدامه. والعديد من المواقع الإلكترونية تفعل ذلك حاليًا، بما في ذلك jquery.com.
  • عرض الموارد من خادم تتحكّم فيه، والذي يقدّم كلّ من HTTP وHTTPS وغالبًا ما يكون هذا الإجراء مفيدًا، لأنّه يتيح لك التحكّم بشكلٍ أفضل في مظهر موقعك الإلكتروني وأدائه وأمانه، ولا تحتاج إلى الوثوق بجهة خارجية للحفاظ على أمان موقعك الإلكتروني.

إعادة توجيه HTTP إلى HTTPS

لإعلام محرّكات البحث باستخدام HTTPS للوصول إلى موقعك الإلكتروني، ضَع رابطًا أساسيًا في أعلى كل صفحة باستخدام علامات <link rel="canonical" href="https://…"/>.

تفعيل بروتوكول النقل الآمن الصارم وملفات تعريف الارتباط الآمنة

في هذه المرحلة، تكون مستعدًا "لإغلاق" استخدام HTTPS:

  • استخدِم الأمان المشدَّد لنقل البيانات باستخدام بروتوكول HTTP (HSTS) لتجنُّب تكلفة إعادة التوجيه 301.
  • اضبط علامة "آمن" على ملفات تعريف الارتباط دائمًا.

أولاً، استخدِم الأمان المشدَّد لنقل البيانات لإعلام العملاء بأنّ عليهم الاتصال بخادمك دائمًا باستخدام بروتوكول HTTPS، حتى عند اتّباع مرجع http://. ويؤدي ذلك إلى منع هجمات مثل SSL Stripping، ويتجنّب تكلفة الرحلة ذهابًا وإيابًا لعنوان 301 redirect الذي فعّلناه في إعادة توجيه HTTP إلى HTTPS.

لتفعيل بروتوكول HSTS، اضبط العنوان Strict-Transport-Security. تتضمّن صفحة HSTS في OWASP روابط تؤدي إلى تعليمات لأنواع مختلفة من برامج الخادم.

توفّر معظم خوادم الويب إمكانية مماثلة لإضافة رؤوس مخصّصة.

من المهم أيضًا التأكّد من أنّ العملاء لا يرسلون ملفّات تعريف الارتباط (مثل المصادقة أو الإعدادات المفضّلة للموقع الإلكتروني) عبر بروتوكول HTTP. على سبيل المثال، إذا تم عرض ملف تعريف ارتباط مصادقة أحد المستخدمين في نص عادي، سيتم إبطال ضمان الأمان لجلسته بالكامل، حتى إذا كنت قد نفّذت كل الإجراءات الأخرى بشكل صحيح.

لتجنُّب ذلك، عليك تغيير تطبيق الويب لضبط علامة "آمن" دائمًا على ملفات تعريف الارتباط التي يُنشئها. توضّح صفحة OWASP هذه كيفية ضبط علامة Secure في العديد من إطارات عمل التطبيقات. يتضمّن كل إطار عمل للتطبيقات طريقة لضبط العلامة.

توفّر معظم خوادم الويب ميزة إعادة توجيه بسيطة. استخدِم 301 (Moved Permanently) للإشارة إلى محركات البحث والمتصفّحات بأنّ نسخة HTTPS هي الأساسية، وأعِد توجيه المستخدمين إلى نسخة HTTPS من موقعك الإلكتروني من HTTP.

ترتيب البحث

يستخدم محرّك بحث Google بروتوكول HTTPS كمؤشر إيجابي لجودة البحث. تنشر Google أيضًا دليلاً حول كيفية نقل موقعك الإلكتروني أو نقله أو نقل بياناته مع الحفاظ على ترتيبه في نتائج البحث. تنشر Bing أيضًا إرشادات لمشرفي المواقع.

الأداء

عند ضبط طبقات المحتوى والتطبيق بشكل جيد (يمكنك الرجوع إلى كتب Steve Souders للحصول على نصائح)، تكون المخاوف المتبقية بشأن أداء بروتوكول TLS قليلة بشكل عام مقارنةً بالتكلفة الإجمالية للتطبيق. ويمكنك أيضًا تقليل هذه التكاليف وتوزيعها على سنوات. للحصول على نصائح حول تحسين بروتوكول أمان طبقة النقل، يمكنك الاطّلاع على مقالة High Performance Browser Networking التي كتبها Ilya Grigorik، بالإضافة إلى مقالتَي OpenSSL Cookbook وBulletproof SSL And TLS اللتين كتبهما Ivan Ristic.

في بعض الحالات، يمكن أن يؤدي بروتوكول TLS إلى تحسين الأداء، ويعود السبب في ذلك في أغلب الأحيان إلى تفعيل بروتوكول HTTP/2. لمزيد من المعلومات، يمكنك الاطّلاع على محاضرة كريس بالمر' حول أداء HTTPS وHTTP/2 في قمة إصدار المطوّرين من Chrome لعام 2014.

عناوين المُحيل

عندما يتّبع المستخدِمون الروابط من موقعك الإلكتروني على HTTPS إلى مواقع إلكترونية أخرى تستخدم HTTP، لا تُرسِل وكلاء المستخدِمين رأس Referer. إذا كانت هذه مشكلة، هناك عدة طرق لحلّها:

  • يجب نقل المواقع الإلكترونية الأخرى إلى HTTPS. إذا أكملت المواقع الإلكترونية المُشار إليها قسم تفعيل بروتوكول HTTPS على خوادمك في هذا الدليل، يمكنك تغيير الروابط في موقعك الإلكتروني إلى روابطها من http:// إلى https:// أو استخدام روابط نسبية إلى بروتوكول معيّن.
  • لحلّ مجموعة متنوعة من المشاكل المتعلّقة برؤوس Referer، استخدِم معيار سياسة المُحيل الجديد.

أرباح الإعلانات

يريد مشغّلو المواقع الإلكترونية الذين يحقّقون الربح من مواقعهم الإلكترونية من خلال عرض الإعلانات التأكّد من أنّ الانتقال إلى HTTPS لا يؤدي إلى تقليل مرّات ظهور الإعلانات. ومع ذلك، بسبب المخاوف المتعلّقة بأمان المحتوى المختلَط، لا تعمل علامة <iframe> في HTTP على صفحة HTTPS. إلى أن يبدأ المعلِنون بالنشر من خلال HTTPS، لن يتمكّن مشغّلو المواقع الإلكترونية من نقل بياناتهم إلى HTTPS بدون خسارة أرباح الإعلانات، ولكن إلى أن ينقل مشغّلو المواقع الإلكترونية بياناتهم إلى HTTPS، لن يجد المعلِنون حافزًا كبيرًا لنشر المحتوى من خلال HTTPS.

يمكنك بدء عملية كسر هذا الجمود من خلال استخدام المعلِنين الذين يقدّمون خدمات إعلانية عبر HTTPS، وطلب من المعلِنين الذين لا يعرضون HTTPS إطلاقًا أن يجعلوه خيارًا على الأقل. قد تحتاج إلى تأجيل إكمال عملية جعل عناوين URL داخل الموقع الإلكتروني نسبية إلى أن يتفاعل عدد كافٍ من المعلِنين بشكل صحيح.