איך להגדיר הצפנת SSL של CloudFlare לקצה-לקצה

הגדרת SSL עבור אתר כלשהו היא אתגר. מבקרי האתר, הדפדפנים ומנועי החיפוש מעניקים שווי גבוה לאתר מאובטח כראוי עם שכבת Secure Sockets Layer (SSL). בעבר, התהליך כלל רכישה, התקנה והגדרה של תעודת SSL. אך עם Cloudflare SSL, ניתן להשלים את תהליך הגדרת ה-SSL במספר לחיצות בלבד!

במאמר זה, תלמד איך להגדיר את האתר שלך עם הצפנת SSL באמצעות Cloudflare. לכן עבוד דרכך לחיבורי SSL מוצפנים מקצה לקצה!

דרישות מראש

כדי להמשיך עם המדריך הזה, ישנם מספר דרישות מראש המפורטות למטה:

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • שרת Ubuntu Linux עם NGINX מותקן ומוגדר. המדריך הזה מדגיש את שימוש ב-Linux וב-NGINX, אך התהליך הכללי אותו ניתן להחיל עבור IIS או Apache.

הגדרת Cloudflare Universal SSL: רק ההתחלה

ישנם מספר דרכים להגדרת SSL באמצעות Cloudflare. לעתים קרובות, הדרך המהירה ביותר היא לבחור Universal SSL. למה? עם Universal SSL, במקום למצוא ולרכוש תעודת SSL, Cloudflare מספקת תעודה, ואז כל התעבורה שנשלחת דרך Cloudflare תשתמש באותה תעודה.

לאחר הפעלת Universal SSL, Cloudflare מציגה תעודת SSL תקפה לגולשים ולמנועי חיפוש. Cloudflare גם אינה דורשת הגדרת השרת או האתר לשימוש בתעודה זו – נחמד מאוד!

1. הפעל את דפדפן האינטרנט שלך והתחבר ללוח המחוונים Cloudflare dashboard.

2. נווט לאתר שלך מרשימת הדומיינים בחשבון, כפי שמוצג למטה.

Choose the site to change options for.

3. כעת, לחץ על SSL/TLS כדי לראות את אפשרויות ההצפנה של האתר שלך.

The SSL/TLS Encryption mode page

4. בחר באפשרות גמיש כדי להפעיל את Universal SSL. לאחר בחירה, השינוי יחול מיידית. האתר שלך כעת מוצפן בין הדפדפן ל-Cloudflare!

Enabling Universal SSL on Cloudflare

הגדרת הצפנה של SSL מקצה לקצה מלאה

אף ש-Universal SSL הוא אפשרות נהדרת להתחלת הגנת אתרים, הוא משאיר את התעבורה בין השרת ל-Cloudflare בלתי מאובטחת. למרבה המזל, ישנם שני מצבי הצפנה להצפנת התעבורה מ-Cloudflare לשרת, Full ו- Full (strict), כל אחד עם דרישות התקנת תעודה שונות בעיקרן.

  • Full – דורש תעודה על השרת, אך ייתכן ותהיה זו תעודה שנחתמת עצמית.
  • שלם (מוחזק) – ייתכן והתעודה הצדדית שמותקנת חייבת להיות תעודה תקפה.

בואו נעבור על ההבחנה בין הצפנים הללו וכיצד להגדיר אותן.

הגדרת הצפנה מלאה של SSL/TLS עם תעודה שנחתמת באופן עצמא

בניגוד ל- Universal SSL, ההצפנה מלאה של SSL/TLS דורשת מהשרת שלך לספק תעודת SSL תקנית כדי להצפין את התעבורה מהשרת אל Cloudflare. ישנם דרכים רבות לבצע זאת, אך המדריך הזה מדגיש את השלבים בשרת Linux עם NGINX.

יצירת תעודה שנחתמת באופן עצמא

כדי להצפין את החיבור בין Cloudflare לשרת המקור שלך, תצטרך לקבל תעודת SSL. מאחר ומצב הצפנה של SSL/TLS מלא אינו דורש את התעודה להיות מאומתת לגמרי, ניתן להשתמש בתעודה שנחתמת באופן עצמא כדי להתחיל מהר.

1. התחבר באמצעות Secure Shell (SSH) לשרת האינטרנט שלך ב- Linux.

2. שנה (cd) לתיקייה התקנית של SSL ב-Ubuntu (/etc/ssl) על ידי הרצת הפקודה הבאה. cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. כעת, יש ליצור את שני מפתחות הציבור והפרטי של האתר שלך באמצעות הפקודה openssl. כדי לעשות זאת, הרץ את הפקודה openssl שמופיעה למטה.

פקודה זו מבצעת כמה דברים:

  • מבקשת תעודה X.509 הסופקת על ידי הפרמטר -x509.
  • כאשר מתייחס ל-NGINX, מאפשרת ל-NGINX לקרוא את התעודה בזמן הפעלתו באמצעות הפרמטר -nodes.
  • מגדירה את מספר הימים, שהתעודה תהיה תקפה.
  • יוצר מפתח ציבור ופרטי חדש עם -newkey באמצעות הצפנה RSA בגודל 2048 ביט (rsa:2048).
  • שומר את המפתח הפרטי בנתיב /etc/ssl/private/nginx-selfsigned.key באמצעות הפרמטר -keyout.
  • שומר את המפתח הציבורי בנתיב /etc/ssl/certs/nginx-selfsigned.crt באמצעות הפרמטר -out.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

אם openssl מחזיר תקלה חמימה של Can't load /root/.rnd into RNG, יהיה עליך להפעיל הערה מתחת לשורה #RANDFILE = $ENV::HOME/.rnd בקובץ /etc/ssl/openssl.cnf. כל הגרסאות המודרניות של openssl יחזרו לשימוש במכשיר ה-/dev/urandom של המערכת לנתוני אנטרופיה רנדומליים ולא ידרשו קובץ מסוים להשקעה.

4. לאחר הרצת הפקודה בהצלחה, openssl יבקש ממך מידע. למטה תמצא את כל הערכים שסופקו עבור המדריך הזה.

  • שם המדינה: US
  • שם המדינה או המחוז: אילינוי
  • שם העיר: בלומינגטון
  • שם הארגון: חברת הבדיקה, בע"מ
  • שם היחידה הארגונית: <ריק>
  • שם המשטר: test.adamlistek.me
  • : כתובת דוא"ל: [email protected]
Generating a self-signed certificate

5. לבסוף, אשרו שהתעודה קיימת באמצעות פקודת הבדיקה test. אם פקודת הבדיקה test מחזירה (echo $?) 0, אז הקובץ קיים כצפוי. ניתן לראות בתמונת המסך שאילו פקודות כל אחת החזירה ערך 0.

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

הגדרת NGINX

כעת שהתעודה נוצרה ונשמרה במיקוםי המפתח /etc/ssl/certs ו- /etc/ssl/private, עלינו להגדיר את NGINX כך שישתמש בתעודה וישרת את תוכן האתר.

הגדרות האתר של NGINX מוגדרות בבלוקי server שנמצאים בדרך כלל בקבצי מארח וירטואליים. בדוגמה למטה, ההגדרה הבסיסית של האתר נשמרת בקובץ test.adamlistek.me.conf ומתווספת לקובץ הראשי של nginx.conf.

1. לראשונה, יש ליצור קובץ מארח וירטואלי חדש בשם שתבחרו, אך לדוגמה נתינתו test.adamlistek.me.conf תחת התיקייה /etc/nginx/vhosts.d. לאחר מכן, יש להעתיק את התוכן למטה לקובץ מארח וירטואלי ולשמור אותו.

יש להחליף את שם הדומיין test.adamlistek.me בשלכם, משום שזאת דוגמה בלבד. ואם תיקיית /etc/nginx/vhosts.d לא קיימת, יש ליצור את התיקייה על ידי הרצת mkdir /etc/nginx/vhosts.d.

server {
   # האזנה ליציאה 80 לפרוטוקולי IPv4 ו-IPv6
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # ביצוע הפניה חוקית 301 עם כל הפרמטרים לחסום ה-SSL למטה
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # האזנה ליציאה 443 לפרוטוקולי IPv4 ו-IPv6 עם הפעלת HTTP2 (דורש SSL)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # המיקום של התעוז הציבורית והפרטית
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # המיקום של קבצי האינטרנט לטעינה, זהו המיקום המוגדר כברירת מחדל של NGINX
   root /usr/share/nginx/html;
 # הקובץ ברירת המחדל להגשה בבקשת שורש הדומיין
   index index.html;
 }

2. אמת שקובץ התצורה הראשי של NGINX, /etc/nginx/nginx.conf, מכיל את השורה הנדרשת של include בתוך בלוק ה-http, הממוקם בסופו של הבלוק.

# תצורות השרת הולכות לכאן
 …
 http {
     # תצורות נוספות הולכות לכאן# כלול יחידות וירטואליות
     include /etc/nginx/vhosts.d/*.conf;
 }

3. הפעל מחדש את NGINX באמצעות הפקודה הבאה אם אתה במערכת systemd, שהיא מנהל שירות ומערכת מודרנית ל-Linux.

service nginx restart

4. חזור אל Cloudflare, אמת שהתעוז המוגנת בעצמה פועלת. כדי לעשות זאת, השבת את ה-"orange-cloud" עבור רשומת הDNS בתוך מעמד הפרוקסי, כפי שמוצג למטה. כיבוי אפשרות "orange-cloud" מתעלם מ-Cloudflare ומשרת בקשות ישירות משרת האינטרנט.

Disabling Cloudflare proxying via Proxy Status.

5. ודאו כי האתר מחזיר את תעודת ה-SSL החדשה שנוצרה עצמאית על ידי ניווט לאתר בדפדפן האינטרנט שלך. עשיית כך תביא לדף אזהרה, המוצג למטה.

Displaying the self-signed certificate error.

6. לבסוף, הפעלת קידוד Full TLS/SSL ב-Cloudflare. כדי לעשות זאת, הפעל מחדש את סטטוס הפרוקסי "ענן כתום" ב-Cloudflare על הרשומת DNS שביטלת בעבר. לאחר מכן נווט אל כרטיסיית ה-SSL/TLS ולחץ על כפתור הרדיו Full המוצג למטה.

Enabling Full SSL/TLS encryption on Cloudflare.

ייצור תעודות מקור להצפנת SSL/TLS המלאה (רגועה)

מצב הצפנה מלא אינו מבטיח שהתעודה שמוצגת על ידי שרת האינטרנט מכילה שרשרת תעודות תקפה באופן אמיתי. לכן, במקום זאת, כדאי להשתמש בהצפנה לא רגועה, ו-Cloudflare תקבל כל תעודה שתוצג על ידי השרת.

Cloudflare מציעה אפשרות ליצירת תעודת TLS בחינם כדי לאבטח את חיבור שרת המקור שלך. אך ישנם שני צדדים שליליים לשימוש בתעודה מקור שסופקה על ידי Cloudflare. האחד הוא שעליך ליצור ולהתקין את התעודה באופן ידני. השני הוא שהתעודה נראית כמו תעודה שנחתמה עצמאית שאף דפדפן לא יאמין לה מלבד Cloudflare.

אפשר לאוטומטזציה של יצירת התעודה באמצעות נקודת הקצה API של יצירת תעודת Origin CA, אך זה מעבר לטווח של המדריך הזה.

1. נווטו אל שרת המקור על ידי ניווט אל כרטיסיית ה-SSL/TLS -> שרת מקורי, כפי שאתה רואה למטה, ולחצו על כפתור ה-יצירת תעודה.

Navigating to the Origin Server page.

2. כפי שניתן לראות למטה, האפשרויות הברירת מחדל כבר מוגדרות ליצירת תעודת כרטיס רשת עבור הדומיין עם 15 שנות תוקפות – נחמד! לכן השאר את האפשרויות הברירת מחדל ויצור את התעודה על ידי לחיצה על הכפתור צור בפינה הימנית-תחתונה של העמוד.

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. הוסף את התעודה שנוצרה למערכת הלינוקס שלך על ידי שמירת מפתחות הפרטי והציבוריים תחילה עם עורך הטקסט GNU nano. מאחר שישנם שני מפתחות לשמירה, תצטרך לשמור את קבצי המפתח אחד לכל פעם.

ודא ששמירת המפתח הפרטי מתבצעת מכיוון שהוא זמין רק על ידי זמן יצירת תעודה מקורית. אם איבדת את המפתח הזה בטעות, יש לבטל את התעודה ולהנפיק תעודה חדשה.

פתח טרמינל, ואז צור ופתח את קובץ המפתח הציבורי (nginx-test.adamlistek.me.crt) ב-nano על ידי הרצת הפקודה הראשונה למטה.

באשף התעניינות, חזור אל Cloudflare והעתק את מפתח המקור (תעודת המקור) (מפתח הציבורי) על ידי לחיצה על האפשרות להעתיק, כפי שמוצג למטה. לאחר מכן הדבק (Ctrl+U) את מפתח הציבורי שהעתקת לקובץ המפתח הציבורי שנפתח ב-nano. שמור את השינויים (Ctrl+O) וצא (Ctrl+X) מ-nano.

לאחר שמירת קובץ המפתח הציבורי, חזור על אותו התהליך מיצירת קובץ המפתח, העתקת המפתח מ-Cloudfare, ושמירתו בקובץ המפתח. אך הפעם אתה יוצר את קובץ המפתח הפרטי (nginx-test.adamlistek.me.key).

# המפתח הציבורי, תחת קטע התעודה המקורית
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
# המפתח הפרטי, תחת הקטע באותו שם
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. עכשיו שיצרת את המפתחות הציבורי והפרטי, הפנה את NGINX למיקום התעודות. עשה זאת על ידי שינוי קובץ התצורה test.adamlistek.me.conf עם השורות הבאות, ששונו כך שיתאימו לדומיינך.

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. כדי ליישם את התעודות החדשות, הפעל מחדש את NGINX עם הפקודה הבאה.

service nginx restart

6. עכשיו חזור ללשונית SSL/TLS ב-Cloudflare, עדכן את מצב ההצפנה של SSL/TLS על ידי לחיצה על Full (strict), כפי שאתה רואה למטה.

Setting the Encryption mode to Full (strict).

הפעלת הצפנת SSL/TLS מלאה (מחמירה) עם LetsEncrypt

החסרון הגדול ביותר בשימוש בתעודת מקור של Cloudflare הוא שהיא מוטמעת רק על ידי Cloudflare. אם נדרשת לך תעודת דפדפן מאושרת מלאה, באופן כללי כתקן מחזור או לשליטה נוספת, LetsEncrypt מציעה אפשרות ליצירת תעודה נכונה.

אם כי אפשר להשתמש בכל תעודה תקפה, LetsEncrypt היא בחירה נפוצה ליצירת תעודה תקפה. קיימים מספר לקוחות LetsEncrypt זמינים, אך המדריך הזה מדגים את לקוח acme.sh.

מאחר שאתה כבר ב-Cloudflare, אחת השיטות הטובות ביותר לספק DNS עם LetsEncrypt היא דרך האפשרות ה-DNS.

1. תחילה, פתח את הטרמינל שלך והתקן את acme.sh דרך הפקודה curl.

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. השלב הבא הוא ליצור או לשנות את קובץ account.conf הממוקם בתיקיית ההתקנה כדי להוסיף את מפתחות API של Cloudflare שנשמרו. את המפתחות האלו ניתן למצוא בקטע פרופיל —> טוקנים API בלוח המחוונים של Cloudflare.

אם ניתן ליצור טוקן מוגבל בהרשאות מסוימות, לצורך המדריך נעדיף להשתמש במפתח API גלובלי.

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. ליצור את התעודה באמצעות הפקודה הבאה. שים לב שהפקודה מפנה ללקוח acme.sh להשתמש ב-Cloudflare (dns_cf) כדי לאמת (--dns) את בעלות התעודה. לאחר מכן, היא מגדירה את זמן ההמתנה (--dnsslep) ל-20 שניות לפני שתינתן (--issue) התעודה לדומיין (-d) test.adamlistek.me.

כאשר הפקודה מושלמת, למטה תראה את הנתיבים בהם תוכל לאתר את התעודה שלך, מפתח התעודה, תעודת CA האמצעית, ותעודת השרשרת המלאה.

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. כמו בפעם הקודמת, לשנות את ההגדרות של אתר NGINX כדי לשנות את מיקום ה-ssl_certificate וה-ssl_certificate_key. וודא שמחליפים את /home/user במיקום שבו ההתקנה שלך של acme.sh נמצא.

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. להחיל את ההגדרה החדשה על ידי איתור NGINX מחדש עם הפקודה הבאה.

service nginx restart

6. לעדכן את מצב ההצפנה של SSL/TLS של Cloudflare על ידי המעבר אל לשונית SSL/TLS, ואז ללחוץ על מלא (מחמיר).

Setting the Encryption mode to Full (strict).

סיכום

במהלך המדריך הזה, למדת איך לאבטח את האתר שלך עם אפשרויות ה-ssl/tls שונות שסופקו על ידי cloudflare. הוספת letsencrypt לתצורת ה-ssl שלך ב-cloudflare מוסיפה אפשרות לשרת מקור גמיש ובניהול המשתמש כאחראי על תעוזה!

עם הידע באפשרויות השונות לאבטח את החיבור למבקר באתר, האם תעבוד דרך לתחום של חיבור מאובטח לשרת שלך עם cloudflare ssl?

Source:
https://adamtheautomator.com/cloudflare-ssl/