Cara mengontrol cakupan SSLContext

Jika saya menggunakan kode berikut karena saya ingin, misalnya, mengubah cara validasi sertifikat.

trm = beberapa manajer kepercayaan

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { trm }, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

Kemudian ini menetapkan SSLContext untuk semua koneksi https yang akan dibuat di masa depan, apa pun threadnya. Apa cara terbersih untuk mengontrol cakupan sehingga saya mengaturnya hanya untuk panggilan yang saya inginkan?


person che javara    schedule 17.05.2011    source sumber


Jawaban (1)


Anda dapat mengatur pabrik soket pada objek koneksi aktual yang Anda inginkan menggunakan penyimpanan kepercayaan ini:

HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setSSLSocketFactory(sc.getSocketFactory());

Lakukan itu alih-alih memanggil setDefaultSSLSocketFactory.

person laz    schedule 17.05.2011
comment
terima kasih sepertinya itu akan berhasil, tetapi tahukah Anda cara lain yang tidak mengharuskan Anda mendapatkan instance HttpsURLConnection ? - person che javara; 17.05.2011
comment
Apakah Anda tidak menggunakan HTTP? Jenis koneksi apa yang menggunakan soket SSL? - person laz; 17.05.2011
comment
@che javara Anda mendapatkan HttpsURLConnection setiap kali Anda menggunakan URL HTTPS di Java. Ini bukan langkah ekstra. Pertanyaan Anda tidak masuk akal. - person user207421; 18.05.2011
comment
Katakanlah saya menggunakan kerangka perpesanan tingkat tinggi yang menggunakan http di bawah sampul jadi saya tidak memiliki akses langsung untuk memodifikasi instance HttpsURLConnection - person che javara; 18.05.2011
comment
Anda harus bergantung pada mekanisme kerangka kerja tersebut untuk menyediakan pabrik soket alternatif. Jika detail tersebut tidak diekspos oleh kerangka kerja, Anda harus mengandalkan pengaturan global. Dalam hal ini, Anda dapat menyediakan subkelas TrustManager yang hanya melakukan perilaku berbeda pada host yang dipilih dan kembali ke TrustManager asli untuk semua host lainnya. - person laz; 18.05.2011
comment
jawaban yang sangat bagus Iaz, saya condong ke arah itu tetapi untuk beberapa alasan saya berpikir ada cara global yang 'lebih bersih'. - person che javara; 18.05.2011