מבוא ל- SSL בג'אווה

ג'אווה טופ

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

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

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

במדריך זה נציג SSL ונחקור כיצד נוכל להשתמש בו ב- Java באמצעות JSSE (Java Secure Socket Extension) API.

2. מבוא

במילים פשוטות, ה שכבת שקע מאובטחת (SSL) מאפשר חיבור מאובטח בין שני צדדים, בדרך כלל לקוחות ושרתים.

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

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

SSL נחוץ כדי לתמוך בשלושת עקרונות אבטחת המידע העיקריים:

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

Java מספקת מספר ממשקי API מבוססי אבטחה המסייעים למפתחים ליצור קשרים מאובטחים עם הלקוח לקבל ולשלוח הודעות בפורמט מוצפן:

  • הרחבת שקע מאובטח Java (JSSE)
  • אדריכלות קריפטוגרפיה של Java (JCA)
  • סיומת קריפטוגרפית של Java (JCE)

בחלקים הבאים נציג את סיומת ה- Secure Socket שמשתמשת בג'אווה כדי לאפשר תקשורת מאובטחת.

3. ממשק API של JSSE

ממשקי ה- API לאבטחה של Java משתמשים ב- בית חרושת דפוס עיצוב בהרחבה.

למעשה, הכל מיוצר באמצעות מפעל ב- JSSE.

3.1. SSLSocketFactory

ה javax.net.ssl.SSLSocketFactory משמש ליצירה SSLSocket חפצים.

מחלקה זו מכילה שלוש קבוצות של ממשקי API.

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

הקבוצה השנייה מורכבת מחמש שיטות בהן ניתן להשתמש ליצירה SSLSocket מקרים:

  • Socket createSocket (מארח מחרוזת, יציאת int)
  • Socket createSocket (מחרוזת מארח, יציאת int, InetAddress clientHost, int clientPort)
  • Socket createSocket (מארח InetAddress, יציאת int)
  • Socket createSocket (InetAddress מארח, יציאת int, InetAddress clientHost, int clientPort)
  • Socket createSocket (שקע שקע, מארח מחרוזות, יציאת int, אוטומטי בוליאני)

אנו יכולים להשתמש בכיתה זו ישירות על ידי השגת מופע ברירת המחדל או על ידי שימוש ב- javax.net.ssl.אובייקט SSLContext המכיל שיטות להשיג SSLSocketFactory למשל.

3.2. SSLSocket

שיעור זה מרחיב את שֶׁקַע בכיתה ומספק שקע מאובטח. שקעים כאלה הם שקעי זרם רגילים.

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

SSLSocket מקרים בונים חיבור SSL למארח בעל שם ביציאה שצוינה.

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

3.3. SSLServerSocketFactory

ה SSLServerSocketFactory הכיתה די דומה ל SSLSocketFactory עם ההבדל שהוא יוצר SSLServerSocket מקרים במקום SSLSocket מקרים.

לפי דמיון, השיטות נקראות createServerSocket כמקביל ל SSLSocketFactory מעמד.

3.4. SSLServerSocket

ה SSLServerSocket הכיתה מקבילה ל- SSLSocket מעמד. השיטות במחלקה SSLServerSocket הן קבוצת משנה של ה- SSLSocket שיטות כיתה. הם פועלים בצד הנגדי של חיבור SSL

4. דוגמה SSL

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

מארח מחרוזות = getHost (...); יציאת מספר שלם = getPort (...); SSLSocketFactory sslsocketfactory = SSLSocketFactory.getDefault (); SSLSocket sslsocket = (SSLSocket) sslsocketfactory .createSocket (מארח, יציאה); InputStream in = sslsocket.getInputStream (); OutputStream out = sslsocket.getOutputStream (); out.write (1); בעוד (in.available ()> 0) {System.out.print (in.read ()); } System.out.println ("חיבור מאובטח שבוצע בהצלחה"); 

במקרה שנקבל את השגיאה "Javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: בניית נתיב PKIX נכשלה: sun.security.provider.certpath.SunCertPathBuilderException: לא הצליח למצוא נתיב הסמכה חוקי ליעד המבוקש בעת יצירת חיבור SSL", זה מצביע על כך שאין לנו את האישור הציבורי של השרת שאנו מנסים לחבר בחנות האמון של Java.

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

על מנת לסדר את הבעיה, יש לנו מספר אפשרויות:

  • הוסף את האישור הציבורי של השרת לברירת המחדל cacerts חנות אמון בשימוש על ידי Java. תוך כדי התחלת חיבור SSL
  • הגדר את javax.net.ssl.trustStore משתנה סביבה כדי להצביע על קובץ truststore כך שהיישום יכול לאסוף את הקובץ המכיל את האישור הציבורי של השרת אליו אנו מתחברים.

השלבים להתקנת אישור חדש בחנות אמון ברירת המחדל של Java הם:

  1. לחלץ תעודה מהשרת: openssl s_client - שרת חיבור: 443
  2. ייבא אישור לחנות אמון באמצעות keytool: keytool -import -alias alias.server.com -keystore $ JAVA_HOME / jre / lib / security / cacerts

לאחר שעשינו זאת, אנו אמורים להיות מסוגלים להריץ את הדוגמה שוב ולהשיג את ה- חיבור מאובטח בוצע בהצלחה הוֹדָעָה.

5. מסקנה

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

כמו תמיד, הקוד המוצג במאמר זה זמין באתר Github.

תחתית Java

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

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