הקדמה
Let’s Encrypt היא רשות אישורים (CA) המספקת דרך נגישה לקבל ולהתקין תעודות TLS/SSL בחינם, מאפשרת כך הפעלת HTTPS מוצפן על שרתי האינטרנט. היא פשוטה את התהליך על ידי ספקת קליינט תוכנה, Certbot, שמנסה לאוטומציה של רוב (אם לא כל) השלבים הנדרשים. כרגע, כל תהליך של קבלת והתקנת תעודה מופעל באופן אוטומטי לחלוטין על שני השרתים, Apache ו-Nginx.
במדריך זה, תשתמש ב-Certbot כדי לקבל תעודת SSL בחינם ל-Nginx על מערכת ההפעלה Rocky Linux 9 ותגדיר את התעודה שלך לחדשות אוטומטית.
מדריך זה ישתמש בקובץ תצורת שרת Nginx נפרד במקום הקובץ הברירתי. יש ליצור קבצי בלוק שרת Nginx חדשים עבור כל דומיין, מאחר וזה יעזור למנוע טעויות נפוצות וישמור על הקבצים הברירתיים כתצורת משנה.
דרישות מוקדמות
על מנת לבצע את המדריך, יש לך צורך ב:
-
הגדרת שרת Rocky Linux 9 על פי המדריך הגדרת שרת ראשונית עבור Rocky Linux 9, כולל משתמש עם הרשאות sudo וגישה לגיש מנהל המערכת לא-root, וגם חומת אש.
-
שם דומיין מורשה. במדריך זה נשתמש ב-
example.com
בכל הופעה. ניתן לרכוש שם דומיין מ- Namecheap, לקבל אחד בחינם מ- Freenom, או להשתמש ברשם הדומיינים שבחרת. -
שני רשומות DNS המוגדרות עבור השרת שלך. אם אתה משתמש ב-DigitalOcean, אנא ראה ב- תיעוד DNS שלנו לקבלת פרטים נוספים על הוספתן.
- רשומת A עם
example.com
מפנה לכתובת ה-IP הציבורית של השרת שלך. - רשומת A עם
www.example.com
מפנה לכתובת ה-IP הציבורית של השרת שלך.
- רשומת A עם
-
Nginx מותקן על ידי המדריך איך להתקין Nginx על Rocky Linux 9. וודא שיש לך בלוק שרת עבור הדומיין שלך. המדריך ישתמש ב-
/etc/nginx/sites-available/example.com
כדוגמה.
שלב 1 — התקנת Certbot
ראשית, עליך להתקין את חבילת התוכנה certbot
. התחבר לשרת Rocky Linux 8 שלך בתור המשתמש שאינו רוט:
- ssh sammy@your_server_ip
חבילת ה-certbot
אינה זמינה דרך מנהל החבילות כברירת מחדל. עליך להפעיל את המאגר EPEL כדי להתקין את Certbot.
כדי להוסיף את מאגר ה- EPEL של Rocky Linux 9, הפעל את הפקודה הבאה:
- sudo dnf install epel-release
כאשר תתבקש לאשר את ההתקנה, הקלד ואשר y
.
עכשיו שיש לך גישה למאגר התוספות, התקן את כל החבילות הדרושות:
- sudo dnf install certbot python3-certbot-nginx
זה יתקין את Certbot עצמו ואת התוסף Nginx עבור Certbot, שנדרש כדי להפעיל את התוכנית.
תהליך ההתקנה ישאל אותך בנוגע לייבוא מפתח GPG. אשר אותו כדי שההתקנה תוכל להשלים.
עכשיו שיש לך את Certbot מותקן, בואו נפעיל אותו כדי לקבל תעודה.
שלב 2 — אישור הגדרת ה-Nginx
כדי ש-Certbot יוכל למצוא את ה-server
הנכון בתצורת ה-Nginx שלך ולהגדיר SSL באופן אוטומטי, נדרש לו למצוא הוראת server_name
שתואמת לדומיין שבו אתה מבקש תעודה.
אם עקבת אחרי שלב הגדרת הבלוק שרת במדריך ההתקנה של Nginx, צריך לך להיות בלוק שרת עבור הדומיין שלך ב- /etc/nginx/conf.d/example.com
עם ההוראת server_name
כבר מוגדרת בצורה המתאימה.
כדי לבדוק, פתח את קובץ התצורה של הדומיין שלך באמצעות nano
או העורך הטקסט המועדף עליך:
- sudo nano /etc/nginx/conf.d/example.com
מצא את השורה הקיימת של server_name
. היא צריכה להיראות כמו זו:
...
server_name example.com www.example.com;
...
אם כן, צא מהעורך שלך והמשך לשלב הבא.
אם לא, עדכן אותה כך שתתאים. לאחר מכן, שמור את הקובץ, צא מהעורך שלך, ואמת את התחביר של העריכות של התצורה שלך:
- sudo nginx -t
אם אתה מקבל שגיאה, פתח מחדש את קובץ בלוק השרת ובדוק אם יש טעויות כתיב או תווים חסרים. לאחר שהתחברות הקובץ התחברות נכונה, הפעל מחדש את Nginx כדי לטעון את התצורה החדשה:
- sudo systemctl reload nginx
Certbot יכול כעת למצוא את בלוק ה-server
הנכון ולעדכן אותו אוטומטית.
בשלב הבא, נעדכן את הגדרות הגישה לחומת האש כך שתאפשר תעבורת HTTPS.
שלב 3 — עדכון כללי החומה
מכיוון שההגדרה הקדמית שלך מאפשרת את firewalld, יהיה עליך להתאים את הגדרות החומה כדי לאפשר חיבורים חיצוניים לשרת ה- Nginx שלך.
כדי לבדוק אילו שירותים כבר מופעלים, הפעל את הפקודה:
- sudo firewall-cmd --permanent --list-all
תקבל פלט כמו זה:
Outputpublic
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
אם אתה לא רואה את http
ברשימת השירותים, הפעל אותו על ידי הרצת:
- sudo firewall-cmd --permanent --add-service=http
כדי לאפשר תעבורת https
, הפעל את הפקודה הבאה:
- sudo firewall-cmd --permanent --add-service=https
כדי להחיל את השינויים, יהיה עליך לטעון מחדש את שירות הגישה:
- sudo firewall-cmd --reload
עכשיו שפתחת את השרת שלך לתעבורת https, אתה מוכן להפעיל את Certbot ולקבל את התעודות שלך.
שלב 4 — קבלת תעודת SSL
Certbot מספק מגוון שיטות לקבלת תעודות SSL דרך תוספים. תוסף ה-Nginx יטפל בשינוי התצורה של Nginx ובטעינת ההגדרה מחדש כשצריך. כדי להשתמש בתוסף זה, הקלד את הפקודה הבאה:
- sudo certbot --nginx -d example.com -d www.example.com
זה מפעיל את certbot
עם תוסף ה-Nginx, באמצעות --nginx
, ומשתמש ב--d
כדי לציין את שמות הדומיין שבהם אתה רוצה שהתעודה תהיה תקפה עבורם.
בעת הפעלת הפקודה, יתבקש ממך להזין כתובת דוא"ל ולהסכים לתנאי השירות. לאחר עשיית זאת, תראה הודעה שמאשרת כי התהליך הצליח ואיפה התעודות שלך מאוחסנות:
OutputSuccessfully 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-12-15.
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/nginx/conf.d/your_domain.conf
Successfully deployed certificate for www.your_domain to /etc/nginx/conf.d/your_domain.conf
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
…
התעודות שלך נורדו, הותקנו ונטענו, והתצורה של ה-Nginx שלך כעת תפנה אוטומטית את כל בקשות האינטרנט ל-https://
. נסה לטעון מחדש את האתר שלך ושים לב לאינדיקטור האבטחה בדפדפן שלך. כמעט תמיד הוא יצביע כי האתר מאובטח באופן תקין, בדרך כלל עם סמל מנעול. אם תבדוק את השרת שלך באמצעות הבדיקה של SSL Labs Server Test, הוא יקבל ציון A.
בוא נסיים על ידי בדיקת תהליך החידוש.
שלב 5 — אימות חידוש אוטומטי של Certbot
תעודות Let's Encrypt תקפות למשך 90 יום, אך מומלץ לחדש את התעודות כל 60 יום כדי לאפשר מרווח שגיאה. ללקוח Certbot של Let's Encrypt יש פקודת renew
שבודקת אוטומטית את התעודות המותקנות כעת ומנסה לחדש אותן אם הן פחות מ-30 ימים מתאריך התפוגה.
ניתן לבדוק את חידוש התעודות האוטומטי עבור התעודות שלך על ידי הרצת פקודה זו:
- sudo certbot renew --dry-run
הפלט יהיה דומה לזה:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for monitoring.pp.ua
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/your_domain/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
...
שים לב שאם יצרת תעודה מקובץ עם מספר תחומים, רק שם הדומיין הבסיסי יופיע בפלט, אך החידוש יעבוד עבור כל התחומים הכלולים בתעודה זו.
A practical way to ensure your certificates will not get outdated is to create a cron
job that will periodically execute the automatic renewal command for you. Since the renewal first checks for the expiration date and only executes the renewal if the certificate is less than 30 days away from expiration, it is safe to create a cron job that runs every week, or even every day.
ערוך את crontab כדי ליצור עבודה חדשה שתרוץ את החידוש פעמיים ביום. כדי לערוך את crontab עבור המשתמש root, הפעל:
- sudo crontab -e
עורך הטקסט שלך יפתח את crontab הברירת מחדל, שהוא קובץ טקסט ריק בנקודה זו. הכנס למצב הכנסה על ידי לחיצה על i
והוסף את השורה הבאה:
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet
כשתסיים, לחץ על ESC
כדי לצאת ממצב ההכנסה, אז :wq
ואז ENTER
כדי לשמור ולצאת מהקובץ. כדי ללמוד עוד על עורך הטקסט Vi והיורש שלו, Vim, בדוק את המדריך שלנו התקנת ושימוש בעורך הטקסט Vim על שרת ענן.
זה ייצור עבודה כרונית חדשה שתפעל בצהרים ובחצות כל יום. python -c 'import random; import time; time.sleep(random.random() * 3600)'
יבחר דקה אקראית בתוך השעה עבור משימות החידוש שלך.
הפקודה renew
עבור Certbot תבדוק את כל התעודות שמותקנות במערכת ותעדכן כל תעודה שמוגדרת לפוג תוקף בפחות משלושים יום. הפרמטר --quiet
אומר ל-Certbot לא להדפיס מידע או לחכות לקלט מהמשתמש.
מידע נוסף ומעמיק אודות החידוש ניתן למצוא ב-תיעוד של Certbot.
סיכום
במדריך זה, התקנת את לקוח Let’s Encrypt Certbot, הורדת תעודות SSL עבור הדומיין שלך והגדרת חידוש אוטומטי של התעודות. אם יש לך שאלות בנוגע לשימוש ב-Certbot, תוכל לבדוק את תיעוד ה-Certbot הרשמי.
תוכל גם לבדוק את בלוג Let’s Encrypt הרשמי לעדכונים חשובים מעת לעת.