כיצד לגרום ל- HTTPS לעבוד על סביבת הפיתוח המקומית שלך תוך 5 דקות

כמעט כל אתר שאתה מבקר בו היום מוגן על ידי 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.

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