הקדמה
OpenSSL הוא כלי שורת פקודה גמיש שיכול לשמש למגוון רחב של משימות הקשורות לתשתיות מפתח ציבורי (PKI) ו-HTTPS (HTTP מעל TLS). מדריך סגנון גליון זה מספק מדריך מהיר לפקודות OpenSSL שמועילות בתרחישים נפוצים ויומיומיים. זה כולל דוגמאות OpenSSL ליצירת מפתחות פרטיים, בקשות לחתימת תעודות והמרת פורמט תעודות. הוא אינו מכסה את כל השימושים של OpenSSL.
איך להשתמש במדריך זה:
- אם אינך מוכר עם בקשות לחתימת תעודות (CSRs), קרא את הקטע הראשון
- במשקל לקטע הראשון, מדריך זה בפורמט של גליון רמזים: רשימה של קטעי שורת פקודה עצמאיים
- קפוץ אל כל קטע הרלוונטי למשימה שאתה מנסה להשלים (רמז: השתמש בתפריט תוכן או בפונקצית חפש של הדפדפן שלך)
- רוב הפקודות הן בעלות שורה אחת שהורחבו למספר שורות (על ידי הסמל
\
) למען הבהירות
אודות בקשות לחתימת תעודות (CSRs)
אם ברצונך לקבל תעודת SSL מרשיון מסחרי (CA), עליך ליצור בקשת חתימת תעודה (CSR). CSR מורכב בעיקר מהמפתח הציבורי של זוג המפתחות, ומידע נוסף. שני הרכיבים הללו מוכנסים לתעודה כאשר היא מוחתמת.
בכל פעם שתייצרו CSR, תתבקשו לספק מידע אודות התעודה. מידע זה ידוע כשם דומיננטי (DN). שדה חשוב ב-DN הוא השם המשותף (CN), שצריך להיות השם המלא של הדומיין (FQDN) של המארח שבו ברצונך להשתמש בתעודה. ניתן גם לדלג על העזרה האינטראקטיבית ביצירת CSR על ידי מעבר למידע דרך שורת הפקודה או מקובץ.
הפריטים האחרים ב-DN מספקים מידע נוסף אודות העסק או הארגון שלך. אם אתה רוכש תעודת SSL מרשיון, נדרש תמיד ששדות הנוספים אלו, כגון "ארגון", ישקפו את פרטי הארגון שלך בדיוק.
הנה דוגמה למה תראה פניה למידע על CSR:
---
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company
Organizational Unit Name (eg, section) []:Technology Division
Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com
Email Address []:
אם ברצונך לענות באופן לא אינטראקטיבי על פניית המידע של CSR, תוכל לעשות זאת על ידי הוספת האפשרות -subj
לכל הפקודות של OpenSSL שדורשות מידע על CSR. הנה דוגמה לשימוש באפשרות, באותו המידע שמוצג בבלוק הקוד למעלה:
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
עכשיו שהבנת את ה-CSR, אתה יכול לעבור לאיזור התכניות של OpenSSL שמתאים לך.
יצירת CSR
הקטע הזה מכסה פקודות OpenSSL שקשורות ליצירת CSR (ומפתחות פרטיים, אם הם עדיין לא קיימים). CSR יכולים לשמש לבקשת תעודות SSL מרשות תעודות.
שימו לב שניתן להוסיף את מידע ה-CSR לא אינטראקטיבית עם האפשרות -subj
, כפי שנאמר בקטע הקודם.
יצירת מפתח פרטי ו-CSR
השתמשו בשיטה זו אם ברצונכם להשתמש ב-HTTPS (HTTP על TLS) כדי לאבטח את שרת האינטרנט שלכם ב-Apache HTTP או Nginx, וברצונכם להשתמש ברשות תעודות (CA) כדי להניב את תעודת ה-SSL. ה-CSR שיווצר יכול להישלח ל-CA כדי לבקש את הנפקת תעודת SSL מכוונת ל-CA. אם ה-CA שלכם תומך ב-SHA-2, הוסיפו את האפשרות -sha256
כדי לחתום על ה-CSR ב-SHA-2.
הפקודה הזו יוצרת מפתח פרטי בגודל 2048 ביט (domain.key
) ו-CSR (domain.csr
) מאפס:
ענו על הוראות ה-CSR כדי להשלים את התהליך.
האפשרות -newkey rsa:2048
מציינת כי המפתח צריך להיות בגודל של 2048 ביט, הנוצר באמצעות אלגוריתם RSA. האפשרות -nodes
מציינת כי המפתח הפרטי לא צריך להיות מוצפן עם מילת מפתח. האפשרות -new
, שלא כלולה פה אך משועממת, מציינת שמספר בקשת תעודה (CSR) מיוצר.
יצירת בקשת תעודה ממפתח פרטי קיים
השתמש בשיטה זו אם כבר יש לך מפתח פרטי שברצונך להשתמש בו כדי לבקש תעודה מרשם אישורי הזהות (CA).
פקודה זו יוצרת בקשת תעודה חדשה (domain.csr
) בהתבסס על מפתח פרטי קיים (domain.key
):
ענה על השאלות הנוגעות למידע של בקשת התעודה כדי להשלים את התהליך.
האפשרות -key
מציינת מפתח פרטי קיים (domain.key
) שישמש ליצירת בקשת תעודה חדשה. האפשרות -new
מציינת שמספר בקשת תעודה (CSR) מיוצר.
יצירת בקשת תעודה מתעודה וממפתח פרטי קיים
השתמש בשיטה זו אם ברצונך לחדש תעודת זהות קיימת אך אין לך או לספק ה-C.A שלך את ה-CSR המקורי מסיבה מסוימת. בגדר יסוד, היא מצילה לך את ההתקלקלות בהזנת מידע ה-CSR מחדש, שכן היא מחלצת את המידע מתוך התעודה הקיימת.
הפקת תעודת CSR חדשה (domain.csr
) מתוך תעודה קיימת (domain.crt
) ומפתח פרטי (domain.key
):
האפשרות -x509toreq
מציינת שאתה משתמש בתעודת X509 כדי ליצור CSR.
יצירת תעודות SSL
אם ברצונך להשתמש בתעודת SSL כדי לאבטח שירות אך אינך זקוק לתעודה מקורה מ-C.A, פתרון תקף (וחינמי) הוא לחתום על התעודות שלך.
A common type of certificate that you can issue yourself is a self-signed certificate. A self-signed certificate is a certificate that is signed with its own private key. Self-signed certificates can be used to encrypt data just as well as CA-signed certificates, but your users will be displayed a warning that says that the certificate is not trusted by their computer or browser. Therefore, self-signed certificates should only be used if you do not need to prove your service’s identity to its users (e.g. non-production or non-public servers).
מקטע זה מטפח פקודות OpenSSL הקשורות ליצירת תעודות שחתומות עצמן.
יצירת תעודה שחתומה עצמית
השתמש בשיטה זו אם ברצונך להשתמש ב-HTTPS (HTTP על TLS) כדי לאבטח את שרת האינטרנט שלך ב-Apache HTTP או ב-Nginx, ואינך זקוק לתעודה שחתומה על ידי C.A.
הפקודה הזו יוצרת מפתח פרטי בגודל של 2048 ביט (domain.key
) ותעודת עצמית (domain.crt
) מאפס:
ענה על שאלות המידע הקשורות לCSR כדי להשלים את התהליך.
האפשרות -x509
מורה ל־req
ליצור תעודת עצמית. האפשרות -days 365
צורפה כדי לציין שהתעודה תהיה תקפה למשך 365 ימים. CSR זמנית נוצרת כדי לאגד את המידע הנדרש לתעודה.
יצירת תעודת עצמית ממפתח פרטי קיים
השתמש בשיטה זו אם כבר יש לך מפתח פרטי שברצונך ליצור תעודת עצמית איתו.
הפקודה הזו יוצרת תעודת עצמית (domain.crt
) ממפתח פרטי קיים (domain.key
):
ענה על שאלות המידע הקשורות לCSR כדי להשלים את התהליך.
האפשרות -x509
מורה ל־req
ליצור תעודת עצמית. האפשרות -days 365
צורפה כדי לציין שהתעודה תהיה תקפה למשך 365 ימים. האפשרות -new
מאפשרת את שאלות המידע הקשורות לCSR.
צור תעודה עצמית ממפתח פרטי ובקשת CSR קיימים
השתמש בשיטה זו אם כבר יש לך מפתח פרטי ובקשת CSR, וברצונך ליצור תעודה עצמית עמם.
הפקת תעודה עצמית זו (domain.crt
) ממפתח פרטי קיים (domain.key
) ו (domain.csr
):
האפשרות -days 365
מציינת כי התעודה תהיה תקפה למשך 365 יום.
צפייה בתעודות
קבצי התעודות וה-CSR מוצפנים בפורמט PEM, שאינו קריא לאדם ממש.
הקטע הזה מכסה פקודות OpenSSL שתדפיס את הערכים האמיתיים של קבצי PEM שהוצפנו.
צפייה בערכים של CSR
פקודה זו מאפשרת לך לצפות ולוודא את תוכן בקשת ה-CSR (domain.csr
) בטקסט פשוט:
הצג רשומות תעודות
פקודה זו מאפשרת לך להציג את תוכן התעודה (domain.crt
) בטקסט פשוט:
וודא שתעודה נחתמה על ידי CA
השתמש בפקודה זו כדי לוודא כי תעודה (domain.crt
) נחתמה על ידי תעודת CA מסוימת (ca.crt
):
מפתחות פרטיים
סעיף זה מכסה פקודות OpenSSL שמיועדות ליצירה ואימות של מפתחות פרטיים.
צור מפתח פרטי
השתמש בפקודה זו כדי ליצור מפתח פרטי בגודל 2048 ביט, מוגן בסיסמה (domain.key
):
הזן סיסמה כאשר תתבקש להשלים את התהליך.
אימות מפתח פרטי
השתמש בפקודה זו כדי לבדוק שמפתח פרטי (domain.key
) הוא מפתח תקף:
אם המפתח הפרטי שלך מוצפן, יתבקש ממך להזין את סיסמת הפענוח שלו. לאחר הצלחה, המפתח שאינו מוצפן ייעבר לפלט בטרמינל.
אימות כי מפתח פרטי תואם לתעודה ולבקשת חתימה
השתמש בפקודות אלו כדי לאמת אם מפתח פרטי (domain.key
) תואם לתעודה (domain.crt
) ולבקשת חתימה (domain.csr
):
אם פלט כל אחת מהפקודות זהה, קיימת סיכויות גבוהות ביותר שהמפתח הפרטי, התעודה, והבקשת חתימה קשורים.
הצפנת מפתח פרטי
פקודה זו מקבלת מפתח פרטי שאינו מוצפן (unencrypted.key
) ומפלטת גרסה מוצפנת שלו (encrypted.key
):
הזן את סיסמת הפענוח הרצויה שלך, כדי להצפין את המפתח הפרטי.
פענח מפתח פרטי
זה מקבל מפתח פרטי מוצפן (encrypted.key
) ומייצא גרסה מפוענחת שלו (decrypted.key
):
הזן את סיסמת המפתח המוצפן כאשר מתבקש.
המרת פורמטי תעודות
כל התעודות שבהן עבדנו היו תעודות X.509 המוצפנות בפורמט ASCII PEM. ישנם מגוון של פורמטים נוספים לקידוד ואריזת תעודות; יישומים מסוימים מעדיפים פורמטים מסוימים על פני אחרים. בנוסף, רוב הפורמטים הללו יכולים להכיל פריטים מרובים, כגון מפתח פרטי, תעודה, ותעודת CA, בקובץ יחיד.
OpenSSL יכול לשמש להמרת תעודות מפורמט אחד לאחר ולהפך, ויש לו תמיכה במגוון רחב של פורמטים אלה. סעיף זה יכסה חלק מההמרות האפשריות.
המרת PEM ל- DER
השתמש בפקודה זו אם ברצונך להמיר תעודה בפורמט PEM (domain.crt
) לתעודה בפורמט DER (domain.der
), המפוקד בינארי:
פורמט DER בדרך כלל משמש עם Java.
המרת DER ל- PEM
השתמש בפקודה זו אם ברצונך להמיר תעודת מפתח בפורמט DER (domain.der
) לתעודת מפתח בפורמט PEM (domain.crt
):
המרת PEM ל- PKCS7
השתמש בפקודה זו אם ברצונך להוסיף תעודות PEM (domain.crt
ו־ca-chain.crt
) לקובץ PKCS7 (domain.p7b
):
שים לב שאפשר להשתמש באפשרות -certfile
אחת או יותר כדי לציין אילו תעודות להוסיף לקובץ PKCS7.
קבצי PKCS7, נכונים גם כ־P7B, משמשים בדרך כלל באחסון מפתחות של Java וב-Microsoft IIS (Windows). זהם קבצי ASCII שיכולים לכלול תעודות ותעודות CA.
המרת PKCS7 ל- PEM
השתמש בפקודה זו אם ברצונך להמיר קובץ PKCS7 (domain.p7b
) לקובץ PEM:
שים לב שאם יש לך קובץ PKCS7 עם מספר פריטים בתוכו (לדוגמה, תעודת אישור ותעודת CA אינטרמדיאטית), הקובץ PEM שינוף יכיל את כל הפריטים בו.
המרת PEM ל-PKCS12
השתמש בפקודה זו אם ברצונך לקחת מפתח פרטי (domain.key
) ותעודה (domain.crt
), ולשלב אותם לתוך קובץ PKCS12 (domain.pfx
):
תתבקש להזין סיסמת ייצוא, שאפשר להשאיר ריקה. שים לב שתוכל להוסיף שרשרת של תעודות לקובץ PKCS12 על ידי חיבור התעודות יחד בקובץ PEM יחיד (domain.crt
) במקרה זה.
קבצי PKCS12, שנכונים גם כקבצי PFX, בדרך כלל משמשים לייבוא וייצוא שרשרות תעודות ב-Microsoft IIS (Windows).
המרת PKCS12 ל-PEM
השתמש בפקודה זו אם ברצונך להמיר קובץ PKCS12 (domain.pfx
) ולהמיר אותו לפורמט PEM (domain.combined.crt
):
openssl pkcs12 \
-in domain.pfx \
-nodes -out domain.combined.crt
שים לב שאם יש לך קובץ PKCS12 עם מספר פריטים בתוכו (לדוגמה, תעודה ומפתח פרטי), הקובץ PEM שינוף יכיל את כל הפריטים בו.
גרסת OpenSSL
הפקודה openssl version
ניתן להשתמש בה כדי לבדוק איזו גרסה אתה מפעיל. הגרסה של OpenSSL שאתה מפעיל, והאפשרויות שהוא נקלט איתן, משפיעות על היכולות (ולפעמים גם על האפשרויות בקו הפקודה) שזמינות לך.
הפקודה הבאה מציגה את גרסת OpenSSL שאתה מפעיל, ואת כל האפשרויות שהוא נקלט איתן:
openssl version -a
מדריך זה נכתב באמצעות תוכנית OpenSSL עם הפרטים הבאים (הפלט של הפקודה הקודמת):
OpenSSL 1.1.1 11 Sep 2018
built on: Mon Aug 23 17:02:39 2021 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-Flav1L/openssl-1.1.1=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
מסקנה
זה צריך לכסות איך רוב האנשים משתמשים ב- OpenSSL כדי לעבוד עם אישורי SSL. יש לו הרבה שימושים אחרים שלא נכללו כאן, אז תרגישו חופשי לשאול או להציע שימושים אחרים בתגובות.
אם יש לך בעיות עם אחת מהפקודות, הקפד להעיר (ולכלול את פלט גרסת OpenSSL שלך).