Загрузка сертификата Android и SSL - PullRequest
1 голос
/ 12 марта 2012

Я делаю приложение для Android 2.2 SDK и в настоящее время отправляю данные по Wi-Fi из одного экземпляра приложения в другой (другое мобильное устройство) через Java-сокет, и он отлично работает.Я хотел добавить шифрование, чтобы данные не отправлялись в виде открытого текста.

Я использовал

SSLServerSocketFactory factory = (SSLServerSocketFactory) 
SSLServerSocketFactory.getDefault();
server = (SSLServerSocket) factory.createServerSocket(incomingConnectionPort);
while(!Thread.interrupted()) {
    SSLSocket incoming = (SSLSocket) server.accept();
     .......
 }

Для создания SSLServer в одной точке и

SocketAddress sockAddress = new InetSocketAddress(address.getIP(), address.getPort());
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
connectionSocket = (SSLSocket) factory.createSocket();
connectionSocket.connect(sockAddress, 6000);

в другой точке для подключения к серверу.После некоторого поиска я также создал самозаверяющий сертификат с чем-то вроде

keytool -keystore mykeystore -storepass mypass -genkey -keyalg RSA -alias mycert

и добавил это в мой код

System.setProperty("javax.net.ssl.keyStore", "mykeystore");
System.setProperty("javax.net.ssl.keyStorePassword","mypass");
//add cert as trusted
System.setProperty("javax.net.ssl.trustStore","mykeystore");
System.setProperty("javax.net.ssl.trustStorePassword","mypass");

, но это явно не работает в Android по причинамя читаю здесь http://groups.google.com/group/android-developers/browse_thread/thread/16c7eb8e65451d27/26edb971d390e2a3?pli=1.

Я проверил код (решение?) Здесь https://github.com/k9mail/k-9/blob/master/src/com/fsck/k9/mail/store/TrustManagerFactory.java, но я не могу точно определить, что делать, чтобы импортировать сертификат.

Не могли бы вы дать мне несколько советов о том, как правильно импортировать сертификат в хранилище ключей?

Я также был бы признателен за альтернативный способ безопасной передачи данных через сокет TCP в Java (неспецифичен для Android, так как приложение, которое я создаю, будет подключаться и к немобильным устройствам).

Спасибо и, пожалуйста, извините за любые ошибки, которые я сделал.Я еще учусь.:)

1 Ответ

2 голосов
/ 12 марта 2012

SSL - плохой выбор для клиент-клиентских соединений.SSL требует, чтобы на сервере было статическое имя DNS (или IP), что не соответствует данному сценарию.

Вам следует использовать обычное сокетное соединение и разработать собственный зашифрованный протокол.Детали зависят от того, какие данные вы хотите передать и к каким требованиям безопасности это относится.

...