الإعداد دعونا نشفر Express

كيفية إعداد HTTPS باستخدام الحل المجاني الشهير Let's Encrypt

إذا قمت بتشغيل تطبيق Node.js على VPS الخاص بك ، فستحتاج إلى حل للحصول على شهادات SSL.

اليوم ، المعيار للقيام بذلك هو الاستخدامدعونا نشفروسيرتبوت، أداة منEFF، المعروفة أيضًا باسم Electronic Frontier Foundation ، وهي منظمة غير ربحية رائدة تركز على الخصوصية وحرية التعبير والحريات المدنية العامة في العالم الرقمي.

هذه هي الخطوات التي سنتبعها:

قم بتثبيت Certbot

تفترض هذه التعليمات أنك تستخدم Ubuntu أو Debian أو أي توزيعة Linux أخرى يتم استخدامهاapt-getلإدارة الحزم:

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

يمكنك أيضًا تثبيت Certbot على جهاز Mac لأغراض الاختبار (يتطلبالبيرة):

brew install certbot

ومع ذلك ، ستحتاج إلى ربط ذلك باسم مجال حقيقي حتى يكون مفيدًا.

قم بإنشاء شهادة SSL باستخدام Certbot

الآن وبعد تثبيت Certbot ، يمكنك استدعائه لإنشاء الشهادة. يجب تشغيل هذا كجذر:

certbot certonly --manual

... أو استدعاء sudo من مستخدم غير جذر:

sudo certbot certonly --manual

هذه هي العملية بالتفصيل:

سيطلب منك المثبت توفير مجال موقع الويب الخاص بك.

... ثم يطلب بريدك الإلكتروني:

➜ sudo certbot certonly --manual
Password: XXXXXXXXXXXXXXXXXX
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

... وقبول بنود الخدمة:

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory

(A)gree/©ancel: A

... وللحصول على إذن لمشاركة عنوان بريدك الإلكتروني:

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

... أخيرًا ، يمكننا إدخال المجال حيث نريد استخدام شهادة SSL:

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): copesflavio.com

... يسأل المثبِّت عما إذا كان من الجيد تسجيل عنوان IP الخاص بك:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for copesflavio.com

NOTE: The IP of this machine will be publicly logged as having requested this certificate. If you’re running certbot in manual mode on a machine that is not your server, please ensure you’re okay with that.

Are you OK with your IP being logged?


(Y)es/(N)o: y

... وأخيراً نصل إلى مرحلة التحقق!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:

TS_oZ2-ji23jrio3j2irj3iroj_U51u1o0x7rrDY2E.1DzOo_voCOsrpddP_2kpoek2opeko2pke-UAPb21sW1c

And make it available on your web server at this URL:

http://copesflavio.com/.well-known/acme-challenge/TS_oZ2-ji23jrio3j2irj3iroj_U51u1o0x7rrDY2E

الآن ، دعنا نترك Certbot وشأنه لبضع دقائق.

نحتاج إلى التحقق من أننا نمتلك المجال ، من خلال إنشاء ملف باسمTS_oZ2-ji23jrio3j2irj3iroj_U51u1o0x7rrDY2Eفي ال.well-known/acme-challenge/مجلد. انتبه! ستتغير السلسلة الغريبة التي قمت بلصقها للتو في كل مرة تمر فيها بهذه العملية.

ستحتاج إلى إنشاء المجلد والملف ، حيث إنهما غير موجودين افتراضيًا.

في هذا الملف ، تحتاج إلى وضع المحتوى الذي طبعه Certbot:

TS_oZ2-ji23jrio3j2irj3iroj_U51u1o0x7rrDY2E.1DzOo_voCOsrpddP_2kpoek2opeko2pke-UAPb21sW1c

بالنسبة إلى اسم الملف - هذه السلسلة فريدة في كل مرة تقوم فيها بتشغيل Certbot.

السماح لـ Express بخدمة الملفات الثابتة

من أجل خدمة هذا الملف من Express ، تحتاج إلى تمكين خدمة الملفات الثابتة. يمكنك إنشاء ملفstaticالمجلد ، وأضف هناك ملف.well-knownفرعي ، ثم قم بتكوين Express كما يلي:

const express = require('express')
const app = express()

//… app.use(express.static(__dirname + ‘/static’, { dotfiles: ‘allow’ }))

