Ketika TrustManagerFactory bukan TrustManagerFactory (Java)

Saya mencoba menambahkan beberapa tes JUnit tambahan ke produk App-Server (TomCat) yang ada. Saya mengalami masalah dengan TrustManager khusus (yang sudah ada dan dimasukkan). Hal ini berfungsi dengan baik dalam produksi, tetapi selama JUnit, memberikan pengecualian.

TrustManager yang disesuaikan hanya memuat keystore dari suatu jalur, dan secara implisit mempercayai sertifikat publik kita sendiri. Untuk beberapa alasan, penggunaan ini di JUnits menyebabkan pengecualian pada baris berikut:

TrustManagerFactory tmFactory = TrustManagerFactory.getInstance("PKIX");    

Pengecualian:

java.security.NoSuchAlgorithmException:  class configured for TrustManagerFactory: com.sun.net.ssl.internal.ssl.TrustManagerFactoryImpl$PKIXFactory not a TrustManagerFactory

Pengecualian ini terjadi terlepas dari kombinasi Penyedia/Algoritma apa yang digunakan ("SunX509", .getDefaultAlgorithm(), dkk.).

Wawasan apa pun akan sangat dihargai.


person David Beveridge    schedule 01.02.2013    source sumber
comment
AFAICT, Idea menggunakan %JAVA_HOME%, yang memutuskan untuk: java version "1.6.0_23" Java(TM) SE Runtime Environment (build 1.6.0_23-b05) Java HotSpot(TM) 64-Bit Server VM (build 19.0-b09, mixed mode)   -  person David Beveridge    schedule 02.02.2013
comment
Sepertinya JUnit telah mengacaukan konfigurasi penyedia keamanan.   -  person user207421    schedule 02.02.2013
comment
Jika yang Anda maksud adalah Penyedia, sepertinya mereka baik-baik saja (saya dapat membaca dengan teliti dan menemukan PKIX di bawah BC dan SunX509, dll). . . . yang aneh.   -  person David Beveridge    schedule 02.02.2013
comment
Apakah Anda kebetulan menginstal file jar JSSE lama dari 1,3 hari di suatu tempat di CLASSPATH di mana JUnit dapat melihatnya tetapi produksi tidak bisa? Jika demikian, hapuslah.   -  person user207421    schedule 02.02.2013
comment
Tidak sejauh yang saya tahu. Yang aneh adalah: Saya memindahkan fungsi init SSL ke kelas lain dan masalah dengan TrustManager hilang. Tidak tahu alasannya. ›_‹   -  person David Beveridge    schedule 06.02.2013
comment
Contoh sempurna dari pesan pengecualian java yang ambigu.   -  person Calicoder    schedule 10.01.2021


Jawaban (1)


Sepertinya PowerMock mengacaukan masalah SSL dan karenanya, Anda mengalami pemuatan pabrik yang salah. Solusinya adalah dengan menggunakan anotasi pada kelas tes:

@PowerMockIgnore("javax.net.ssl.*")

ini diambil dari https://groups.google.com/forum/#!topic/powermock/v4nreP2AnOQ

person GBa    schedule 29.05.2014
comment
Sempurna :) Terima kasih! - person CoderSpinoza; 26.08.2016