ההבדל בין Java Keystore ו- Truststore

ג'אווה טופ

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

1. סקירה כללית

במאמר מהיר זה, נספק סקירה כללית על ההבדלים בין חנות מפתח ל- Java לחנות אמון ב- Java.

2. מושגים

ברוב המקרים, אנו משתמשים בחנות מפתחות ובחנות אמון כאשר היישום שלנו צריך לתקשר באמצעות SSL / TLS.

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

מאז Java 9, לעומת זאת, פורמט ברירת המחדל של מאגר המפתחות הוא PKCS12. ההבדל הגדול ביותר בין JKS ל- PKCS12 הוא ש- JKS הוא פורמט ספציפי ל- Java, בעוד PKCS12 הוא דרך סטנדרטית וניטרלית לשפה לאחסון מפתחות ואישורים פרטיים מוצפנים.

3. Java KeyStore

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

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

בְּדֶרֶך כְּלַל, נשתמש בחנות מפתחות כשאנחנו שרתים ורוצים להשתמש ב- HTTPS. במהלך לחיצת יד SSL, השרת מחפש את המפתח הפרטי מחנות המפתחות ומציג את המפתח הציבורי והתעודה המתאים ללקוח.

בהתאמה, אם הלקוח צריך גם לאמת את עצמו - מצב שנקרא אימות הדדי - אז יש ללקוח גם חנות מפתחות וגם מציג את המפתח והתעודה הציבורית שלו.

אין חנות מפתחות ברירת מחדל, אז אם אנחנו רוצים להשתמש בערוץ מוצפן, נצטרך להגדיר javax.net.ssl.keyStore ו javax.net.ssl.keyStorePassword. אם פורמט המפתח שלנו הוא שונה מברירת המחדל, נוכל להשתמש בו javax.net.ssl.keyStoreType כדי להתאים אישית את זה.

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

אנו יכולים גם לקיים אינטראקציה עם חנות המפתחות באופן פרוגרמטי.

4. Java TrustStore

חנות אמון היא ההפך - בעוד שחנות מפתחות בדרך כלל מחזיקה בתעודות המזהות אותנו, חנות אמון מחזיקה בתעודות המזהות אחרים.

בג'אווה אנו משתמשים בה כדי לסמוך על הצד השלישי שאיתו אנו עומדים לתקשר.

קח את הדוגמה הקודמת שלנו. אם לקוח מדבר עם שרת מבוסס Java באמצעות HTTPS, השרת יחפש את המפתח המשויך מחנות המפתחות שלו ויציג ללקוח את המפתח והתעודה הציבורית.

אנו הלקוחות מחפשים את האישור המשויך בחנות הנאמנות שלנו. אם האישור או רשויות האישור המוצגות על ידי השרת החיצוני אינם נמצאים בחנות הנאמנות שלנו, נקבל SSLHandshakeException והחיבור לא יוגדר בהצלחה.

Java צירפה חנות אמון שנקראה cacerts והוא שוכן ב $ JAVA_HOME / jre / lib / אבטחה מַדרִיך.

הוא מכיל רשויות אישורים המהימנות כברירת מחדל:

$ keytool -list-cacerts חנות מפתחות הזן סיסמת חנות מפתחות: סוג מפתחות: JKS ספק מפתחות חנות: SUN חנות המפתח שלך מכילה 92 רשומות verisignclass2g2ca [jdk], 2018-06-13, trustCertEntry, טביעת אצבע תעודה (SHA1): B3: EA: C4: 47 : 76: C9: C8: 1C: EA: F2: 9D: 95: B6: CC: A0: 08: 1B: 67: EC: 9D

אנו רואים כאן שחנות הנאמנות מכילה 92 רשומות אישורים מהימנות ואחת הערכים היא ה- verisignclass2gca כְּנִיסָה. פירוש הדבר ש- JVM יסמוך אוטומטית על אישורים עליהם חתומה verisignclass2g2ca.

פה, אנו יכולים לעקוף את מיקום חנות הנאמנות המוגדרת כברירת מחדל באמצעות javax.net.ssl.trustStore תכונה. באופן דומה, אנו יכולים להגדיר javax.net.ssl.trustStorePassword ו javax.net.ssl.trustStoreType כדי לציין את הסיסמה ואת סוג הסיסמה.

5. מסקנה

במדריך זה דנו בהבדלים העיקריים בין חנות המקשים של ג'אווה לחנות הנאמנות של ג'אווה ומטרתה.

כמו כן, הראינו כיצד ניתן לבטל את ברירות המחדל עם מאפייני המערכת.

לאחר מכן נוכל להסתכל במדריך ה- SSL הבא או במדריך העזר של JSSE כדי ללמוד פרטים נוספים על תקשורת מוצפנת ב- Java.

תחתית Java

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס