У меня есть клиентское приложение, предназначенное для Android. Приложения для Android основаны на XML и Java, так что наше приложение на стороне сервера для Windows. Проблема в том, что, поскольку мы сейчас работаем с Android, нам приходится иметь дело с магазином доверия. Есть ли способ добавить сертификат в хранилище доверия динамически?Как добавить сертификат в магазин доверия Android?
клиентского кода на стороне соединения:
InputStream stream = main.getResources().openRawResource(R.raw.keystore);
KeyStore trustStore;
try {
trustStore = KeyStore.getInstance("BKS");
trustStore.load(stream, "password".toCharArray());
} catch (Exception e) {
e.printStackTrace();
}
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
try{
clientSocket = (SSLSocket) factory.createSocket(address, port);
}catch (Exception ex){
ex.printStackTrace();
}
сервера код боковое подключение:
System.setProperty("javax.net.ssl.keyStore", System.getProperty("java.io.tmpdir") + "keystore_30290.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
try {
server = ((SSLServerSocket)factory.createServerSocket(config.port));
} catch (Exception e) {
e.printStackTrace();
System.out.println("Failed to successfully bind to port "+config.port+".");
System.exit(-1);
}
Вы создаете свой 'KeyStore', тогда вы ничего не делаете с ним. Попробуйте обернуть его в «TrustManagerFactory», используя его для 'init()' '' SSLContext' и получите 'SSLSocketFactory' из' SSLContext'. – CommonsWare
Можете ли вы подробно объяснить, как я это сделаю? Я не знаю, как работать с SSLContext. – Scottie9811