יצירת תעודת SSL בלינוקס והתקנתה על שרת Apache: מדריך מעשי בעברית (OpenSSL, Virtual Host, HTTPS)

אם אתם מנהלים שרת Linux בארגון, ההבדל בין שרת חובבני לשרת מקצועי מתחיל בשורה אחת בדפדפן: http או https. שרת שמגיש תוכן ב-HTTP שולח את הכל בטקסט גלוי — סיסמאות, טפסים, Session Cookies — וכל מי שיושב על אותה רשת יכול לקרוא. במדריך הזה נבנה יחד את התהליך המלא: נתקין את התמיכה ב-SSL על Apache, נגדיר Virtual Host, ניצור תעודת אבטחה עם OpenSSL כולל SAN, נחבר אותה לשרת ונוודא שהדפדפן באמת סומך עליה. כל הפקודות נבדקות בסביבת מעבדה, בדיוק כמו שאתם תעשו בשרת אמיתי.
תעודה היא לא קובץ אחד — היא זוג: Private Key שנשאר על השרת ולעולם לא יוצא ממנו, ותעודה ציבורית (Public Certificate) שמוצגת לכל לקוח. מי שמדליף Private Key — מדליף את כל התקשורת.
שלב 0: מה צריך לפני שמתחילים
- ▸שרת Linux עם Apache פעיל (LAMP או התקנה נקייה של httpd)
- ▸גישת root או משתמש עם sudo
- ▸שם מתחם (Domain) לשרת — או רשומה ידנית בקובץ hosts אם זו מעבדה
- ▸פורט 443 פתוח בפיירוול של השרת
במדריך נשתמש בתעודת Self-Signed — תעודה שהשרת חותם על עצמו. היא מצוינת למעבדות, סביבות פיתוח ושירותים פנים-ארגוניים. באתר ציבורי אמיתי התהליך זהה לחלוטין, רק שבמקום לייצר את התעודה בעצמכם אתם מקבלים אותה מ-CA מוכר (Let's Encrypt, DigiCert, Sectigo) ומשייכים אותה בדיוק לאותן שורות ב-Apache.
שלב 1: התקנת mod_ssl
Apache לא יודע לדבר TLS בלי המודול המתאים. בהפצות מבוססות RHEL/CentOS/Rocky:
[root@netme ~]# sudo yum install -y mod_ssl openssl
[root@netme ~]# systemctl enable --now httpd
[root@netme ~]# httpd -M | grep ssl
ssl_module (shared)שלב 2: הגדרת Virtual Host לאתר
אם השרת עדיין לא רשום ב-DNS, נכוון אליו ידנית. בתחנת הווינדוס עורכים את C:\Windows\System32\drivers\etc\hosts, ובשרת עצמו את /etc/hosts:
192.168.1.115 netme.local www.netme.localעכשיו נגרום ל-Apache לטעון תיקיית קונפיגורציות נפרדת לכל אתר — המבנה המקובל בסביבות Production, שמונע קובץ httpd.conf ענק ובלתי ניתן לתחזוקה:
[root@netme ~]# echo 'IncludeOptional sites-enabled/*.conf' >> /etc/httpd/conf/httpd.conf
[root@netme ~]# mkdir -p /etc/httpd/sites-available /etc/httpd/sites-enabled
[root@netme ~]# vi /etc/httpd/sites-available/netme.local.conf<VirtualHost *:80>
ServerName www.netme.local
ServerAlias netme.local
DocumentRoot /var/www/html/
</VirtualHost>[root@netme ~]# ln -s /etc/httpd/sites-available/netme.local.conf /etc/httpd/sites-enabled/netme.local.conf
[root@netme ~]# apachectl configtest
Syntax OK
[root@netme ~]# systemctl restart httpdשלב 3: הוספת SAN לקובץ openssl.cnf
דפדפנים מודרניים כבר לא מסתכלים על שדה ה-Common Name בלבד. אם התעודה לא מכילה Subject Alternative Name — הדפדפן יפסול אותה, גם אם השם נכון. לכן נערוך את /etc/pki/tls/openssl.cnf ונוסיף את רשימת השמות:

[ alternate_names ]
DNS.1 = netme.local
DNS.2 = www.netme.local
DNS.3 = mail.netme.local
[ v3_ca ]
subjectAltName = @alternate_names
# Extension copying option: use with caution.
copy_extensions = copyשלב 4: יצירת התעודה עם OpenSSL
[root@netme ~]# openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/pki/tls/private/netme.key \
-out /etc/pki/tls/certs/netme.crt
[root@netme ~]# chmod 600 /etc/pki/tls/private/netme.key
[root@netme ~]# openssl x509 -in /etc/pki/tls/certs/netme.crt -noout -text | grep -A1 'Subject Alternative Name'- ▸-x509 — מייצר תעודה חתומה-עצמית ולא רק בקשת CSR
- ▸-nodes — ללא Passphrase, כדי ש-Apache יוכל לעלות אוטומטית אחרי ריבוט
- ▸-days 365 — תוקף שנה; בסביבה אמיתית מנהלים תזכורת חידוש מראש
- ▸rsa:2048 — אורך מפתח מינימלי מקובל; ל-Production מודרני נפוץ גם ECDSA
שלב 5: חיבור התעודה ל-Apache על פורט 443
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/pki/tls/certs/netme.crt
SSLCertificateKeyFile /etc/pki/tls/private/netme.key
SSLProtocol -all +TLSv1.2 +TLSv1.3
ServerName netme.local
ServerAdmin info@netme.local
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName netme.local
Redirect permanent / https://netme.local/
</VirtualHost>[root@netme ~]# firewall-cmd --permanent --add-service=https && firewall-cmd --reload
[root@netme ~]# apachectl configtest && systemctl restart httpd
[root@netme ~]# ss -tlnp | grep 443שלב 6: לגרום למחשב לסמוך על התעודה
כאן נופלים רוב הלומדים. התעודה תקינה, Apache עלה — והדפדפן עדיין צועק "אישור הבסיס של רשות האישורים אינו אמין". הסיבה פשוטה: התעודה חתומה עצמית, ואף מאגר Root לא מכיר אותה. מעבירים את קובץ ה-crt לתחנה (SCP/WinSCP), לוחצים עליו פעמיים ובוחרים התקנת אישור:

בשרתי Linux אחרים שצריכים לסמוך על אותה תעודה, התהליך המקביל הוא העתקת ה-crt אל /etc/pki/ca-trust/source/anchors/ והרצת update-ca-trust extract. זה בדיוק סוג הידע שמבדיל בין מי ש"ראה לינוקס" למי שמנהל תשתית.
שלב 7: אימות — המנעול הירוק

[root@netme ~]# openssl s_client -connect netme.local:443 -servername netme.local </dev/null 2>/dev/null | openssl x509 -noout -dates -subject
notBefore=Aug 19 09:12:00 2026 GMT
notAfter=Aug 19 09:12:00 2027 GMT
subject=CN = netme.localWordPress? עוד שלב אחד
אם על השרת רץ WordPress, הפעלת HTTPS לבדה תשבור לכם חצי מהאתר: התמונות וה-CSS ימשיכו להיטען ב-HTTP וייחסמו כ-Mixed Content. נכנסים ללוח הבקרה ב-/wp-admin, עוברים להגדרות ומעדכנים גם את WordPress Address וגם את Site Address לכתובת עם https. רק אז המנעול יופיע נקי בכל עמוד.
5 טעויות שחוזרות אצל כל מי שמתחיל
- ▸שכחו את copy_extensions = copy — התעודה נוצרת בלי SAN והדפדפן פוסל אותה
- ▸הרשאות פתוחות מדי על ה-Private Key — כל משתמש בשרת יכול להעתיק אותו (חובה 600 ובעלות root)
- ▸לא נפתח פורט 443 בפיירוול — האתר נראה "לא זמין" למרות ש-Apache רץ תקין
- ▸אין הפניה מ-80 ל-443 — הגולשים ממשיכים לעבוד בטקסט גלוי
- ▸אין תזכורת לחידוש התעודה — האתר נופל בפתאומיות ביום שהתוקף נגמר
מבחנון Linux — בדקו את עצמכם לפני שנכנסים לקורס
1. איזה קובץ חייב להישאר על השרת בלבד ולעולם לא להישלח ללקוח?
2. התעודה נוצרה, אך הדפדפן פוסל אותה עם שגיאת שם. מה הסיבה הנפוצה ביותר?
3. מה תפקידה של השורה SSLCertificateKeyFile בקובץ ה-Virtual Host?
4. באיזו פקודה תבדקו תוקף ופרטי תעודה משרת מרוחק, בלי דפדפן?
5. מדוע מוסיפים תעודה Self-Signed ל-Trusted Root Certification Authorities?
השלב הזה — שרת Linux שמגיש HTTPS תקין — הוא אחד הדברים הראשונים שיבקשו מכם בתפקיד סיסטם או תשתיות. בקורס Linux של נטמי תעשו את זה עשרות פעמים, על שרתים אמיתיים, עד שזה יהיה שגרה: התקנת שירותים, ניהול הרשאות, Troubleshooting, אבטחת שרת ואוטומציה ב-Bash. זה בדיוק החומר שבזכותו בוגרים שלנו עוברים ראיונות טכניים ומגיעים ליום הראשון בעבודה מוכנים.
- #לינוקס
- #קורס_לינוקס
- #קורס_לינוקס_בעברית
- #Linux
- #Linux_Administration
- #Apache
- #OpenSSL
- #SSL
- #TLS
- #HTTPS
- #תעודת_אבטחה
- #Self_Signed_Certificate
- #Virtual_Host
- #ניהול_שרתים
- #DevOps
- #מכללת_נטמי
רוצים להתמקצע?
הפוסט הזה הוא רק טעימה. הקורס המלא של Linux Administration ילמד אתכם הכל מא׳ עד ת׳.


