הפעלת TLS v1.2 ב- Java 7

ג'אווה טופ

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

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

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

כשמדובר בחיבורי SSL, עלינו להשתמש ב- TLSv1.2. ואכן, זהו פרוטוקול SSL המוגדר כברירת מחדל עבור Java 8.

ובעוד שג'אווה 7 תומכת ב- TLSv1.2, ברירת המחדל היא TLS v1.0, שהוא חלש מדי בימינו.

במדריך זה נדון באפשרויות שונות להגדרת תצורה של Java 7 לשימוש ב- TLSv1.2.

2. שימוש בארגומנטים של Java VM

אם אנו משתמשים ב- Java 1.7.0_95 ואילך, אנו יכולים להוסיף את ה- jdk.tls.client.protocols נכס כ ג'אווה טיעון שורת פקודה לתמיכה ב- TLSv1.2:

java -Djdk.tls.client.protocols = TLSv1.2 

אבל Java 1.7.0_95 זמין רק ללקוחות שרכשו תמיכה מאורקל. לכן נסקור אפשרויות אחרות להלן כדי להפעיל TLSv1.2 ב- Java 7.

3. שימוש ב- SSLSocket

בדוגמה ראשונה זו, אנו נפעיל TLSv1.2 באמצעות SSLSocketFactory.

ראשון, אנחנו יכולים ליצור ברירת מחדל SSLSocketFactory חפץ על ידי קריאה ל SSLSocketFactory #getDefault שיטת מפעל.

לאחר מכן, אנו פשוט מעבירים את המארח והנמל שלנו אל SSLSocket #createSocket:

SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault (); SSLSocket sslSocket = (SSLSocket) socketFactory.createSocket (hosturl, port);

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

בגישה הראשונה, אנו יכולים להעביר מערך של פרוטוקולי SSL נתמכים אל setEnabledProtocols שיטה על שלנו SSLSocket למשל:

sslSocket.setEnabledProtocols (מחרוזת חדשה [] {"TLSv1.2"});

לחלופין, אנו יכולים להשתמש SSLParameters, באמצעות אותו מערך:

SSLParameters params = SSLParameters חדשים (); params.setProtocols (מחרוזת חדשה [] {"TLSv1.2"}); sslSocket.setSSLParameters (params);

4. שימוש ב- SSLContext

הגדרת ה- SSLSocket משנה ישירות רק את החיבור האחד. אנחנו יכולים להשתמש SSLContext כדי לשנות את הדרך בה אנו יוצרים את SSLSocketFactory.

אז במקום להשתמש SSLSocketFactory # getInstance, בא נעשה SSLContext # getInstance, נותן לזה “TLSv1.2”כפרמטר.אנחנו פשוט יכולים להשיג את שלנו SSLSocketFactory מזה עכשיו:

SSLContext sslContext = SSLContext.getInstance ("TLSv1.2"); sslContext.init (null, null, SecureRandom חדש ()); SSLSocketFactory socketFactory = sslContext.getSocketFactory (); שקע SSLSocket = (SSLSocket) socketFactory.createSocket (url, יציאה);

כהערה צדדית מהירה, זכרו תמיד להשתמש SecureRandom כשעובדים עם SSL.

5. שימוש חיבור HttpsURLC

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

אז לבסוף, בואו נראה כיצד להפעיל את TLSv1.2 חיבור HttpsURLC.

ראשית, נצטרך מופע של כתובת אתר. בואו נדמיין שאנחנו מתחברים אל //example.org:

URL url = URL חדש ("//" + hosturl + ":" + port);

עכשיו, אנחנו יכולים להגדיר את שלנו SSLContext כמו קודם:

SSLContext sslContext = SSLContext.getInstance ("TLSv1.2"); sslContext.init (null, null, SecureRandom חדש ());

ואז, הצעדים האחרונים שלנו הם ליצור את החיבור ולספק לו SSLSocketFactory:

חיבור HttpsURLConnection = (HttpsURLConnection) url.openConnection (); connection.setSSLSocketFactory (sslContext.getSocketFactory ());

6. מסקנה

במאמר מהיר זה, הראינו כמה דרכים להפעלת TLSv1.2 ב- Java 7.

דוגמאות הקוד המשמשות במאמר זה זמינות באתר GitHub.

תחתית Java

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

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

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