Bagaimana cara melewati pemeriksaan sertifikat SSL di Jawa?
Diterbitkan: 2023-02-08Secure Sockets Layer (SSL) dan Transport Layer Security (TLS) adalah protokol enkripsi yang biasa digunakan untuk mengamankan komunikasi melalui internet. Saat klien (misalnya browser web) berkomunikasi dengan server menggunakan SSL/TLS, server menyajikan sertifikat yang dapat digunakan klien untuk memverifikasi identitas server. Jika sertifikat tidak valid, klien biasanya akan menunjukkan peringatan dan menolak untuk berkomunikasi dengan server.
Namun, ada kalanya Anda perlu mengabaikan validasi sertifikat ini, misalnya selama pengujian atau saat menghubungkan ke server internal dengan sertifikat yang ditandatangani sendiri. Dalam posting ini, kami akan menunjukkan cara menonaktifkan validasi sertifikat SSL di Java.
Mengapa melewati validasi sertifikat SSL tidak disarankan
Melewati validasi sertifikat SSL merusak keamanan enkripsi SSL/TLS. Ini memungkinkan Anda untuk terhubung ke server yang dapat menyamar sebagai server lain, yang dapat memungkinkan penyerang mencegat dan merusak komunikasi Anda. Oleh karena itu, tidak disarankan untuk menonaktifkan validasi sertifikat dalam sistem produksi.
Cara melewati validasi sertifikat SSL di Jawa
Berikut adalah contoh kode yang menunjukkan cara mem-bypass validasi sertifikat SSL di Java:
CrunchifyBypassSSLCert.java
paket crunchify.com.java.tutorials; impor javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; impor javax.net.ssl.TrustManager; impor javax.net.ssl.X509TrustManager; import java.io.BufferedReader; impor java.io.InputStreamReader; impor java.net.URL; import java.security.cert.X509Certificate; /** * @penulis Crunchify.com * Versi: 2.1 * Bagaimana cara melewati pemeriksaan sertifikat SSL di Jawa? * */ kelas publik CrunchifyBypassSSLCert { public static void main(String[] args) { crunchifyDisableCertificateValidation(); crunchifyTestConnection("https://crunchify.com"); } public static void crunchifyDisableCertificateValidation() { mencoba { // SSLContext: Instance kelas ini mewakili implementasi protokol soket aman // yang bertindak sebagai pabrik untuk pabrik soket aman atau SSLEngines. // Kelas ini diinisialisasi dengan serangkaian kunci opsional dan pengelola kepercayaan serta sumber byte acak yang aman. SSLContext crunchifySSLC = SSLContext.getInstance("TLS"); TrustManager[] trustManagerArray = { baru NullX509TrustManager() }; crunchifySSLC.init(null, trustManagerArray, null); HttpsURLConnection.setDefaultSSLSocketFactory(crunchifySSLC.getSocketFactory()); } catch (Pengecualian e) { e.printStackTrace(); } } kelas statis pribadi NullX509TrustManager mengimplementasikan X509TrustManager { public void checkClientTrusted(X509Certificate[] rantai, String authType) { // tidak melakukan apapun } public void checkServerTrusted(X509Certificate[] rantai, String authType) { // tidak melakukan apapun } publik X509Certificate[] getAcceptedIssuers() { kembalikan Sertifikat X509 baru[0]; } } public static void crunchifyTestConnection(String crunchifyURL) { mencoba { URL crunchifySiteURL = URL baru(crunchifyURL); // HttpsURLConnection memperluas HttpURLConnection dengan dukungan untuk fitur khusus https. Koneksi HttpsURLConnection = (HttpsURLConnection) crunchifySiteURL.openConnection(); connection.connect(); // Kelas abstrak untuk sertifikat X.509. // Ini memberikan cara standar untuk mengakses semua atribut sertifikat X.509. X509Sertifikat[] sertifikat = (X509Sertifikat[]) koneksi.getServerCertificates(); untuk (sertifikat X509Sertifikat : sertifikat) { System.out.println("Ini Sertifikat: " + cert.toString()); } BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); Baris masukan string; System.out.println("Crunchify Response Dimulai: "); while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); } melampirkan(); System.out.println("Crunchify Response Code: " + connection.getResponseCode()); } catch (Pengecualian e) { e.printStackTrace(); } } }
Kode membuat implementasi TrustManager
khusus yang disebut NullX509TrustManager
yang hanya mengembalikan array kosong dari penerbit yang diterima.
Metode disableCertificateValidation
menyetel pengelola kepercayaan kustom ini sebagai default untuk kelas HttpsURLConnection
.
Hasil Konsol IntelliJ IDEA:
Jalankan saja program di atas sebagai Aplikasi Java dan Anda akan melihat hasilnya seperti di bawah ini. Di sini saya mencetak Sertifikat untuk situs https://crunchify.com
Ini Sertifikat: [ [ Versi: V3 Perihal: CN=crunchify.com, O="Cloudflare, Inc.", L=San Francisco, ST=California, C=US Algoritma Tanda Tangan: SHA256denganECDSA, OID = 1.2.840.10045.4.3.2 Kunci: kunci publik Sun EC, 256 bit publik x koordinat: 38529685942248262624712688939942529436235652555283274298255011250522606614918 publik y coord: 29334354097022760577193442773858953165938409689794173149697689580356278546401 parameter: secp256r1 [NIST P-256,X9.62 prime256v1] (1.2.840.10045.3.1.7) Validitas: [Dari: Jum 22 Jul 19:00:00 CDT 2022, Kepada: Minggu 23 Juli 18:59:59 CDT 2023] Penerbit: CN=Cloudflare Inc ECC CA-3, O="Cloudflare, Inc.", C=US Nomor Seri: [ 03c5734c 15f2a24f a8554c49 a0935d45] Perpanjangan Sertifikat: 10 [1]: ObjectId: 1.3.6.1.4.1.11129.2.4.2 Kekritisan=salah Ekstensi tidak diketahui: String OCTET yang disandikan DER = 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 ...m.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 Criticality=false OtoritasInfoAkses [ [ metode akses: ocsp accessLocation: URIName: http://ocsp.digicert.com , accessMethod: caIssuers accessLocation: URIName: http://cacerts.digicert.com/CloudflareIncECCCA-3.crt ] ] [3]: ObjectId: 2.5.29.35 Criticality=false PengenalKeyOtoritas [ Pengidentifikasi Kunci [ 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 1L .... ] ] [4]: ObjectId: 2.5.29.19 Kekritisan=benar Kendala Dasar:[ CA: salah PathLen: tidak terdefinisi ] [5]: ObjectId: 2.5.29.31 Criticality=false CRLDistributionPoints [ [Titik Distribusi: [NamaURI: http://crl3.digicert.com/CloudflareIncECCCA-3.crl] , Titik Distribusi: [NamaURI: http://crl4.digicert.com/CloudflareIncECCCA-3.crl] ]] [6]: ObjectId: 2.5.29.32 Criticality=false Kebijakan Sertifikat [ [CertificatePolicyId: [2.23.140.1.2.2] [PolicyQualifierInfo: [ ID kualifikasi: 1.3.6.1.5.5.7.2.1 kualifikasi: 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 Criticality=false ExtendedKeyUsages [ serverAuth clientAuth ] [8]: ObjectId: 2.5.29.15 Criticality=true PenggunaanKey [ Tanda tangan digital ] [9]: ObjectId: 2.5.29.17 Criticality=false SubyekNamaAlternatif [ Nama DNS: *.crunchify.com Nama DNS: crunchify.com ] [10]: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ Pengidentifikasi Kunci [ 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: [SHA256withECDSA] Tanda tangan: 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 MENJADI 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 ] Ini Sertifikat: [ [ Versi: V3 Perihal: CN=Cloudflare Inc ECC CA-3, O="Cloudflare, Inc.", C=US Algoritma Tanda Tangan: SHA256withRSA, OID = 1.2.840.113549.1.1.11 Kunci: kunci publik Sun EC, 256 bit publik x koordinat: 83984075730615231530440956498748499276900957075036316089284983112230089232319 publik y coord: 84720202049003273739269829519636180374924996951868121119946393481023066512343 parameter: secp256r1 [NIST P-256,X9.62 prime256v1] (1.2.840.10045.3.1.7) Validitas: [Dari: Sen 27 Jan 06:48:08 CST 2020, Kepada: Sel 31 Des 17:59:59 CST 2024] Penerbit: CN=Baltimore CyberTrust Root, OU=CyberTrust, O=Baltimore, C=IE Nomor Seri: [ 0a378764 5e5fb48c 224efd1b ed140c3c] Ekstensi Sertifikat: 8 [1]: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false OtoritasInfoAkses [ [ metode akses: ocsp accessLocation: URIName: http://ocsp.digicert.com ] ] [2]: ObjectId: 2.5.29.35 Criticality=false PengenalKeyOtoritas [ Pengidentifikasi Kunci [ 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 Kekritisan=benar Kendala Dasar:[ CA: benar PathLen:0 ] [4]: ObjectId: 2.5.29.31 Criticality=false CRLDistributionPoints [ [Titik Distribusi: [NamaURI: http://crl3.digicert.com/Omniroot2025.crl] ]] [5]: ObjectId: 2.5.29.32 Criticality=false Kebijakan Sertifikat [ [CertificatePolicyId: [2.16.840.1.114412.1.1] [PolicyQualifierInfo: [ ID kualifikasi: 1.3.6.1.5.5.7.2.1 kualifikasi: 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 ]] ] [CertificatePolicyId: [2.16.840.1.114412.1.2] [] ] [CertificatePolicyId: [2.23.140.1.2.1] [] ] [CertificatePolicyId: [2.23.140.1.2.2] [] ] [CertificatePolicyId: [2.23.140.1.2.3] [] ] ] [6]: ObjectId: 2.5.29.37 Criticality=false ExtendedKeyUsages [ serverAuth clientAuth ] [7]: ObjectId: 2.5.29.15 Criticality=true PenggunaanKey [ Tanda tangan digital Key_CertSign Crl_Sign ] [8]: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ Pengidentifikasi Kunci [ 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 1L .... ] ] ] Algoritma: [SHA256withRSA] Tanda tangan: 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... ]
Melewati validasi sertifikat SSL tidak disarankan untuk sistem produksi karena merusak keamanan enkripsi SSL/TLS.
Namun, mungkin diperlukan untuk tujuan pengujian.
Kode yang ditampilkan dalam posting ini menunjukkan cara menonaktifkan validasi sertifikat di Java, tetapi perlu diingat bahwa ini hanya boleh digunakan untuk tujuan pengujian dan bukan dalam sistem produksi.
Beri tahu saya jika Anda menghadapi masalah saat menjalankan kode ini.