ذكري المظهر

تأمين nginx مع دعونا تشفير على ديبيان 9

How to fix 'This site can't provide a secure connection' ERR_SSL_PROTOCOL_ERROR in Google Chrome

How to fix 'This site can't provide a secure connection' ERR_SSL_PROTOCOL_ERROR in Google Chrome

جدول المحتويات:

Anonim

Let's Encrypt هي مرجع شهادات مجاني ومفتوح تم تطويره بواسطة مجموعة أبحاث أمان الإنترنت (ISRG). الشهادات التي تصدرها Let's Encrypt موثوقة من قِبل جميع المتصفحات تقريبًا اليوم.

في هذا البرنامج التعليمي ، سنشرح كيفية استخدام أداة Certbot للحصول على شهادة SSL مجانية لـ Nginx في Debian 9. سنعرض أيضًا كيفية تكوين Nginx لاستخدام شهادة SSL وتمكين HTTP / 2.

المتطلبات الأساسية

تأكد من استيفاء الشروط التالية قبل المتابعة مع هذا البرنامج التعليمي:

  • تسجيل الدخول كمستخدم لديه امتيازات sudo. هل لديك اسم مجال يشير إلى خادم IP العام الخاص بك. سنستخدم example.com قمت بتثبيت Nginx باتباع هذه الإرشادات لديك كتلة خادم لنطاقك. يمكنك اتباع هذه التعليمات للحصول على تفاصيل حول كيفية إنشاء واحد.

تثبيت Certbot

Certbot هي أداة مميزة وسهلة الاستخدام يمكنها أتمتة المهام للحصول على وتجديد شهادات دعونا تشفير SSL وتكوين خوادم الويب لاستخدام الشهادات. يتم تضمين حزمة certbot في مستودعات دبيان الافتراضية.

قم بتحديث قائمة الحزم وتثبيت حزمة certbot:

sudo apt update sudo apt install certbot

إنشاء مجموعة قوية Dh (ديفي هيلمان)

يعد Diffie – Hellman key exchange (DH) طريقة لتبادل آمن لمفاتيح التشفير عبر قناة اتصال غير آمنة. سنقوم بإنشاء مجموعة جديدة من معلمات DH 2048 بت لتعزيز الأمن:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 إذا أردت ، يمكنك تغيير الحجم إلى 4096 بت ، لكن في هذه الحالة ، قد يستغرق الجيل أكثر من 30 دقيقة اعتمادًا على إنتروبيا النظام.

الحصول على شهادة دعونا تشفير SSL

للحصول على شهادة طبقة المقابس الآمنة لنطاقنا ، سنستخدم مكوّن Webroot الإضافي الذي يعمل عن طريق إنشاء ملف مؤقت للتحقق من صحة النطاق المطلوب في دليل ${webroot-path}/.well-known/acme-challenge . يقوم خادم Let's Encrypt بإرسال طلبات HTTP إلى الملف المؤقت للتحقق من أن المجال المطلوب يحل إلى الخادم حيث يتم تشغيل certbot.

نحن بصدد تعيين جميع طلبات HTTP لـ .well-known/acme-challenge إلى دليل واحد ، /var/lib/letsencrypt .

ستنشئ الأوامر التالية الدليل وتجعله قابلاً للكتابة لخادم Nginx.

mkdir -p /var/lib/letsencrypt/.well-known chgrp www-data /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt

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

افتح محرر النص الخاص بك وقم بإنشاء المقتطف الأول ، letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }

قم ssl.conf المقتطف الثاني ssl.conf الذي يتضمن ssl.conf التي أوصت بها Mozilla ، وتمكين OCSP Stapling ، HTTP Strict Transport Security (HSTS) ، وفرض عدد قليل من رؤوس HTTP التي تركز على الأمان.

sudo nano /etc/nginx/snippets/ssl.conf /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

بمجرد الانتهاء من ذلك ، افتح ملف كتلة خادم النطاق وقم بتضمين مقتطف letsencrypt.conf كما هو موضح أدناه:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

تمكين كتلة الخادم الجديد عن طريق إنشاء رابط رمزي إلى الدليل الذي sites-enabled :

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

أعد تشغيل خدمة Nginx لتصبح التغييرات نافذة المفعول:

sudo systemctl restart nginx

يمكنك الآن تشغيل Certbot باستخدام المكون الإضافي webroot والحصول على ملفات شهادة SSL عن طريق إصدار:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

إذا تم الحصول على شهادة SSL بنجاح ، فستتم طباعة الرسالة التالية على الجهاز:

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-07-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

بعد ذلك ، قم بتحرير كتلة خادم المجال كما يلي:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }

من خلال التكوين أعلاه ، فإننا نلزم HTTPS وإعادة التوجيه من www إلى إصدار غير www.

أعد تحميل خدمة Nginx لتصبح التغييرات نافذة المفعول:

sudo systemctl reload nginx

التجديد التلقائي دعونا تشفير شهادة SSL

شهادات تشفير دعونا صالحة لمدة 90 يوما. لتجديد الشهادات تلقائيًا قبل انتهاء صلاحيتها ، تنشئ حزمة certbot cronjob تعمل مرتين يوميًا وتجدد تلقائيًا أي شهادة قبل 30 يومًا من انتهاء صلاحيتها.

نظرًا لأننا نستخدم البرنامج المساعد certbot webroot بمجرد تجديد الشهادة ، يتعين علينا أيضًا إعادة تحميل خدمة nginx. إلحاق - --renew-hook "systemctl reload nginx" بملف /etc/cron.d/certbot بحيث يبدو كما يلي:

sudo nano /etc/cron.d/certbot /etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

اختبار عملية التجديد التلقائي ، عن طريق تشغيل هذا الأمر:

sudo certbot renew --dry-run

إذا لم تكن هناك أخطاء ، فهذا يعني أن عملية التجديد كانت ناجحة.

استنتاج

وجود شهادة SSL أمر لا بد منه في الوقت الحاضر. إنه يؤمن موقع الويب الخاص بك ، ويزيد من موضع ترتيب SERP ، ويسمح لك بتمكين HTTP / 2 على خادم الويب الخاص بك.

في هذا البرنامج التعليمي ، استخدمت عميل Let's Encrypt ، certbot لإنشاء شهادات SSL لنطاقك. لقد أنشأت أيضًا مقتطفات Nginx لتجنب تكرار التعليمات البرمجية وتكوين Nginx لاستخدام الشهادات. في نهاية البرنامج التعليمي ، قمت بإعداد cronjob لتجديد الشهادة تلقائيًا.

دعنا نجعلك تشفير certbot ssl

هذا المنشور جزء من كيفية تثبيت LEMP Stack على سلسلة دبيان 9.

وظائف أخرى في هذه السلسلة:

• كيفية تثبيت MariaDB على أوبونتو 18.04 • كيفية تثبيت Nginx على دبيان 9 • كيفية تثبيت PHP على دبيان 9 • كيفية إعداد كتل خادم Nginx على دبيان 9 • تأمين Nginx مع Let's Encrypt على دبيان 9