Rumah  >  Artikel  >  Java  >  Mengapakah saya mendapat ralat \'Mengabaikan suite sifir yang tidak tersedia\' dan \'tiada suite sifir yang sama\' apabila menggunakan `SSLContext.init` dengan tatasusunan KeyManager nol?

Mengapakah saya mendapat ralat \'Mengabaikan suite sifir yang tidak tersedia\' dan \'tiada suite sifir yang sama\' apabila menggunakan `SSLContext.init` dengan tatasusunan KeyManager nol?

Barbara Streisand
Barbara Streisandasal
2024-11-01 08:52:021016semak imbas

Why am I getting

Anda sedang memulakan SSLContext anda dengan tatasusunan KeyManager nol.

Pengurus kunci ialah yang mengendalikan sijil pelayan (di bahagian pelayan), dan inilah yang anda mungkin bertujuan untuk menetapkan apabila menggunakan javax.net.ssl.keyStore.

Walau bagaimanapun, seperti yang diterangkan dalam Panduan Rujukan JSSE, menggunakan null untuk parameter pertama tidak melakukan apa yang anda fikir ia lakukan :

Jika parameter KeyManager[] adalah batal, maka KeyManager kosong akan
ditakrifkan untuk konteks ini. Jika parameter TrustManager[] adalah batal,
pembekal keselamatan yang dipasang akan dicari untuk
pelaksanaan keutamaan tertinggi TrustManagerFactory, yang mana
TrustManager yang sesuai akan diperolehi. Begitu juga, parameter
SecureRandom mungkin batal, dalam hal ini, pelaksanaan
lalai akan digunakan.

KeyManager kosong tidak mengandungi sebarang sijil RSA atau DSA. Oleh itu, semua suite sifir lalai yang akan bergantung pada sijil sedemikian dilumpuhkan. Inilah sebabnya mengapa anda mendapat semua mesej "Mengabaikan suite sifir yang tidak tersedia" ini, yang akhirnya menghasilkan mesej "tiada suite sifir yang sama".

Jika anda mahu stor kunci anda digunakan sebagai stor kunci, anda akan perlu memuatkannya dan memulakan KeyManagerFactory dengannya:

KeyStore ks = KeyStore.getInstance("JKS");
InputStream ksIs = new FileInputStream("...");
cuba {

ks.load(ksIs, "password".toCharArray());

} akhirnya {

if (ksIs != null) {
    ksIs.close();
}

}

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory

    .getDefaultAlgorithm());

kmf.init(ks , "keypassword".toCharArray());

Gunakan kmf.getKeyManagers() sebagai parameter pertama untuk SSLContext.init().

Untuk dua parameter yang lain, kerana anda boleh dilihat dengan jelas tidak meminta pengesahan sijil pelanggan, anda harus meninggalkan pengurus amanah kepada nilai lalainya (null) dan bukannya menyalin/menampal pengurus amanah yang berpotensi menjadi punca kerentanan dan anda juga boleh menggunakan SecureRandom null lalai.

Atas ialah kandungan terperinci Mengapakah saya mendapat ralat \'Mengabaikan suite sifir yang tidak tersedia\' dan \'tiada suite sifir yang sama\' apabila menggunakan `SSLContext.init` dengan tatasusunan KeyManager nol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn