
כמעט כל אתר שאתה מבקר בו היום מוגן על ידי HTTPS. אם שלך עדיין לא, זה אמור להיות. אבטחת השרת שלך באמצעות HTTPS פירושה גם שאתה לא יכול לשלוח בקשות לשרת זה ממי שאינו מוגן על ידי HTTPS. זה מהווה בעיה עבור מפתחים המשתמשים בסביבת פיתוח מקומית מכיוון שכולם פועלים //localhost
מחוץ לקופסה.
בהתחלה שאני חלק ממנה, החלטנו לאבטח את נקודות הקצה שלנו ב- AWS Elastic Load Balancer באמצעות HTTPS כחלק ממהלך לשיפור האבטחה. נקלעתי למצב בו בקשות סביבת הפיתוח המקומית שלי לשרת החלו להידחות.
חיפוש מהיר בגוגל מאוחר יותר, מצאתי כמה מאמרים כאלה, זה או זה עם הוראות מפורטות כיצד אוכל ליישם HTTPS localhost
. נראה כי אף אחת מההוראות הללו לא עבדה גם אחרי שעקבתי אחריהן באופן דתי. כרום תמיד השליך עלי NET::ERR_CERT_COMMON_NAME_INVALID
שגיאה.

הבעיה
כל ההוראות המפורטות שמצאתי היו נכונות למועד כתיבתן. לא עוד.
לאחר המון גוגל, גיליתי שהסיבה לדחיית האישור המקומי שלי הייתה ש- Chrome ביטל את התמיכה בהתאמת commonName בתעודות, למעשה, ודורש נושא AltName מאז ינואר 2017.
הפתרון
נשתמש ב- OpenSSL כדי ליצור את כל האישורים שלנו.
שלב 1: אישור SSL שורש
הצעד הראשון הוא ליצור תעודת SSL (Root Secure Sockets Layer). לאחר מכן ניתן להשתמש בתעודת שורש זו כדי לחתום על מספר כלשהו של אישורים שאתה עשוי לייצר עבור דומיינים בודדים. אם אינך מכיר את המערכת האקולוגית SSL, מאמר זה מ- DNSimple עושה עבודה טובה בהצגת אישורי SSL שורש.
צור מפתח RSA-2048 ושמור אותו בקובץ rootCA.key
. קובץ זה ישמש כמפתח ליצירת אישור SSL Root. תתבקש להזין משפט סיסמה שתצטרך להזין בכל פעם שאתה משתמש במפתח מסוים זה כדי ליצור אישור.
openssl genrsa -des3 -out rootCA.key 2048
אתה יכול להשתמש במפתח שיצרת כדי ליצור אישור SSL חדש של שורש. שמור אותו בקובץ בשם rootCA.pem
. תוקף לאישור זה הוא 1,024 ימים. אתם מוזמנים לשנות אותו למספר ימים שרק תרצו. תתבקש גם לקבל מידע אופציונלי אחר.
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

שלב 2: אמון על אישור ה- SSL הבסיסי
לפני שתוכל להשתמש באישור ה- Root SSL החדש שנוצר כדי להתחיל להנפיק אישורי תחום, יש עוד צעד אחד. עליך להורות ל- Mac שלך לסמוך על אישור הבסיס שלך, כך שכל האישורים האישיים שהונפקו על ידיו אמונים גם כן.
פתח את Access Keychain ב- Mac שלך ועבור לקטגוריית אישורים במחזיק המפתחות של המערכת. לאחר ההגעה, ייבא את rootCA.pem
הקובץ באמצעות קובץ> ייבוא פריטים. לחץ פעמיים על האישור המיובא ושנה את התפריט הנפתח "בעת שימוש באישור זה:" לתמיד תמיד במקטע אמון.
האישור שלך אמור להיראות כך בתוך Access Keychain אם פעלת נכון אחר ההוראות.

שלב 2: אישור SSL תחום
כעת ניתן להשתמש בתעודת SSL הבסיס להנפקת אישור במיוחד עבור סביבת הפיתוח המקומית שלך הנמצאת ב localhost
.
צור קובץ תצורה חדש של OpenSSL server.csr.cnf
כדי שתוכל לייבא הגדרות אלה בעת יצירת אישור במקום להזין אותן בשורת הפקודה.
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C=US ST=RandomState L=RandomCity O=RandomOrganization OU=RandomOrganizationUnit [email protected] CN = localhost
צור v3.ext
קובץ על מנת ליצור אישור X509 v3. שימו לב איך אנחנו מפרטים subjectAltName
כאן.
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = localhost
צור מפתח אישור localhost
לשימוש בהגדרות התצורה השמורות ב- server.csr.cnf
. מפתח זה מאוחסן ב server.key
.
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )
בקשה לחתימת אישורים מונפקת באמצעות אישור ה- SSL הבסיסי שיצרנו קודם כדי ליצור אישור תחום עבורו localhost
. הפלט הוא קובץ אישורים שנקרא server.crt
.
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

השתמש בתעודת SSL החדשה שלך
כעת אתה מוכן לאבטח את זה localhost
באמצעות HTTPS. הזז את server.key
ואת server.crt
הקבצים במיקום נגיש בשרת שלך ולכלול אותם כאשר החל לשרת שלך.
באפליקציית אקספרס שנכתבה ב- Node.js, כך תעשה זאת. הקפד לעשות זאת רק עבור הסביבה המקומית שלך. אל תשתמש בזה בייצור .

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