Java'da SSL sertifikası denetimi nasıl atlanır?
Yayınlanan: 2023-02-08Güvenli Yuva Katmanı (SSL) ve Aktarım Katmanı Güvenliği (TLS), internet üzerinden iletişimi güvenli hale getirmek için yaygın olarak kullanılan şifreleme protokolleridir. Bir istemci (ör. bir web tarayıcısı), SSL/TLS kullanan bir sunucuyla iletişim kurduğunda, sunucu, istemcinin sunucunun kimliğini doğrulamak için kullanabileceği bir sertifika sunar. Sertifika geçerli değilse, istemci genellikle bir uyarı gösterir ve sunucuyla iletişim kurmayı reddeder.
Ancak, örneğin test sırasında veya kendinden imzalı bir sertifikayla dahili bir sunucuya bağlanırken, bu sertifika doğrulamasını atlamanız gereken zamanlar olabilir. Bu yazıda, Java'da SSL sertifikası doğrulamasını nasıl devre dışı bırakacağınızı göstereceğiz.
SSL sertifikası doğrulamasının atlanması neden önerilmez?
SSL sertifikası doğrulamasını atlamak, SSL/TLS şifrelemesinin güvenliğini zayıflatır. Başka bir sunucunun kimliğine bürünen bir sunucuya bağlanmanıza izin verir, bu da bir saldırganın iletişiminizi kesmesine ve kurcalamasına izin verebilir. Bu nedenle, üretim sistemlerinde sertifika doğrulamasının devre dışı bırakılması önerilmez.
Java'da SSL sertifikası doğrulaması nasıl atlanır
Java'da SSL sertifikası doğrulamasının nasıl atlanacağını gösteren bir örnek kod:
CrunchifyBypassSSLCert.java
paket crunchify.com.java.tutorials; javax.net.ssl.HttpsURLConnection'ı içe aktarın; javax.net.ssl.SSLContext'i içe aktarın; javax.net.ssl.TrustManager'ı içe aktarın; javax.net.ssl.X509TrustManager'ı içe aktarın; java.io.BufferedReader'ı içe aktarın; java.io.InputStreamReader'ı içe aktarın; java.net.URL'yi içe aktarın; java.security.cert.X509Certificate'i içe aktarın; /** * @yazar Crunchify.com * Versiyon: 2.1 * Java'da SSL sertifikası denetimi nasıl atlanır? * */ genel sınıf CrunchifyBypassSSLCert { genel statik geçersiz main(String[] args) { crunchifyDisableCertificateValidation(); crunchifyTestConnection("https://crunchify.com"); } genel statik geçersiz crunchifyDisableCertificateValidation() { denemek { // SSLContext: Bu sınıfın örnekleri, güvenli bir soket protokolü uygulamasını temsil eder // güvenli soket fabrikaları veya SSLEngines için bir fabrika görevi görür. // Bu sınıf, isteğe bağlı bir dizi anahtar ve güven yöneticisi ve güvenli rasgele bayt kaynağı ile başlatılır. SSLContext crunchifySSLC = SSLContext.getInstance("TLS"); TrustManager[] trustManagerArray = { yeni NullX509TrustManager() }; crunchifySSLC.init(null, trustManagerArray, null); HttpsURLConnection.setDefaultSSLSocketFactory(crunchifySSLC.getSocketFactory()); } yakala (İstisna e) { e.printStackTrace(); } } özel statik sınıf NullX509TrustManager, X509TrustManager'ı uygular { genel geçersiz checkClientTrusted(X509Certificate[] zinciri, String authType) { // hiçbir şey yapma } genel geçersiz checkServerTrusted(X509Certificate[] zinciri, String authType) { // hiçbir şey yapma } genel X509Certificate[] getAcceptedIssuers() { yeni X509Certificate[0] döndür; } } genel statik geçersiz crunchifyTestConnection(String crunchifyURL) { denemek { URL crinchifySiteURL = yeni URL(crunchifyURL); // HttpsURLConnection, HttpURLConnection'ı https'ye özgü özellikler desteğiyle genişletir. HttpsURLConnection bağlantısı = (HttpsURLConnection) crunchifySiteURL.openConnection(); bağlantı.bağlantı(); // X.509 sertifikaları için soyut sınıf. // Bu, bir X.509 sertifikasının tüm özelliklerine erişmek için standart bir yol sağlar. X509Sertifikası[] sertifikaları = (X509Sertifikası[]) bağlantısı.getServerCertificates(); (X509Certificate sertifikası : sertifikalar) için { System.out.println("İşte bir Sertifika: " + cert.toString()); } BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))); Dize girişiSatır; System.out.println("Crunchify Yanıtı Başlıyor: "); while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); } in.close(); System.out.println("Crunchify Yanıt Kodu: " + connection.getResponseCode()); } yakala (İstisna e) { e.printStackTrace(); } } }
Kod, NullX509TrustManager
adlı özel bir TrustManager
uygulaması oluşturur ve bu uygulama, kabul edilen yayınlayıcıların boş bir dizisini döndürür.
disableCertificateValidation
yöntemi, bu özel güven yöneticisini HttpsURLConnection
sınıfı için varsayılan olarak ayarlar.
IntelliJ IDEA Konsolu Sonucu:
Sadece yukarıdaki programı bir Java Uygulaması olarak çalıştırın ve sonucu aşağıdaki gibi göreceksiniz. Burada https://crunchify.com sitesi için Sertifika yazdırıyorum
İşte bir Sertifika: [ [ Sürüm: V3 Konu: CN=crunchify.com, O="Cloudflare, Inc.", L=San Francisco, ST=California, C=ABD İmza Algoritması: SHA256withECDSA, OID = 1.2.840.10045.4.3.2 Anahtar: Sun EC genel anahtarı, 256 bit genel x kodu: 38529685942248262624712688939942529436235652555283274298255011250522606614918 genel kod: 29334354097022760577193442773858953165938409689794173149697689580356278546401 parametreler: secp256r1 [NIST P-256,X9.62 prime256v1] (1.2.840.10045.3.1.7) Geçerlilik: [22 Temmuz Cuma 19:00:00 CDT 2022, Kime: 23 Temmuz Paz 18:59:59 CDT 2023] Veren: CN=Cloudflare Inc ECC CA-3, O="Cloudflare, Inc.", C=US Seri Numarası: [ 03c5734c 15f2a24f a8554c49 a0935d45] Sertifika Uzantıları: 10 [1]: ObjectId: 1.3.6.1.4.1.11129.2.4.2 Kritiklik=yanlış Uzantı bilinmiyor: DER kodlu OCTET dizisi = 0000: 04 82 01 6E 04 82 01 6A 01 68 00 76 00 AD F7 BE ...n...jhv... 0010: FA 7C FF 10 C8 8B 9D 3D 9C 1E 3E 18 6A B4 67 29 ......=..>.jg) 0020: 5D CF B1 0C 24 CA 85 86 34 EB DC 82 8A 00 00 01 ]...$...4....... 0030: 82 28 D4 6A 70 00 00 04 03 00 47 30 45 02 20 19 .(.jp.....G0E. . . 0040: 31 3C 0C 39 7A A9 8E 78 B6 0B B2 37 25 FE 62 23 1<.9z..x...7%.b# 0050: 53 4F 27 75 17 A7 B8 01 FB C4 E6 91 E1 CB 31 02 SO'u............1. 0060: 21 00 B2 A2 7C 06 26 8E 72 83 02 9A 58 52 0E 31 !.....&.r...XR.1 0070: 99 6F 2C 2A 0C 34 0A B6 34 45 F1 A9 79 A2 4F B7 .o,*.4..4E..yO 0080: 8A DB 00 76 00 35 CF 19 1B BF B1 6C 57 BF 0F AD ...v.5.....lW... 0090: 4C 6D 42 CB BB B6 27 20 26 51 EA 3F E1 2A EF A8 LmB...' &Q.?.*.. 00A0: 03 C3 3B D6 4C 00 00 01 82 28 D4 6A 57 00 00 04 ..;.L....(.jW... 00B0: 03 00 47 30 45 02 20 5F D6 85 1B 65 51 68 C7 BE ..G0E. _...eQh.. 00C0: 5A 77 12 47 98 93 7D F6 18 BB 5E 74 12 62 42 A5 Zw.G......^t.bB. 00D0: 38 95 64 F4 F1 8F CA 02 21 00 DD BD 79 13 78 A7 8.d......!...yx 00E0: E4 A7 A1 9C 40 C2 2E E0 3E DF 16 9F 70 70 E7 A1 ....@...>...pp.. 00F0: 78 01 16 3D D1 7B 1C E0 60 1E 00 76 00 B7 3E FB x..=...`..v..>. 0100: 24 DF 9C 4D BA 75 F2 39 C5 BA 58 F4 6C 5D FC 42 $..Mu9..Xl].B 0110: CF 7A 9F 35 C4 9E 1D 09 81 25 ED B4 99 00 00 01 .z.5......%...... 0120: 82 28 D4 6A 5B 00 00 04 03 00 47 30 45 02 21 00 .(.j[.....G0E.!. 0130: AA 7C E3 08 41 E7 3B 84 1B B8 FE 06 4B 7C 83 27 ....A.;.....K..' 0140: CF 4A 81 3F 07 D4 32 FC 69 80 22 D5 DC 06 9B D5 .J.?..2.i"..... 0150: 02 20 0B 50 38 88 53 20 A0 A6 CD 6D 88 37 7C 6D . .P8.S ...dk.7.m 0160: E2 E2 8E D9 B1 B7 16 1E A6 EA 38 C2 D3 D7 9B 48 ..........8....H 0170: 34 3C 4< [2]: ObjectId: 1.3.6.1.5.5.7.1.1 Kritiklik=yanlış Yetki Bilgi Erişimi [ [ erişim Yöntemi: ocsp erişimKonum: URIName: http://ocsp.digicert.com , erişim yöntemi: cassuers erişimKonum: URIName: http://cacerts.digicert.com/CloudflareIncECCCA-3.crt ] ] [3]: ObjectId: 2.5.29.35 Kritiklik=yanlış Yetki Anahtarı Tanımlayıcısı [ Anahtar Tanımlayıcı [ 0000: A5 CE 37 EA EB B0 75 0E 94 67 88 B4 45 FA D9 24 ..7...u..g..E..$ 0010: 10 87 96 1F .... ] ] [4]: ObjectId: 2.5.29.19 Kritiklik=doğru Temel Kısıtlamalar:[ CA:yanlış PathLen: tanımsız ] [5]: ObjectId: 2.5.29.31 Kritiklik=yanlış CRL DağıtımPuanları [ [Dağıtım Noktası: [URIName: http://crl3.digicert.com/CloudflareIncECCCA-3.crl] , Dağıtım Noktası: [URIName: http://crl4.digicert.com/CloudflareIncECCCA-3.crl] ]] [6]: ObjectId: 2.5.29.32 Kritiklik=yanlış Sertifika İlkeleri [ [Sertifika Politikası Kimliği: [2.23.140.1.2.2] [PolicyQualifierInfo: [ niteleyici kimliği: 1.3.6.1.5.5.7.2.1 niteleyici: 0000: 16 1B 68 74 74 70 3A 2F 2F 77 77 77 2E 64 69 67 ..http://www.dig 0010: 69 63 65 72 74 2E 63 6F 6D 2F 43 50 53 icert.com/CPS ]] ] ] [7]: ObjectId: 2.5.29.37 Kritiklik=yanlış Genişletilmiş Anahtar Kullanımları [ sunucuAuth istemciAuth ] [8]: ObjectId: 2.5.29.15 Kritiklik=doğru Anahtar Kullanımı [ Elektronik imza ] [9]: ObjectId: 2.5.29.17 Kritiklik=yanlış KonuAlternatifAdı [ DNSAdı: *.crunchify.com DNSAdı: crunchify.com ] [10]: ObjectId: 2.5.29.14 Kritiklik=yanlış Konu Anahtarı Tanımlayıcısı [ Anahtar Tanımlayıcı [ 0000: CF 6E 31 8C 88 C5 ED 09 6D F6 97 57 CE D4 F0 EC .n1.....m..W.... 0010: B5 FD 99 1A .... ] ] ] Algoritma: [ECDSA ile SHA256] İmza: 0000: 30 45 02 20 48 32 9D F1 A0 BA 7A 89 0A 69 0E 5A 0E. H2....z..iZ 0010: D6 50 58 9F B4 89 A8 FF BE A3 BF 3F 80 6E DD F2 .PX........?.n.. 0020: C9 1E BB 04 02 21 00 D3 A8 8F E6 0F 23 E3 59 D7 ......!......#.Y. 0030: 60 3C 74 A7 BF F1 4D 8E 99 0D B9 85 75 15 14 DE `<t...M.....u... 0040: 6D B4 B4 01 BB E2 6F m.....o ] İşte bir Sertifika: [ [ Sürüm: V3 Konu: CN=Cloudflare Inc ECC CA-3, O="Cloudflare, Inc.", C=US İmza Algoritması: SHA256withRSA, OID = 1.2.840.113549.1.1.11 Anahtar: Sun EC genel anahtarı, 256 bit genel x kodu: 83984075730615231530440956498748499276900957075036316089284983112230089232319 genel kod: 84720202049003273739269829519636180374924996951868121119946393481023066512343 parametreler: secp256r1 [NIST P-256,X9.62 prime256v1] (1.2.840.10045.3.1.7) Geçerlilik: [27 Ocak Pazartesi 06:48:08 CST 2020'den itibaren, Kime: 31 Aralık Salı 17:59:59 CST 2024] Veren: CN=Baltimore CyberTrust Root, OU=CyberTrust, O=Baltimore, C=IE Seri Numarası: [ 0a378764 5e5fb48c 224efd1b ed140c3c] Sertifika Uzantıları: 8 [1]: ObjectId: 1.3.6.1.5.5.7.1.1 Kritiklik=yanlış Yetki Bilgi Erişimi [ [ erişim Yöntemi: ocsp erişimKonum: URIName: http://ocsp.digicert.com ] ] [2]: ObjectId: 2.5.29.35 Kritiklik=yanlış Yetki Anahtarı Tanımlayıcısı [ Anahtar Tanımlayıcı [ 0000: E5 9D 59 30 82 47 58 CC AC FA 08 54 36 86 7B 3A ..Y0.GX....T6..: 0010: B5 04 4D F0 ..M. ] ] [3]: ObjectId: 2.5.29.19 Kritiklik=doğru Temel Kısıtlamalar:[ CA: doğru Yol Boyu:0 ] [4]: ObjectId: 2.5.29.31 Kritiklik=yanlış CRL DağıtımPuanları [ [Dağıtım Noktası: [URIName: http://crl3.digicert.com/Omniroot2025.crl] ]] [5]: ObjectId: 2.5.29.32 Kritiklik=yanlış Sertifika İlkeleri [ [Sertifika Politikası Kimliği: [2.16.840.1.114412.1.1] [PolicyQualifierInfo: [ niteleyici kimliği: 1.3.6.1.5.5.7.2.1 niteleyici: 0000: 16 1C 68 74 74 70 73 3A 2F 2F 77 77 77 2E 64 69 ..https://www.di 0010: 67 69 63 65 72 74 2E 63 6F 6D 2F 43 50 53 gicert.com/CPS ]] ] [Sertifika Politikası Kimliği: [2.16.840.1.114412.1.2] [] ] [Sertifika Politikası Kimliği: [2.23.140.1.2.1] [] ] [Sertifika Politikası Kimliği: [2.23.140.1.2.2] [] ] [Sertifika Politikası Kimliği: [2.23.140.1.2.3] [] ] ] [6]: ObjectId: 2.5.29.37 Kritiklik=yanlış Genişletilmiş Anahtar Kullanımları [ sunucuAuth istemciAuth ] [7]: ObjectId: 2.5.29.15 Kritiklik=doğru Anahtar Kullanımı [ Elektronik imza Key_CertSign Crl_Sign ] [8]: ObjectId: 2.5.29.14 Kritiklik=yanlış Konu Anahtarı Tanımlayıcısı [ Anahtar Tanımlayıcı [ 0000: A5 CE 37 EA EB B0 75 0E 94 67 88 B4 45 FA D9 24 ..7...u..g..E..$ 0010: 10 87 96 1F .... ] ] ] Algoritma: [RSA256ile SHA256] İmza: 0000: 05 24 1D DD 1B B0 2A EB 98 D6 85 E3 39 4D 5E 6B .$....*..9M^k 0010: 57 9D 82 57 FC EB E8 31 A2 57 90 65 05 BE 16 44 W..W...1.We..D 0020: 38 5A 77 02 B9 CF 10 42 C6 E1 92 A4 E3 45 27 F8 8Zw....B.....E'. 0030: 00 47 2C 68 A8 56 99 53 54 8F AD 9E 40 C1 D0 0F .G,hVST...@... 0040: B6 D7 0D 0B 38 48 6C 50 2C 49 90 06 5B 64 1D 8B ....8HlP,I..[d.. 0050: CC 48 30 2E DE 08 E2 9B 49 22 C0 92 0C 11 5E 96 .H0.....I"....^. 0060: 92 94 D5 FC 20 DC 56 6C E5 92 93 BF 7A 1C C0 37 .... .Vl....z..7 0070: E3 85 49 15 FA 2B E1 74 39 18 0F B7 DA F3 A2 57 ..I..+.t9......W 0080: 58 60 4F CC 8E 94 00 FC 46 7B 34 31 3E 4D 47 82 X`O.....F.41>MG. 0090: 81 3A CB F4 89 5D 0E EF 4D 0D 6E 9C 1B 82 24 DD .:...]..Mn..$. 00A0: 32 25 5D 11 78 51 10 3D A0 35 23 04 2F 65 6F 9C %2].xQ.=.5#./eo. 00B0: C1 D1 43 D7 D0 1E F3 31 67 59 27 DD 6B D2 75 09 ..C....1gY'.ku 00C0: 93 11 24 24 14 CF 29 BE E6 23 C3 B8 8F 72 3F E9 ..$$..)..#...r?. 00D0: 07 C8 24 44 53 7A B3 B9 61 65 A1 4C 0E C6 48 00 ..$DSz..ae.L..H. 00E0: C9 75 63 05 87 70 45 52 83 D3 95 9D 45 EA F0 E8 .uc..pER....E... 00F0: 31 1D 7E 09 1F 0A FE 3E DD AA 3C 5E 74 D2 AC B1 1......>..<^t... ]
Üretim sistemleri için SSL sertifikası doğrulamasını atlamak, SSL/TLS şifrelemesinin güvenliğini baltaladığı için önerilmez.
Ancak, test amacıyla gerekli olabilir.
Bu gönderide gösterilen kod, Java'da sertifika doğrulamasının nasıl devre dışı bırakılacağını gösterir, ancak bunun üretim sistemlerinde değil, yalnızca test amacıyla kullanılması gerektiğini unutmayın.
Bu kodu çalıştırırken herhangi bir sorunla karşılaşırsanız bana bildirin.