איך להתקין תעודת SSL חינמית (Let's Encrypt) על שרת

certbot על Ubuntu 24.04 עם Nginx או Apache, חידוש אוטומטי שבאמת עובד, תעודת Wildcard, HSTS ואיך מאבחנים כשמשהו נכשל.

עודכן: · 9 דק׳ קריאה · מאת צוות CloudServer

בקצרה כדי להתקין תעודת SSL חינמית של Let's Encrypt על שרת Ubuntu, מפנים את הדומיין לכתובת השרת, פותחים פורטים 80 ו-443, ומריצים sudo apt install certbot python3-certbot-nginx ואז sudo certbot --nginx -d example.co.il -d www.example.co.il (ב-Apache: python3-certbot-apache ו---apache). certbot מנפיק את התעודה, מגדיר את השרת ומתקין חידוש אוטומטי. בסוף בודקים את החידוש עם sudo certbot renew --dry-run.

תעודת SSL חינמית של Let's Encrypt נותנת לאתר שלכם HTTPS מלא, עם אותה הצפנה ואותו מנעול בדפדפן כמו תעודה בתשלום. על שרת לינוקס ההתקנה לוקחת כמה דקות עם הכלי certbot, שמאמת שהדומיין שלכם, מנפיק תעודה ומגדיר את Nginx או Apache בשבילכם. החלק שבאמת דורש תשומת לב הוא לא ההתקנה אלא החידוש: התעודות קצרות מועד, ואתר שהתעודה שלו פקעה בשבת בבוקר נראה לגולשים כמו אתר פרוץ.

מה זה SSL, TLS ו-HTTPS?

HTTPS הוא HTTP רגיל שעובר בתוך חיבור מוצפן בפרוטוקול TLS. "SSL" הוא השם של הפרוטוקול הקודם, שכבר לא בשימוש, אבל השם נשאר בשפה היומיומית - כשמישהו אומר "תעודת SSL" הוא מתכוון לתעודת TLS. התעודה עושה שני דברים: היא מוכיחה לדפדפן שהשרת שעונה הוא באמת של הדומיין, ומאפשרת להקים מפתח הצפנה משותף כך שאף אחד בדרך - ספק האינטרנט, רשת ה-WiFi בבית הקפה - לא יכול לקרוא או לשנות את התעבורה.

למה זה חשוב גם לאתר תדמית בלי טפסים?

  • דפדפנים - Chrome ושאר הדפדפנים מסמנים אתרי HTTP כ"לא מאובטח", ותכונות מודרניות רבות (מיקום, מצלמה, Service Workers, HTTP/2 בפועל) עובדות רק ב-HTTPS.
  • SEO - גוגל מתייחסת ל-HTTPS כאות דירוג. המשקל הישיר קטן, אבל אזהרת "לא מאובטח" מורידה אמון והמרות.
  • פרטיות - סיסמאות ניהול, עוגיות כניסה ופרטי טפסים עוברים מוצפנים. בחנות או באתר שאוסף פרטים זו כבר לא המלצה אלא דרישה בסיסית.

מה ההבדל בין תעודת SSL חינמית לתעודה בתשלום?

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

סוג תעודהמה מאומתמתי זה רלוונטי
DV (כולל Let's Encrypt)שליטה בדומיין בלבדאתרי תדמית, בלוגים, חנויות, אפליקציות ו-API. רוב האתרים ברשת
OVשליטה בדומיין וגם קיום הארגוןכשלקוח או מכרז דורשים זאת במפורש, או כשהתעודה צריכה להופיע עם שם החברה
EVבדיקת ארגון מורחבתדרישות רגולציה או מדיניות פנימית. דפדפנים כבר לא מציגים לה סימון מיוחד בשורת הכתובת

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

מה צריך לפני שמתקינים תעודת Let's Encrypt?

צריך שלושה דברים: דומיין שמצביע לשרת, פורט 80 פתוח מהאינטרנט, ושרת אינטרנט שעובד ב-HTTP. Let's Encrypt מאמתת בעלות על הדומיין באתגר HTTP-01: היא פונה לכתובת http://example.co.il/.well-known/acme-challenge/... ומצפה למצוא שם קובץ ש-certbot יצר. אם הדומיין עדיין מצביע לשרת הישן, או שחומת האש חוסמת את 80, האימות ייכשל.

# ודאו שהדומיין מצביע לכתובת השרת
dig +short example.co.il
dig +short www.example.co.il

# פתחו פורטים בחומת האש (ufw)
sudo ufw allow 'Nginx Full'     # או: sudo ufw allow 'Apache Full'
sudo ufw status

ודאו שגם בחומת האש של ספק הענן, אם יש כזו, פורטים 80 ו-443 פתוחים. ואם העברתם לאחרונה את רשומות ה-DNS, תנו להן זמן להתעדכן לפני שמנסים. אם השרת עוד לא מוכן בכלל, המדריך צ'קליסט אבטחת שרת לינוקס עובר על ההגדרות הבסיסיות, כולל ufw.

איך מתקינים SSL עם certbot על Nginx ב-Ubuntu 24.04?

מתקינים את certbot ואת התוסף של Nginx מהמאגרים של אובונטו, ומריצים certbot עם כל השמות שהאתר עונה להם:

sudo apt update
sudo apt install certbot python3-certbot-nginx

sudo certbot --nginx -d example.co.il -d www.example.co.il

בהרצה הראשונה certbot ישאל כתובת מייל ויבקש אישור לתנאי השימוש. לאחר מכן הוא מוצא את בלוק ה-server שבו server_name תואם לדומיין, מבצע את האימות, ומוסיף לקובץ את הגדרות ה-443 והפניה מ-HTTP ל-HTTPS. לכן חשוב ש-server_name יהיה מוגדר נכון לפני ההרצה - בלי זה certbot לא ידע איזה אתר לערוך.

הקבצים נשמרים תחת /etc/letsencrypt/live/example.co.il/: fullchain.pem (התעודה עם השרשרת) ו-privkey.pem (המפתח הפרטי). אל תעתיקו אותם למקום אחר - תפנו אליהם, כי בכל חידוש הקישורים בתיקייה מתעדכנים לקבצים החדשים.

apt או snap? הפרויקט של certbot ממליץ על התקנה דרך snap כדי לקבל גרסה עדכנית. בפועל, הגרסה במאגרים של Ubuntu 24.04 עובדת היטב ברוב המקרים ומתעדכנת עם עדכוני המערכת. מה שלא כדאי: להתקין את שתיהן, כי אז יש שני טיימרים ושני מקומות להגדרות.

איך מתקינים SSL עם certbot על Apache?

ב-Apache התהליך כמעט זהה, רק עם תוסף אחר:

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d example.co.il -d www.example.co.il

certbot מחפש VirtualHost עם ServerName או ServerAlias תואמים, יוצר קובץ -le-ssl.conf מקביל עם הגדרות 443, ומפעיל את מודול ssl אם צריך. אחרי ההתקנה כדאי להריץ sudo apache2ctl configtest כדי לוודא שהקונפיגורציה תקינה, במיוחד אם הקבצים שלכם מותאמים ידנית.

אם אתם מעדיפים ש-certbot לא ייגע בקבצי ההגדרות, אפשר רק להנפיק את התעודה ולהגדיר בעצמכם:

sudo certbot certonly --webroot -w /var/www/example -d example.co.il -d www.example.co.il

זו הגישה שאני מעדיף בשרתים עם הגדרות מורכבות, כי ברור מה שונה ומתי.

איך מפנים את כל התעבורה מ-HTTP ל-HTTPS?

certbot בגרסאות החדשות מוסיף הפניה אוטומטית. אם בחרתם שלא, או שאתם מגדירים ידנית, ב-Nginx זה בלוק אחד:

server {
    listen 80;
    listen [::]:80;
    server_name example.co.il www.example.co.il;
    return 301 https://$host$request_uri;
}

וב-Apache, בתוך ה-VirtualHost של פורט 80:

Redirect permanent / https://example.co.il/

השתמשו ב-301 ולא ב-302, כדי שמנועי החיפוש יעבירו את הדירוג לכתובות ה-HTTPS. ובחרו גרסה קנונית אחת - עם www או בלי - והפנו אליה את השנייה.

איך מוודאים שהחידוש האוטומטי של התעודה עובד?

certbot מתקין טיימר של systemd שרץ פעמיים ביום ומחדש כל תעודה שמתקרבת לפקיעה. תעודות Let's Encrypt תקפות כיום ל-90 יום, והארגון כבר הודיע שהן יתקצרו עוד, כך שחידוש ידני פשוט לא בא בחשבון. בודקים שני דברים:

# 1. הטיימר פעיל
systemctl list-timers | grep certbot
# בהתקנת apt: certbot.timer | בהתקנת snap: snap.certbot.renew.timer

# 2. תהליך החידוש עובד מקצה לקצה (בלי להנפיק תעודה אמיתית)
sudo certbot renew --dry-run

# רשימת התעודות ותאריכי הפקיעה
sudo certbot certificates

אם ה-dry-run עובר, אתם במצב טוב. שני דברים שגורמים לחידוש להיכשל אחרי חודשים של שקט: מישהו סגר את פורט 80 "כי האתר ממילא ב-HTTPS", או שהדומיין עבר ל-CDN או לשרת אחר. אל תסמכו על מיילים של תזכורת - Let's Encrypt הפסיקה לשלוח אותם ביוני 2025. עדיף ניטור חיצוני שבודק את תאריך הפקיעה ומתריע שבועיים מראש.

אם יש לכם שירות נוסף שמשתמש באותה תעודה, למשל שרת דואר, הוסיפו hook שמטעין אותו מחדש אחרי חידוש:

sudo sh -c 'printf "#!/bin/sh\nsystemctl reload postfix\n" > /etc/letsencrypt/renewal-hooks/deploy/reload-postfix.sh'
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-postfix.sh

איך מקבלים תעודת Wildcard עם אימות DNS-01?

תעודת Wildcard, כמו *.example.co.il, אפשר לקבל רק באימות DNS-01: במקום קובץ בשרת, יוצרים רשומת TXT בשם _acme-challenge באזור ה-DNS של הדומיין. זה גם הפתרון לשרת שאין לו פורט 80 פתוח בכלל, למשל שרת פנימי.

# הנפקה ידנית - certbot יציג את ערך ה-TXT שצריך להוסיף
sudo certbot certonly --manual --preferred-challenges dns \
  -d example.co.il -d '*.example.co.il'

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

sudo apt install python3-certbot-dns-cloudflare
# קובץ עם API Token בהרשאת עריכת DNS בלבד
sudo chmod 600 /root/.secrets/cloudflare.ini
sudo certbot certonly --dns-cloudflare \
  --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
  -d example.co.il -d '*.example.co.il'

יש תוספים לספקי DNS נפוצים נוספים. אם לספק שלכם אין תוסף, שקלו להעביר את ניהול ה-DNS לספק שיש לו API - זה חוסך כאב ראש קבוע.

מה זה HSTS והאם כדאי להפעיל אותו?

HSTS הוא כותרת שאומרת לדפדפן "מהיום, לדומיין הזה פנה רק ב-HTTPS", כך שגם אם מישהו מקליד http:// או לוחץ על קישור ישן, הדפדפן לא שולח אפילו בקשה אחת לא מוצפנת. כדאי להפעיל אותו, אבל בהדרגה:

# Nginx - בתוך בלוק server של 443
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# Apache - אחרי sudo a2enmod headers
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

התחילו עם max-age=300 לכמה ימים, ודאו שכל תת-הדומיינים עובדים ב-HTTPS (כולל ממשקים פנימיים שאולי שכחתם), ורק אז העלו לשנה. אל תוסיפו preload ואל תגישו לרשימת ה-preload של הדפדפנים אם אינכם בטוחים - ההסרה משם לוקחת זמן רב, ובינתיים כל תת-דומיין בלי HTTPS פשוט לא ייפתח.

איך בודקים שתעודת ה-SSL מותקנת נכון?

הבדיקה המהירה ביותר מהטרמינל היא openssl s_client, שמתחברת לשרת כמו דפדפן ומציגה את התעודה שהוא מגיש:

echo | openssl s_client -connect example.co.il:443 -servername example.co.il 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

# בדיקת ההפניה וה-HSTS
curl -sI http://example.co.il | head -3
curl -sI https://example.co.il | grep -i strict

בפלט מחפשים שלושה דברים: subject עם הדומיין הנכון, issuer של Let's Encrypt, ו-notAfter עם תאריך עתידי. הפרמטר -servername חשוב - בלעדיו, בשרת עם כמה אתרים, תקבלו את תעודת ברירת המחדל ותחשבו שיש בעיה. לבדיקה מקיפה יותר של פרוטוקולים והצפנים יש כלים מקוונים כמו SSL Labs.

למה התקנת תעודת SSL נכשלת? שגיאות נפוצות

רוב הכשלים נובעים מכך ש-Let's Encrypt לא מצליחה להגיע לשרת שלכם בדומיין שביקשתם. ההודעה של certbot בדרך כלל מפרטת את סוג השגיאה ואת הכתובת שנבדקה:

תסמין או הודעהסיבהפתרון
Timeout during connect (likely firewall problem)פורט 80 חסום - בחומת האש של השרת, של הספק, או אצל ספק האינטרנט בשרת ביתיפתחו את 80 ב-ufw ובפאנל. אם אי אפשר לפתוח - עברו לאימות DNS-01
DNS problem: NXDOMAIN או no valid A recordsהדומיין או ה-www לא מוגדרים ב-DNS, או שעדיין לא התעדכנובדקו עם dig +short ותקנו את רשומת A (ו-AAAA)
Invalid response from ... 404הדומיין מצביע לשרת אחר, או ש-Nginx/Apache מגישים אתר אחר מהצפויודאו שה-IP נכון. אם יש רשומת AAAA ישנה, Let's Encrypt עשויה לבדוק דרך IPv6 - מחקו או תקנו אותה
too many certificates already issuedהגעתם למגבלת קצב (Rate Limit) - מגבלות שבועיות על מספר התעודות לדומיין ולאותה קבוצת שמותחכו שהחלון יתאפס. לניסויים השתמשו ב---dry-run או ב---test-cert (שרת הבדיקות)
מנעול עם אזהרה / "לא מאובטח" חלקיתוכן מעורב: קבצים שנטענים ב-http:// בתוך דף HTTPSF12 ← Console מציג את הקבצים. החליפו את הכתובות ל-https או לנתיב יחסי
הדפדפן מציג תעודה של דומיין אחרNginx/Apache לא מזהים את ה-server_name ומגישים את ברירת המחדלבדקו את server_name/ServerName והריצו nginx -t או apache2ctl -S
התעודה פקעה למרות certbotהחידוש נכשל בשקט - פורט 80 נסגר, DNS השתנה, או שהשירות לא נטען מחדשsudo certbot renew --dry-run והלוג ב-/var/log/letsencrypt/letsencrypt.log

טיפ שחוסך הרבה תסכול: לפני כל ניסוי חוזר הריצו --dry-run. הוא עובד מול שרת הבדיקות של Let's Encrypt, שמגבלות הקצב שלו נדיבות בהרבה, וכך תקלה בהגדרות לא תשרוף לכם את המכסה של השרת האמיתי.

מה עוד צריך לעשות באתר וורדפרס אחרי התקנת SSL?

בוורדפרס צריך לעדכן את כתובת האתר ל-https בהגדרות (או ב-wp-config.php), ואז להחליף קישורים ישנים בתוכן. הדרך הבטוחה היא WP-CLI:

wp search-replace 'http://example.co.il' 'https://example.co.il' --all-tables --dry-run
# אחרי שבדקתם את התוצאה - בלי --dry-run

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

איך מתקינים Let's Encrypt על שרת Windows עם IIS?

על Windows Server עם IIS הכלי המקובל הוא win-acme. מורידים את הגרסה העדכנית מהאתר הרשמי של הפרויקט, פורסים לתיקייה, ומריצים את wacs.exe כמנהל. בתפריט בוחרים יצירת תעודה, בוחרים את האתר מתוך רשימת אתרי IIS, ו-win-acme מנפיק את התעודה, מוסיף binding של HTTPS ויוצר משימה מתוזמנת ב-Task Scheduler לחידוש. גם כאן העיקרון זהה: פורט 80 פתוח לאימות, או אימות DNS.

איזו שיטה לבחור?

לאתר רגיל על שרת ענן לינוקס: certbot --nginx או --apache, ובדיקת dry-run מיד אחרי. לכמה תת-דומיינים דינמיים או לשרת בלי פורט 80 פתוח: Wildcard עם תוסף DNS. ל-IIS: win-acme. בכל המקרים, ההתקנה היא החלק הקל. מה שמבדיל שרת מסודר הוא שמישהו בדק שהחידוש עובד, ויש ניטור שיתריע לפני שהתעודה פוקעת.

שאלות נפוצות

האם תעודת SSL חינמית של Let's Encrypt פחות מאובטחת מתעודה בתשלום?
לא. ההצפנה זהה, והדפדפנים סומכים על Let's Encrypt בדיוק כמו על כל רשות תעודות אחרת. ההבדל הוא ברמת האימות: Let's Encrypt מאמתת רק שליטה בדומיין (DV), ואינה מנפיקה תעודות שמאמתות את זהות הארגון (OV/EV). לרוב האתרים והחנויות DV מספיקה לחלוטין.
כל כמה זמן צריך לחדש תעודת Let's Encrypt?
התעודות קצרות מועד - כיום 90 יום, ו-Let's Encrypt כבר הודיעה על קיצור נוסף. לכן לא מחדשים ידנית: certbot מתקין טיימר שבודק פעמיים ביום ומחדש תעודה כשמתקרב מועד הפקיעה. מה שכן צריך לעשות הוא לוודא שהטיימר פעיל ולהריץ certbot renew --dry-run.
האם אפשר להתקין Let's Encrypt על שרת Windows עם IIS?
כן. הכלי הנפוץ ל-Windows הוא win-acme: מורידים, מריצים את wacs.exe כמנהל, בוחרים את האתר ב-IIS, והוא מנפיק את התעודה, מחבר אותה ל-binding של HTTPS ויוצר משימה מתוזמנת לחידוש.
האם אפשר לקבל תעודת Wildcard חינם?
כן. Let's Encrypt מנפיקה תעודות Wildcard כמו *.example.co.il, אבל רק באימות DNS-01: יוצרים רשומת TXT באזור ה-DNS של הדומיין. כדי שהחידוש יהיה אוטומטי צריך תוסף של certbot לספק ה-DNS שלכם, שיוצר את הרשומה דרך API.
למה האתר עדיין מציג אזהרה אחרי שהתקנתי SSL?
הסיבה הנפוצה היא תוכן מעורב (Mixed Content): הדף נטען ב-HTTPS, אבל תמונה, סקריפט או קובץ CSS נטענים בכתובת http://. כלי המפתחים בדפדפן (F12, לשונית Console) מראה בדיוק אילו קבצים. בוורדפרס מעדכנים את כתובת האתר ומחליפים קישורים ישנים במסד הנתונים.
האם HTTPS משפיע על הדירוג בגוגל?
גוגל הודיעה כבר לפני שנים ש-HTTPS הוא אות דירוג, אם כי משקלו קטן. ההשפעה הגדולה יותר עקיפה: דפדפנים מסמנים אתרי HTTP כלא מאובטחים, וגולשים שרואים את האזהרה נוטשים, במיוחד בטפסים ובדפי תשלום.