Подключение Android TLS и самоподписанный сертификат

Я пытаюсь подключиться к TLS-серверу node.js из моего приложения для Android. Естественно, это не так, потому что я использую самозаверяющий сертификат.

В любом случае я могу просто добавить сертификат в свое приложение и как-то доверять Android? Обратите внимание: я не использую HTTPS, это TLS через TCP-соединение.

Ответы

Ответ 1

После многого чтения, я придумал ответ.

Хорошее руководство здесь: http://nelenkov.blogspot.no/2011/12/using-custom-certificate-trust-store-on.html

Теперь, поскольку я не использую HTTPS, мне пришлось придумать несколько иной подход для получения чистого сокета SSL с новым хранилищем ключей:

KeyStore store = KeyStore.getInstance("BKS");
InputStream truststore = mainActivity.getResources().openRawResource(R.raw.trust);
store.load(truststore, "PASSWORD".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
tmf.init(store);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), new SecureRandom());
Socket socket = context.getSocketFactory().createSocket(ip, port);