//…

الdotfilesالخيار إلزامي وإلا.well-known، وهو ملف نقطي (لأنه يبدأ بنقطة) ، لن يكون مرئيًا. هذا إجراء أمني ، لأن الملفات النقطية يمكن أن تحتوي على معلومات حساسة ويتم الاحتفاظ بها بشكل أفضل بشكل افتراضي.

قم بتأكيد المجال

قم الآن بتشغيل التطبيق وتأكد من إمكانية الوصول إلى الملف من الإنترنت العام. ارجع إلى Certbot ، الذي لا يزال قيد التشغيل ، واضغط على ENTER لمتابعة البرنامج النصي.

الحصول على الشهادة

هذا هو! إذا سارت الأمور على ما يرام ، فقد أنشأ Certbot الشهادة والمفتاح الخاص ، وجعلهما متاحين في مجلد على جهاز الكمبيوتر الخاص بك (وسيخبرك بالمجلد ، بالطبع).

الآن ، ما عليك سوى نسخ / لصق المسارات في التطبيق الخاص بك لبدء استخدامها لخدمة طلباتك:

const fs = require('fs')
const https = require('https')
const app = express()

app.get(’/’, (req, res) => { res.send(‘Hello HTTPS!’) })

https .createServer( { key: fs.readFileSync(’/etc/letsencrypt/path/to/key.pem’), cert: fs.readFileSync(’/etc/letsencrypt/path/to/cert.pem’), ca: fs.readFileSync(’/etc/letsencrypt/path/to/chain.pem’), }, app ) .listen(443, () => { console.log(‘Listening…’) })

لاحظ أنني جعلت هذا الخادم يستمع على المنفذ 443 ، لذا يجب تشغيله بأذونات الجذر.

أيضًا ، يعمل الخادم بشكل حصري في HTTPS ، لأنني استخدمتhttps.createServer(). يمكنك أيضًا نشر خادم HTTP بجانب هذا ، عن طريق تشغيل:

http.createServer(app).listen(80, () => {
  console.log('Listening...')
})

https .createServer( { key: fs.readFileSync(’/etc/letsencrypt/path/to/key.pem’), cert: fs.readFileSync(’/etc/letsencrypt/path/to/cert.pem’), ca: fs.readFileSync(’/etc/letsencrypt/path/to/chain.pem’), }, app ) .listen(443, () => { console.log(‘Listening…’) })

إعداد التجديد

ستكون شهادة SSL صالحة لمدة 90 يومًا فقط ، لذلك تحتاج إلى إعداد نظام آلي لتجديدها.

كيف؟ باستخدام وظيفة كرون.

وظيفة cron هي طريقة لتشغيل المهام في فترة زمنية محددة. يمكن أن يكون كل أسبوع ، كل دقيقة ، كل شهر ، وهكذا.

في حالتنا ، سنقوم بتشغيل البرنامج النصي للتجديد مرتين يوميًا ، على النحو الموصى به في وثائق Certbot.

أولاً ، اكتشف المسار المطلق لـcertbotعلى نظامك. أنا أستعملtype certbotعلى macOS للحصول عليه ، وفي حالتي فهو موجود/usr/local/bin/certbot.

إليك النص الذي نحتاج إلى تشغيله:

certbot renew

هذا هو إدخال وظيفة كرون:

0 */12 * * * root /usr/local/bin/certbot renew >/dev/null 2>&1

ما ورد أعلاه يقول "قم بتشغيله كل 12 ساعة ، كل يوم: الساعة 00:00 والساعة 12:00".

نصيحة: لقد قمت بإنشاء هذا الخط باستخدامhttps://crontab-generator.org/

أضف البرنامج النصي الذي تم إنشاؤه حديثًا إلى crontab في النظام باستخدام هذا الأمر:

env EDITOR=pico crontab -e

هذا يفتحpicoمحرر (لا تتردد في استبدال أي محرر تفضله). ما عليك سوى إدخال النص الجديد وحفظه وتثبيت وظيفة cron.

بمجرد الانتهاء من ذلك ، يمكنك رؤية قائمة وظائف cron النشطة عن طريق تشغيل:

crontab -l

تحميل مجانيكتيب Express.js


المزيد من البرامج التعليمية السريعة: