Pernyataan Masalah
Mengintegrasikan modul luaran ke dalam aplikasi memerlukan akses SSL -laman web selamat menggunakan sijil yang ditandatangani sendiri. Kod sedia ada gagal kerana isu amanah dengan sijil. Cabarannya ialah untuk membolehkan aplikasi menerima sijil yang ditandatangani sendiri ini hanya untuk sambungan khusus ini, tanpa menjejaskan kepercayaan untuk sambungan lain atau mengubah suai stor sijil seluruh sistem.
Penyelesaian Optimum
Untuk mempercayai sijil yang ditandatangani sendiri secara terpilih untuk sambungan tertentu, buat kilang SSLSocket tersuai dan tetapkannya pada HttpsURLConnection sebelum mewujudkan sambungan:
... HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); conn.setSSLSocketFactory(sslFactory); conn.setMethod("POST"); ...
Mewujudkan Kilang SSLSocket
Untuk mencipta kilang SSLSocket, mulakan ia seperti berikut:
/* Load the keyStore that includes self-signed cert as a "trusted" entry. */ KeyStore keyStore = ... TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keyStore); SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(null, tmf.getTrustManagers(), null); sslFactory = ctx.getSocketFactory();
Memuatkan Stor Kunci
Muat stor kunci yang mengandungi sijil yang ditandatangani sendiri sebagai "kemasukan yang dipercayai":
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(trustStore, trustStorePassword); trustStore.close();
Kaedah Pemuatan Kedai Kunci Alternatif
Sebagai alternatif, gunakan alat kunci untuk mengimport sijil format PEM ke dalam stor kunci:
keytool -import -file selfsigned.pem -alias server -keystore server.jks
Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Kepercayaan Sijil Tersuai untuk Sambungan SSL Tertentu di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!