איך לאבטח את Apache בעזרת Let's Encrypt על Ubuntu

הקדמה

Let’s Encrypt הוא סוכנות אישור (CA) המסייעת בהשגת והתקנת תעודות TLS/SSL בחינם, מה שמאפשר את השימוש בHTTPS מוצפן בשרתי רשת. היא מפשטת את התהליך על ידי ספקת לקוח תוכנה, Certbot, שמנסה לאוטומט את רוב (אם לא כל) השלבים הנדרשים. כיום, כל התהליך של השגת והתקנת התעודה הוא לגמרי אוטומטי גם על Apache וגם על Nginx.

במדריך זה, תשתמש ב-Certbot כדי להשיג תעודת SSL בחינם עבור Apache על Ubuntu ולוודא שהתעודה הזו מתחדשת אוטומטית.

המדריך זה משתמש בקובץ מארח וירטואלי נפרד במקום קובץ הקונפיגורציה הافتראי של Apache עבור הגדרת האתר שיישרם על ידי Let’s Encrypt. אנו ממליצים ליצור קבצי מארח וירטואליים חדשים עבור כל דומיין שמאוחסן על שרת משום שזה עוזר להימנע מטעויות שכיחות ושומר על קבצי הקונפיגורציה הافتראיים כהגדרה מנוסה.

איך להגן על Apache באמצעות Let’s Encrypt על Ubuntu

  1. התקנת Certbot
  2. בדיקת תצורת הוירטואליים של Apache
  3. הרשאת גישת HTTPS דרך החומה
  4. השגת תעודת SSL
  5. אימות החלפת אוטומטית של Certbot

דרישות מוקדמות

להמשיך עם ההדרכה הזו, יהיה עליך להכין:

  • שרת Ubuntu אחד שהוגדר עם משתמש לא-root עם זכויות ניהול יותר מגיעות באמצעות הפקודה sudo וביטוח חופשי פעיל. תוכל להגדיר את זה על-ידי עקביית ההדרכה שלנו להגדרת השרת ההתחלתי לUbuntu.

  • שם דומיין מוכר לחלוטין. ההדרכה הזו תשתמש ב-your_domain כדוגמה לאורך כל ההדרכה. תוכל לרכוש שם דומיין באמצעות Namecheap, לקבל אחד בחינם באמצעות Freenom, או להשתמש ברשם הדומיינים של בחירתך.

  • שני הרשומות DNS הבאות נקבעו עבור השרת שלך. תוכל לעקוב אחרי ההקדמה הזו ל-DNS של DigitalOcean לפרטים על איך להוסיף אותן.

    • רשומת A עם your_domain המכוונת לכתובת IP הציבורית של השרת שלך.
    • רשומת A עם www.your_domain המכוונת לכתובת IP הציבורית של השרת שלך.
  • Apache הותקן על פי איך להתקין אפקח על Ubuntu. הבטיח שיש לך קובץ מארח וירטואלי עבור הדומיין שלך. ההדרכה הזו תשתמש ב- /etc/apache2/sites-available/your_domain.conf כדוגמה.

שלב 1 — התקנת Certbot

להשגת תעודת SSL עם Let’s Encrypt, עליך להתקין את התוכנה Certbot על השרת שלך. תשתמש במאגרי החבילות המוגדרים באובונטו לשם כך.

קודם, עדכן את מדריך החבילות המקומי:

  1. sudo apt update

אתה צריך שתי חבילות: certbot, ו-python3-certbot-apache. האחרת היא תוסף שמשלב את Certbot עם אפיקי, מה שהופך את זה אפשרי למטרת אוטומציה בהשגת התעודה והגדרת HTTPS בשרת האינטרנט שלך באמצעות פקודה אחת:

  1. sudo apt install certbot python3-certbot-apache

תופיע הודעה שתבקשך לאשר את ההתקנה על-ידי לחיצה על Y, ואז ENTER.

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

שלב 2 — בדיקת הקונפיגורציה של מארח הוירטואלי של Apache

כדי לקבל ולהגדיר את SSL באופן אוטומטי עבור שרת האינטרנט שלך, יש ל Certbot למצוא את המארח הוירטואלי הנכון בתוך קבצי הקונפיגורציה של Apache. שמות הדומיינים של השרת שלך יישארו מההוראות ServerName ו-ServerAlias המוגדרות בתוך הבלוק הקונפיגורציה VirtualHost.

אם עקבת אחרי שלב ההתקנה של מארח הוירטואלי בהדרכת התקנת Apache, אתה אמור להיהודר בלוק VirtualHost עבור הדומיין שלך ב- /etc/apache2/sites-available/your_domain.conf עם ההוראות ServerName וגם ServerAlias כבר מוגדרות כראוי.

כדי לאשר שזה מוגדר, פתח את קובץ מארח הוירטואלי עבור הדומיין שלך באמצעות nano או מסוגל העורך הטקסט שלך:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

מצא את השורות הקיימות של ServerName ו-ServerAlias. הן אמורות להיות מופיעות כך:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

אם כבר יש לך את ServerName ו-ServerAlias הקבועים כך, יכול לצאת מהעורך הטקסט ולעבור לשלב הבא. אם התצורה הוירטואלית הנוכחית שלך לא מתאימה לדוגמה, עדכן אותה בהתאם. אם אתה משתמש ב- nano, יכול לצאת על-ידי לחיצה על CTRL+X, ואז Y ו-ENTER כדי לאשר את השינויים שלך, אם ישנם. אז, הריץ את הפקודה הבאה כדי לאשר את השינויים שלך:

  1. sudo apache2ctl configtest

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

  1. sudo systemctl reload apache2

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

השלב הבא, תעדכן את החומה כדי לאפשר תנועת HTTPS.

שלב 3 — אפשרי תנועת HTTPS דרך החומה

אם יש לך את החומה UFW הפעילה, כפי שמומלץ במדריכים הקדם הנחות, יהיה עליך להתאים את ההגדרות כדי לאפשר תנועת HTTPS. לאחר ההתקנה, אפיפרי רשמה מספר פרופילי אפליקציה שונים ב-UFW. יכול לנצל את הפרופיל Apache Full כדי לאפשר תנועת HTTP ו-HTTPS על השרת שלך.

לוודא סוג התраffic המותר כרגע בשרת שלך, בדוק את המצב:

  1. sudo ufw status

אם עקבת אחר המדריך ההתקנה של Apache שלנו, יהיה לך פלט דומה לכך, שמשמעותו היא שרק תраffic HTTP על הפורט 80 מותר כרגע:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

לאפשר תраffic HTTPS, אפשר את הפרופיל "Apache Full":

  1. sudo ufw allow 'Apache Full'

אז מחק את הפרופיל העכברי "Apache":

  1. sudo ufw delete allow 'Apache'

המצב שלך יוצג כך:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

אתה עכשיו מוכן להריץ את Certbot ולהשיג את התעודות שלך.

שלב 4 — השגת תעודת SSL

Certbot מספק כמה דרכים להשגת תעודות SSL דרך תוספים. התוסף של Apache ידאג להגדרה מחדש של Apache ולטעינה מחדש של ההגדרות כשנדרש. לשימוש בתוסף זה, הפעל את הפקודה הבאה:

  1. sudo certbot --apache

התסריט הזה יבקש ממך לענות על סדרת שאלות כדי להגדיר את תעודת הSSL שלך. ראשית, ישאל אותך למסר כתובת דוא״ל תקינה. הדוא״ל הזה ישמש להודעות רינוול והודעות בטחון:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

אחרי תן כתובת דוא״ל תקינה, הקש ENTER כדי לעבור לשלב הבא. אז יתבקש ממך לאשר אם אתה מסכים עם תנאי השירות של Let’s Encrypt. תוכל לאשר זאת על-ידי לחיצה על Y ואז ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

