SSL לפשוטי העם, או: אתם לא צריכים את PunchSalad
מדריך פרקטי להנפקת תעודת SSL בחינם עם Certbot, מעבר אתגר ה-ACME HTTP דרך .well-known, והגדרת חידוש בלי שירות SSL בתשלום.

לרוב פאנלי האחסון היום יש כפתור שנקרא SSL, Let’s Encrypt או AutoSSL. תלחצו עליו. אם Cloudflare, cPanel, Plesk, חברת האחסון שלכם או מישהו אחר כבר מחדש את התעודה אוטומטית, תסגרו את המאמר ותצאו החוצה. ניצחתם.
המדריך הזה הוא בשביל הסוג השני של אחסון. זה שמוכר SSL כתוספת בתשלום, נותן לכם מנהל קבצים מ-2009, ואיכשהו משכנע אתכם שבלי PunchSalad המנעול בדפדפן ימות.
הוא לא ימות. PunchSalad עושה בדיוק את אותו אתגר ACME ש-Certbot עושה בחינם.
בקצרה מאוד, מה זה SSL?
SSL זה השם הישן שכולם עדיין משתמשים בו עבור TLS, ההצפנה שמאחורי HTTPS.
כשדפדפן מתחבר, השרת שלכם שולף את התעודה שלו כמו תעודת זהות בכניסה. הדפדפן בודק שלושה דברים: שרשות אישורים (Certificate Authority) שהוא סומך עליה חתמה עליה, שהשם שעליה תואם לדומיין שלכם, ושהתוקף שלה לא פג. אם שלושתם עוברים, השניים מסכימים על מפתחות זמניים וממשיכים עם HTTP הישן והטוב בתוך מנהרה מוצפנת.
התעודה עושה שני דברים שימושיים:
- מוכיחה שהשרת שעונה בשם
example.comבאמת שולט ב-example.com; - מצפינה את התעבורה בין הגולש לבין השרת הזה.
היא לא מוכיחה שהבעלים הוא אדם נחמד, שהאתר מאובטח, או שבהתקנת ה-WordPress אין תוסף שעודכן לאחרונה בתקופת ממשל אובמה.
איך עובד אתגר ה-ACME
Let’s Encrypt מחלקים תעודות בחינם, אבל קודם הם צריכים הוכחה שהדומיין שלכם. ACME הוא הפרוטוקול שבו מתנהלת השיחה הזאת.
בשפת אדם קדמון:
- Certbot מבקש מ-Let’s Encrypt תעודה עבור
example.com. - Let’s Encrypt עונה: שים את הטקסט המוזר הזה בקובץ עם השם המוזר הזה.
- אתם שמים אותו בכתובת
http://example.com/.well-known/acme-challenge/WEIRD-NAME. - Let’s Encrypt מוריד את הקובץ ורואה את הטקסט שציפה לו.
- רק מי ששולט באתר יכול היה לעשות את זה, אז הוא מנפיק את התעודה.
Certbot מוסר לכם קובץ:
אני תמיד מסתכל רק ב-/.well-known/acme-challenge/. כל פעם.
זה נקרא HTTP-01 challenge. פורט 80 חייב להיות נגיש מהאינטרנט. התיקייה .well-known היא לא קסם; היא פשוט ארון מוסכם שבו רובוטים של תעודות מחפשים הוכחות.
קודם תנסו את האופציה האוטומטית והמשעממת
אם יש לכם גישת root ואתם משתמשים ב-Nginx או ב-Apache, Certbot יכול לבצע את האתגר, לערוך את הקונפיג של שרת האינטרנט ולסדר לכם חידוש:
sudo certbot --nginx
# orsudo certbot --apacheזו התשובה הנכונה לרוב השרתים. תבדקו את החידוש פעם אחת ותעזבו את זה בשקט:
sudo certbot renew --dry-runרוב ההתקנות של Certbot כוללות טיימר של systemd או משימת cron שמריצה certbot renew. אתם לא מחדשים את התעודה על ידי זה שאתם זוכרים אותה כל כמה חודשים. מחשבים די טובים עם לוחות שנה.
webroot, כשאתם רוצים לשלוט בקונפיג בעצמכם
לפעמים אתם לא רוצים ש-Certbot יערוך את Nginx, או שהתוסף של שרת האינטרנט לא מבין את ההגדרות שלכם. התוסף webroot מוכיח שליטה בדומיין על ידי כתיבת קובץ האתגר לתוך תיקיית האתר הקיימת, בלי לעצור את השרת.
נניח שהאתר מוגש מ:
/var/www/example.com/publicתוודאו ש-Nginx מגיש את תיקיית האתגר ב-HTTP רגיל:
server { listen 80; server_name example.com www.example.com; root /var/www/example.com/public;
location ^~ /.well-known/acme-challenge/ { default_type text/plain; try_files $uri =404; }
location / { return 301 https://$host$request_uri; }}לפני שמערבים תעודות, תבדקו את הארון:
sudo mkdir -p /var/www/example.com/public/.well-known/acme-challengeecho works | sudo tee /var/www/example.com/public/.well-known/acme-challenge/testcurl http://example.com/.well-known/acme-challenge/testsudo rm /var/www/example.com/public/.well-known/acme-challenge/testאם curl מדפיס works, תבקשו את התעודה:
sudo certbot certonly --webroot \ -w /var/www/example.com/public \ -d example.com \ -d www.example.comCertbot ישמור אותה כאן:
/etc/letsencrypt/live/example.com/fullchain.pem/etc/letsencrypt/live/example.com/privkey.pemתכוונו את שרת ה-HTTPS לקבצים האלה:
server { listen 443 ssl; server_name example.com www.example.com; root /var/www/example.com/public;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3;
# The rest of your site config goes here.}אחר כך תבדקו ותטענו מחדש את Nginx:
sudo nginx -tsudo systemctl reload nginxsudo certbot renew --dry-runבחידוש, Certbot זוכר שהשתמשתם ב-webroot, שם אתגר חדש באותה תיקייה, מקבל תעודה חדשה ומחליף את הקבצים שמאחורי הנתיבים האלה. Nginx עדיין צריך reload כדי לשים לב להחלפה. תוסיפו deploy hook קבוע שרץ רק אחרי חידוש מוצלח:
sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploysudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx >/dev/null <<'EOF'#!/bin/shsystemctl reload nginxEOFsudo chmod 755 /etc/letsencrypt/renewal-hooks/deploy/reload-nginx
sudo certbot renew --dry-run --run-deploy-hooksדיסק
- live/example.com/
- fullchain.pem
- privkey.pem
- archive/example.com/
- privkey1.pem
- fullchain1.pem
- privkey2.pem
- fullchain2.pem
פג 2 בדצמ׳ 2026
זיכרון של nginx
פג 2 בדצמ׳ 2026
נשארו יותר מ-30 יום. Certbot בודק, מושך בכתפיים, ישן.
הדרך הידנית באמת, לאחסון גרוע
עכשיו הגענו לתרחיש של PunchSalad: האתר באוויר, אבל אין לכם גישת SSH ואין כפתור Let’s Encrypt. אתם עדיין יכולים להריץ את Certbot על מכונת לינוקס אחרת ולהעלות את ההוכחה דרך FTP או דרך מנהל הקבצים של האחסון.
גם מכונת לינוקס אחרת אין? בניתי כלי לתעודת SSL שמנהל את אותה שיחה בדפדפן: נותן לכם את הקבצים (או את רשומות ה-DNS), מבקש מ-Let’s Encrypt לבדוק אותם ומחזיר את התעודה, המפתח וה-CA bundle. הצעדים למטה הם בדיוק מה שהוא עושה בשבילכם.
תריצו:
sudo certbot certonly --manual \ --preferred-challenges=http \ --agree-tos \ -m you@example.com \ -d example.com \ -d www.example.comCertbot יציג שם קובץ, תוכן לקובץ, וכתובת שנראית בערך כך:
http://example.com/.well-known/acme-challenge/a1b2c3-weird-tokenאל תלחצו Enter עדיין. במנהל הקבצים של האחסון:
- תפתחו את תיקיית השורש של הדומיין, בדרך כלל
public_html. - תיצרו בתוכה את
.well-known. תיקיות שמתחילות בנקודה עלולות להיות מוסתרות כברירת מחדל. - תיצרו את
acme-challengeבתוך.well-known. - תיצרו בדיוק את הקובץ ש-Certbot ביקש, עם בדיוק התוכן שהוא הדפיס.
- תפתחו את הכתובת בדפדפן או עם
curlותוודאו שהיא מחזירה רק את הערך הזה. - תחזרו ל-Certbot ותלחצו Enter.
אם ביקשתם גם את הדומיין החשוף וגם את www, ייתכן ש-Certbot יבקש אתגר נוסף. תחזרו על התהליך. כל hostname חייב להצביע על חשבון האחסון הזה ולהגיש את הקובץ הנכון.
אחרי האימות, Certbot נותן לכם את הקבצים האלה:
| קובץ | מה זה |
|---|---|
cert.pem | התעודה של הדומיין שלכם |
chain.pem | תעודות הביניים של רשות האישורים |
fullchain.pem | cert.pem ו-chain.pem ביחד |
privkey.pem | המפתח הפרטי שלכם; אל תשתפו אותו |
פאנל האחסון עשוי לבקש בנפרד Certificate, Private Key ו-CA Bundle. תנו לו את cert.pem, privkey.pem ו-chain.pem. אם הוא מבקש קובץ אחד של שרשרת תעודות, תשתמשו ב-fullchain.pem.
live/example.com/
-----BEGIN CERTIFICATE-----
⋮ example.com
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
⋮ Let's Encrypt
-----END CERTIFICATE----------BEGIN CERTIFICATE----- ⋮ example.com -----END CERTIFICATE----------BEGIN CERTIFICATE----- ⋮ Let's Encrypt -----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
⋮ רק על המחשב שלכם
-----END PRIVATE KEY------ Chrome
- Firefox
- curl, אפליקציות
curl: (60) SSL certificate problem: unable to get local issuer certificate
הקלאסיקה: CA Bundle ריק. curl ישים לב.
המלכודת של המצב הידני
תעודות שהתקבלו עם --manual לא מתחדשות אוטומטית, אלא אם תכתבו authentication hooks שיודעים להעלות את האתגר בשבילכם. תריצו שוב את אותה פקודה ותתקינו את התעודה החדשה הרבה לפני שהנוכחית פגה.
זה לא כישלון של Certbot. חידוש אוטומטי דורש דרך אוטומטית כלשהי להוכיח שליטה ולהתקין את התוצאה. בן אדם שגורר קובץ סודי לתוך public_html הוא, לצערנו, לא API.
החיבור שלך אינו פרטי
NET::ERR_CERT_DATE_INVALID
- certbot certonly --manual
- להעלות את הטוקן ל-public_html
- להדביק את הקבצים בפאנל
עזבו 0 · בקצב של ~140 מבקרים ביום
לחדש SSL ל-example.com
מיום 60 הטיימר נכשל. התוכנית הגיבוי זה אתם.
אם חברת האחסון תיתן לכם גישת SSH בהמשך, תעברו ל---webroot. אם היא תוסיף תמיכה מובנית ב-Let’s Encrypt, תשתמשו בה. אם היא ממשיכה לגבות כל שנה על הזכות להדביק תעודות חינמיות לתוך טופס, שווה לשקול להחליף אחסון.
כשזה נכשל
כמעט כל כישלון של HTTP-01 הוא אחד מאלה:
- הדומיין מצביע על שרת אחר;
- פורט 80 חסום;
.well-knownנוצרה מחוץ לתיקיית השורש האמיתית של האתר;- WordPress, Nginx או כלל אבטחה כלשהו מיירטים את כתובת האתגר;
- ביקשתם את ה-hostname של
wwwאבל אין לו רשומת DNS; - רשומת IPv6 מסוג
AAAAמצביעה למקום אחר מרשומת IPv4 מסוגA; - מנהל הקבצים הוסיף בטובו
.txtלשם הטוקן.
אל תמשיכו להריץ את Certbot שוב ושוב בתקווה שהאינטרנט ישנה את דעתו. תפתחו את כתובת האתגר המדויקת. עד שהיא לא מחזירה את הערך המדויק, גם Let’s Encrypt לא יכול לאמת אותו.
קישורים שימושיים
- Certbot: קבלת תעודות ובחירת תוספים
- סוגי האתגרים של Let’s Encrypt
- למה Let’s Encrypt ממליצים להשאיר את פורט 80 פתוח
תמונת שער: פיטר ברויגל האב, “הקוצרים”, 1565, מוזיאון המטרופוליטן לאמנות, נחלת הכלל.
תגובות
התגובות נשמרות ב-GitHub Discussions (דרך giscus), אז כדי להצטרף לשיחה צריך חשבון GitHub.