קבל רשימת אישורים מהימנים ב- Java

ג'אווה טופ

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

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

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

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

2. טוען את KeyStore

Java שומרת את האישורים המהימנים בקובץ מיוחד בשם cacerts שמתגורר בתוך תיקיית ההתקנה של Java.

נתחיל בקריאת קובץ זה ונטען אותו אל ה- KeyStore:

פרטי KeyStore loadKeyStore () {String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator); שם קובץ מחרוזת = System.getProperty ("java.home") + relativeCacertsPath; FileInputStream הוא = FileInputStream חדש (שם קובץ); KeyStore keystore = KeyStore.getInstance (KeyStore.getDefaultType ()); סיסמת מחרוזת = "changeit"; keystore.load (is, password.toCharArray ()); חנות מפתחות; }

סיסמת ברירת המחדל לכך KeyStore הוא "שנה את זה", אבל זה יכול להיות שונה אם זה היה שונה בעבר במערכת שלנו.

לאחר הטעינה, ה- KeyStore יחזיק בתעודות המהימנות שלנו, ואז הבא נראה כיצד לקרוא אותם.

3. קריאת אישורים ממפרט KeyStore

אנחנו הולכים להשתמש ב- PKIX פרמטרים כיתה, שלוקחת א KeyStore כפרמטר קונסטרוקטור:

@ מבחן ציבורי בטל כאשר LoadCacertsKeyStore_thenCertificatesArePresent () {KeyStore keyStore = loadKeyStore (); PKIXParameters params = PKIXParameters חדשים (keyStore); הגדר trustAnchors = params.getTrustAnchors (); רשימת אישורים = trustAnchors.stream () .map (TrustAnchor :: getTrustedCert) .collect (Collectors.toList ()); assertFalse (אישורים.isEmpty ()); }

ה PKIX פרמטרים class משמש בדרך כלל לאימות תעודה, אך בדוגמה שלנו פשוט השתמשנו בה כדי לגבות את האישורים שלנו KeyStore.

בעת יצירת מופע של PKIXParametrs, זה בונה רשימה של TrustAnchor אשר יכילו את האישורים המהימנים הקיימים ב- KeyStore.

א TrustAnchor מופע פשוט מייצג אישור מהימן.

4. קריאת אישורים כברירת מחדל KeyStore

אנו יכולים גם לקבל רשימה של האישורים המהימנים הקיימים במערכת שלנו על ידי משתמש ב TrustManagerFactory בכיתה ואותחל אותה ללא KeyStore, אשר ישתמש בברירת המחדל KeyStore.

אם לא נספק א KeyStore במפורש, אותו אחד מהפרק הקודם ישמש כברירת מחדל:

@ מבחן ציבורי בטל כאשרLoadingDefaultKeyStore_thenCertificatesArePresent () {TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance (TrustManagerFactory.getDefaultAlgorithm ()); trustManagerFactory.init ((KeyStore) null); רשימה trustManagers = Arrays.asList (trustManagerFactory.getTrustManagers ()); רשימת אישורים = trustManagers.stream () .filter (X509TrustManager.class :: isInstance) .map (X509TrustManager.class :: cast) .map (trustManager -> Arrays.asList (trustManager.getAcceptedIssuers ())) .flatMap (אוסף: : stream) .collect (Collectors.toList ()); assertFalse (אישורים.isEmpty ()); }

בדוגמה שלעיל השתמשנו X509TrustManager, שהוא מומחה TrustManager משמש לאימות החלק המרוחק של חיבור SSL.

שים לב שהתנהגות זו עשויה להיות תלויה ביישום JDK הספציפי, מכיוון שהמפרט אינו מגדיר מה צריך לקרות במקרה ש- init ()KeyStore הפרמטר הוא ריק.

5. כינויים לתעודה

כינוי תעודה הוא פשוט א חוּט שמזהה תעודה באופן ייחודי.

בין אישורי ברירת המחדל המיובאים על ידי ג'אווה, יש גם אישור ידוע שהונפק על ידי GoDaddy, רשם דומיין אינטרנט ציבורי, בו נשתמש בבדיקות שלנו:

מחרוזת GODADDY_CA_ALIAS = "godaddyrootg2ca [jdk]";

בואו נראה כיצד אנו יכולים לקרוא את כל כינויי האישור הקיימים ב- KeyStore:

@ מבחן ציבורי בטל כאשר LoadKeyStore_thenGoDaddyCALabelIsPresent () {KeyStore keyStore = loadKeyStore (); Enumeration aliasEnumeration = keyStore.aliases (); רשימת כינויים = Collections.list (aliasEnumeration); assertTrue (aliases.contains (GODADDY_CA_ALIAS)); }

בדוגמה הבאה נראה כיצד נוכל לאחזר אישור לפי הכינוי שלה:

@ מבחן ציבורי בטל כאשר LoadingKeyStore_thenGoDaddyCertificateIsPresent () {KeyStore keyStore = loadKeyStore (); תעודה goDaddyCertificate = keyStore.getCertificate (GODADDY_CA_ALIAS); assertNotNull (goDaddyCertificate); }

6. מסקנה

במאמר מהיר זה בדקנו דרכים שונות לרישום אישורים מהימנים ב- Java באמצעות דוגמאות מהירות ומעשיות.

כמו תמיד, ניתן למצוא קטעי קוד ב- GitHub.

תחתית Java

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

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

$config[zx-auto] not found$config[zx-overlay] not found