שלאחר מכן, ישתלח שאלה אם היית רוצה לשתף את כתובת האימייל שלך עם הארגון חזית האלקטרוני כדי לקבל חדשות ומידע אחר. אם אינך רוצה להירשם לתוכן שלהם, כתוב N. אחרת, כתוב Y ואז לחץ ENTER כדי לעבור לשלב הבא:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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: N

בשלב הבא יתבקש ממך להודיע ל-Certbot אילו כתובות דומיין ברצונך להפעיל HTTPS עבורן. הכתובות הדומייניות הרשומות נכנסות אוטומטית מתצורת הוירטואלי המאפיין של Apache, לכן חשוב לוודא שיש לך את ההגדרות הנכונות של ServerName ו-ServerAlias בוירטואלי המאפיין שלך. אם ברצונך להפעיל HTTPS עבור כל הכתובות הדומייניות הרשומות (מומלץ), יכול להשאר את הפונקס בחלל ולחץ ENTER כדי לעבור. אחרת, בחר את הדומיינים שברצונך להפעיל HTTPS עבורם על ידי רשימת מספריהם התואמים, מופרדים בפסיקים ו/ או חללים, ואז לחץ ENTER:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

אחרי השלב הזה, התצורה של Certbot הושלמה, ותוצג לך הערות הסופיות אודות התעודה החדשה שלך ואיפה למצוא את הקבצים המיוצרים:

Output
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-07-10. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

התעודה שלך כעת מותקנת וטעונה לתצורת Apache. נסה לרענן את האתר שלך באמצעות https:// ושימו לב לאינדיקטור הביטחון של הדפדפן שלך. הוא צריך להצביע שהאתר שלך מוגן באופן נכון, בדרך כלל על ידי סמל טלס שבסרגל הכתובת.

אפשר להשתמש בSSL Labs Server Test כד

בשלב הבא והסופי, תבדוק את תכונת ההחדשה האוטומטית של Certbot, שמבטיחה שהתעודה שלך תתחדש אוטומטית לפני תאריך התפוגה.

שלב 5 — בדיקת החדשה אוטומטית של Certbot

התעודות של Let’s Encrypt תקפות רק לתשעים יום. זה על מנת לעודד משתמשים לאוטומט את תהליך רינוול התעודות שלהם, כמו גם לוודא שתעודות שנעשו בשימוש לא נכון או מפוחדות יגיעו לתפוגה מוקדם יותר במקום מאוחר יותר.

החבילה certbot שהתקנת לוקחת תשלום בהחדשות על ידי כלול סקריפט רינוול ב- /etc/cron.d, שמנוהל על ידי שרות systemctl שנקרא certbot.timer. הסקריפט הזה רץ פעמיים ביום וירן אוטומטית תעודות שנמצאות בתוך שלושים יום מתפוגתן.

כדי לבדוק את מצב השרות הזה ולוודא שהוא פעיל, הקרי את הפקודה הבאה:

  1. sudo systemctl status certbot.timer

הפלט שלך יהיה דומה לזה הבא:

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:> Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left Triggers: ● certbot.service Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

כדי לבדוק את תהליך הרינוול, תוכל לבצע רינוול דמה עם certbot:

  1. sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for your_domain and www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

אם לא תקבל שום שגיאות, אתה מוכן. כשנדרש, Certbot ירנה את התעודות שלך וירeload Apache כדי לאסוף את השינויים. אם תהליך הרינוול האוטומטי יכשל אי פעם, Let’s Encrypt ישלח מסר לאימייל שהזנת, מודיע לך כשהתעודה שלך עומדת לתפוג.

סיכום

בהדרכה זו, התקנתם את הלקוח של Let’s Encrypt certbot, הגדרתם והתקנתם תעודת SSL עבור הרשת שלכם, ואימתם ששירות הרenewal הautomatic של Certbot פעיל בתוך systemctl. אם יש לכם שאלות נוספות על השימוש בCertbot, המסמך המקורי הוא מקום טוב להתחיל.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu