Linux

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

11 דק׳ קריאהמכללת נטמי
יצירת תעודת 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:

NetMe College — Terminal
[root@netme ~]# sudo yum install -y mod_ssl openssl
[root@netme ~]# systemctl enable --now httpd
[root@netme ~]# httpd -M | grep ssl
 ssl_module (shared)
בדיקת httpd -M היא הדרך המהירה לוודא שהמודול באמת נטען, ולא רק הותקן.

שלב 2: הגדרת Virtual Host לאתר

אם השרת עדיין לא רשום ב-DNS, נכוון אליו ידנית. בתחנת הווינדוס עורכים את C:\Windows\System32\drivers\etc\hosts, ובשרת עצמו את /etc/hosts:

NetMe College — /etc/hosts
192.168.1.115  netme.local  www.netme.local

עכשיו נגרום ל-Apache לטעון תיקיית קונפיגורציות נפרדת לכל אתר — המבנה המקובל בסביבות Production, שמונע קובץ httpd.conf ענק ובלתי ניתן לתחזוקה:

NetMe College — Terminal
[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
NetMe College — netme.local.conf
<VirtualHost *:80>
    ServerName  www.netme.local
    ServerAlias netme.local
    DocumentRoot /var/www/html/
</VirtualHost>
NetMe College — Terminal
[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
apachectl configtest לפני כל restart — זו ההרגלה שמפרידה בין סיסטם שמפיל אתר לסיסטם שלא.

שלב 3: הוספת SAN לקובץ openssl.cnf

דפדפנים מודרניים כבר לא מסתכלים על שדה ה-Common Name בלבד. אם התעודה לא מכילה Subject Alternative Name — הדפדפן יפסול אותה, גם אם השם נכון. לכן נערוך את /etc/pki/tls/openssl.cnf ונוסיף את רשימת השמות:

עריכת קובץ openssl.cnf והוספת סעיף alternate_names עם רשומות DNS
סעיף alternate_names — כאן מגדירים את כל השמות שהתעודה תהיה תקפה עבורם.
NetMe College — /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
אל תשכחו להסיר את ה-# מהשורה copy_extensions, אחרת ה-SAN לא ייכנס לתעודה.

שלב 4: יצירת התעודה עם OpenSSL

NetMe College — Terminal
[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'
בשדה Common Name מזינים את כתובת האתר בדיוק (netme.local). הפקודה האחרונה מאמתת שה-SAN אכן נכנס לתעודה.
  • ‎-x509‎ — מייצר תעודה חתומה-עצמית ולא רק בקשת CSR
  • ‎-nodes‎ — ללא Passphrase, כדי ש-Apache יוכל לעלות אוטומטית אחרי ריבוט
  • ‎-days 365‎ — תוקף שנה; בסביבה אמיתית מנהלים תזכורת חידוש מראש
  • ‎rsa:2048‎ — אורך מפתח מינימלי מקובל; ל-Production מודרני נפוץ גם ECDSA

שלב 5: חיבור התעודה ל-Apache על פורט 443

NetMe College — netme.local.conf
<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>
ההפניה מ-80 ל-443 היא לא קישוט: בלעדיה משתמשים ימשיכו להגיע לאתר בטקסט גלוי.
NetMe College — Terminal
[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), לוחצים עליו פעמיים ובוחרים התקנת אישור:

אשף ייבוא תעודה בווינדוס עם בחירת מאגר Trusted Root Certification Authorities
יש לבחור במפורש "Trusted Root Certification Authorities" — בחירה אוטומטית לא תפתור את השגיאה.

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

שלב 7: אימות — המנעול הירוק

דפדפן מציג מנעול ירוק וחיבור מאובטח לאתר עם פרטי התעודה
Connection is secure + Certificate is valid — סימן שהשרשרת שלמה והתעודה מזוהה נכון.
NetMe College — Terminal
[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.local
s_client היא הפקודה שבה משתמשים בשטח כדי לאבחן תעודות — בלי לפתוח דפדפן בכלל.

WordPress? עוד שלב אחד

אם על השרת רץ 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?

ענית על 0 מתוך 5

השלב הזה — שרת Linux שמגיש HTTPS תקין — הוא אחד הדברים הראשונים שיבקשו מכם בתפקיד סיסטם או תשתיות. בקורס Linux של נטמי תעשו את זה עשרות פעמים, על שרתים אמיתיים, עד שזה יהיה שגרה: התקנת שירותים, ניהול הרשאות, Troubleshooting, אבטחת שרת ואוטומציה ב-Bash. זה בדיוק החומר שבזכותו בוגרים שלנו עוברים ראיונות טכניים ומגיעים ליום הראשון בעבודה מוכנים.

תגיות ומילות מפתח
  • #לינוקס
  • #קורס_לינוקס
  • #קורס_לינוקס_בעברית
  • #Linux
  • #Linux_Administration
  • #Apache
  • #OpenSSL
  • #SSL
  • #TLS
  • #HTTPS
  • #תעודת_אבטחה
  • #Self_Signed_Certificate
  • #Virtual_Host
  • #ניהול_שרתים
  • #DevOps
  • #מכללת_נטמי

רוצים להתמקצע?

הפוסט הזה הוא רק טעימה. הקורס המלא של Linux Administration ילמד אתכם הכל מא׳ עד ת׳.