java sardine через ssl

#android #ssl #https #webdav #sardine

#Android #ssl #https #webdav #сардина

Вопрос:

я пытаюсь sardine создать клиент webdav, но он не подключается к моему https-серверу. в руководстве по использованию об этом говорится о ssl http://code.google.com/p/sardine/wiki/UsageGuide#SSL но я не знаю, как предоставить моему пользовательскому Http-клиенту мое хранилище ключей.

я получаю эту ошибку.

Исключение в потоке "main" javax.net.ssl.SSLPeerUnverifiedException: одноранговый узел не прошел проверку подлинности
в com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates (неизвестный источник)
 в org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
в org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
 в org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
 в org.apache.http.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java:149)
 в org.apache.http.impl.conn.AbstractPooledConnAdapter.open (AbstractPooledConnAdapter.java:121)
 в org.apache.http.impl.client.DefaultRequestDirector.TryConnect(DefaultRequestDirector.java:573)
 в org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
в org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
 в org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:941)
 в org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:919)
 в com.googlecode.sardine.impl.SardineImpl.execute(SardineImpl.java:684)
 в com.googlecode.sardine.impl.SardineImpl.list(SardineImpl.java:339)
 в com.googlecode.sardine.impl.SardineImpl.getResources(SardineImpl.java:326)
 в sardine.main(sardine.java:15)

Как я могу настроить?

Комментарии:

1. Мне также не повезло с реализацией Sardine для Android через SSL. Я тоже получаю «ошибку однорангового сертификата». У меня есть хранилище ключей в формате BouncyCastle (BKS), которое теперь необходимо вместо JKS, которые я прочитал. Он сохраняется в каталоге res/raw/. Кажется, я не могу понять, где переопределить HTTP-КЛИЕНТ, который был упомянут. Похоже, что библиотека использует АБСТРАКТНЫЙ HTTP-КЛИЕНТ. Где можно было бы переопределить HTTP-КЛИЕНТ? Есть еще какие-нибудь примеры? Редактировать: для чего это стоит. Я заметил, что тестирование с помощью эмулятора никогда не работало, но когда я делал это на реальных устройствах, я был в восторге.

Ответ №1:

Довольно простой пример (для http://mydrive.net и Linux):

  • скачать сертификат с mydrive.net с помощью OpenSSL
    • openssl s_client -подключение webdav.mydrive.ch:443 > mydrive.net.crt
  • удалите все данные, кроме между НАЧАЛОМ и КОНЦОМ (включительно) в файле mydrive.net.crt
  • создайте новое хранилище ключей:
    • keytool -genkey -фиктивный псевдоним -keyalg RSA -хранилище ключей /etc/ssl/certs/java/yourKeyStore.jks -размер ключа 2048
    • используйте безопасную парольную фразу
    • Удалить неиспользуемый сгенерированный сертификат
      • keytool -удалить -фиктивный псевдоним -хранилище ключей /etc/ssl/certs/java/yourKeyStore.jks
  • Импортировать сертификат из mydrive.net
    • keytool -импорт -trustcacerts -псевдоним mydrive.net -хранилище ключей /etc/ssl/сертификаты/java/kyourKeyStore.jks -file ./mydrive.net.crt
  • Проверка импорта:
    • keytool -list -хранилище ключей /etc/ssl/сертификаты/java/yourKeyStore.jks
  • добавить параметр Java для хранилища ключей
    • JAVA_OPTS=»$JAVA_OPTS -Djavax.net.ssl.trustStore=/etc/ssl/certs/java/yourKeyStore.jks»
  • Перезапустите JVM

Теперь вы можете использовать Sardine без методов перезаписи или переопределения. Просто используйте

 Sardine sardine = SardineFactory.begin(username, password);
List<DavResource> resources = sardine.list("https://webdav.mydrive.ch/");
 

Совет:
Убедитесь, что вы используете правильный сертификат. Например, у MyDrive есть несколько сертификатов

Ответ №2:

Храните хранилища ключей как необработанные ресурсы, загружайте их и используйте для инициализации SSLSocketFactory. Вы можете использовать его для создания экземпляра HttpClient . Чтобы подключиться к Sardine, вам необходимо переопределить метод, который они указывают в Wiki, чтобы вернуть ваш настроенный HttpClient экземпляр.

Комментарии:

1. Прочитайте SSLSocketFactory, на который я ссылался выше, в нем есть информация о создании и использовании хранилищ ключей.

2. Решаемая с помощью этого: javaskeleton. blogspot.com/2010/07 /…

3. Это плохо, плохо, плохо. Я бы хотел, чтобы люди перестали писать о том, чего они не понимают. Этот код будет принимать любые и все сертификаты и фактически аннулирует SSL. Возможно, вы отправляете свои данные на вредоносный сервер и никогда об этом не узнаете. Создайте свое собственное хранилище доверия и установите его правильно.