Https connection on android

Https Connection Android

Я делаю запись https и получаю исключение из исключения ssl. Не доверенный сертификат сервера. Если я делаю обычный http, он работает отлично. Должен ли я когда-либо принимать сертификат сервера?

ОТВЕТЫ

Ответ 1

Я предполагаю, но если вы хотите, чтобы произошло подлинное рукопожатие, вы должны сообщить андроиду о своем сертификате. Если вы хотите просто принять что бы то ни было, тогда используйте этот псевдокод, чтобы получить то, что вам нужно с HTTP-клиентом Apache:

FullX509TrustManager — это класс, который реализует javax.net.ssl.X509TrustManager, но ни один из методов не выполняет какую-либо работу, получите образец здесь.

Ответ 2

Это то, что я делаю. Он просто больше не проверяет сертификат.

Ответ 3

При попытке ответить на этот вопрос я нашел лучший учебник. При этом вам не нужно компрометировать проверку сертификата.

* Я не писал это, но благодаря Бобу Ли за работу

Ответ 4

Вы также можете посмотреть мою статью в блоге, очень похожую на crazybobs.

Это решение также не ставит под угрозу проверку сертификата и объясняет, как добавить доверенные сертификаты в собственное хранилище ключей.

Ответ 5

При разработке приложения, использующего https, ваш тестовый сервер не имеет действительного сертификата SSL. Или иногда веб-сайт использует самозаверяющий сертификат, или веб-сайт использует бесплатный сертификат SSL. Поэтому, если вы попытаетесь подключиться к серверу с помощью Apache HttpClient , вы получите исключение, указывающее, что «peer not authenticated». Хотя это не очень хорошая практика, чтобы доверять всем сертификатам в программном обеспечении для производства, вам, возможно, придется это сделать в соответствии с ситуацией. Это решение разрешает исключение, вызванное «равноуровневой аутентификацией».

Но прежде чем мы перейдем к решению, я должен предупредить вас, что это не очень хорошая идея для производственного приложения. Это нарушит цель использования сертификата безопасности. Поэтому, если у вас нет веских оснований или если вы уверены, что это не вызовет каких-либо проблем, не используйте это решение.

Обычно вы создаете HttpClient , как это.

HttpClient httpclient = new DefaultHttpClient();

Но вы должны изменить способ создания HttpClient.

Сначала вам нужно создать класс, расширяющий org.apache.http.conn.ssl.SSLSocketFactory .

Затем создайте такой метод.

Затем вы можете создать HttpClient .

HttpClient httpclient = getNewHttpClient();

Если вы пытаетесь отправить почтовый запрос на страницу входа в систему, остальная часть кода будет такой.

Вы получаете страницу html для InputStream. Затем вы можете делать все, что хотите, с возвращенной страницы html.

Но здесь вы столкнетесь с проблемой. Если вы хотите управлять сеансом с помощью файлов cookie, вы не сможете сделать это с помощью этого метода. Если вы хотите получить файлы cookie, вам нужно будет сделать это через браузер. Тогда только вы получите куки.

Ответ 6

Если вы используете сертификат StartSSL или Thawte, он не будет работать для Froyo и более старых версий. Вы можете использовать новую версию CAcert repository вместо того, чтобы доверять каждому сертификату.

Ответ 7

Ответ 8

Любой из этих ответов не работал у меня, поэтому вот код, который доверяет любым сертификатам.

Ответ 9

Я не знаю об особенностях Android для сертификатов ssl, но было бы разумно, что Android не будет принимать самоподписанный сертификат ssl с места в карьер. Я нашел это сообщение на форумах Android, которые, похоже, решают одну и ту же проблему: http://androidforums.com/android-applications/950-imap-self-signed-ssl-certificates.html

Ответ 10

Это известная проблема с Android 2.x. Я боролся с этой проблемой в течение недели, пока не столкнулся со следующим вопросом, который не только дает хороший запас проблемы, но также обеспечивает эффективное и эффективное решение, лишенное каких-либо дыр в безопасности.

Ответ 11

По какой-то причине решение, упомянутое выше для httpClient, не сработало для меня. В конце я смог заставить его работать, правильно переопределив метод при реализации настраиваемого класса SSLSocketFactory.

Читайте также:  Сборники через для андроид

Вот как он отлично работал у меня. Вы можете увидеть полный пользовательский класс и реализовать его в следующем потоке: http://blog.syedgakbar.com/2012/07/21/android-https-and-not-trusted-server-certificate-error/

Ответ 12

Я делаю этот класс и обнаружил

в вашем коде белый это

Ответ 13

Источники, которые помогли мне работать с моим самоподписанным сертификатом на моем сервере AWS Apache и подключиться к HttpsURLConnection с устройства Android:

SSL на примере aws — учебник по амазонке по ssl
Android Security с HTTPS и SSL — создание собственного менеджера доверия на клиенте для принятия вашего сертификата
Создание самоподписанного сертификата — простой script для создания ваших сертификатов

Затем я сделал следующее:

  • Убедитесь, что сервер поддерживает https (sudo yum install -y mod24_ssl)
  • Поместите этот script в файл create_my_certs.sh :
    Запустить bash create_my_certs.sh yourdomain.com

Поместите сертификаты на свое место на сервере (вы можете найти конфигурацию в /etc/httpd/conf.d/ssl.conf). Все это должно быть установлено:
SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile
SSLCACertificateFile

Перезапустите httpd с помощью sudo service httpd restart и убедитесь, что httpd запущен:
Остановка httpd: [OK]
Запуск httpd: [OK]

Скопируйте my-private-root-ca.cert в папку ресурсов проекта Android.

Создайте свой менеджер доверия:

CertificateFactory cf = CertificateFactory.getInstance( «X.509» ); InputStream caInput = context.getAssets(). Open ( «my-private-root-ca.cert.pem» ); Сертификат ca; пытаться < ca = cf.generateCertificate(caInput); >в конце концов

И сделайте соединение с помощью HttpsURLConnection:

Соединение HttpsURLConnection = (HttpsURLConnection) url.openConnection(); connection.setSSLSocketFactory(SSLContext.getSocketFactory());

Вот оно, попробуйте ваше https-соединение.

Ответ 14

Просто используйте этот метод как ваш HTTPClient:

Источник

Https Connection Android

Я делаю сообщение https, и я получаю исключение из исключения ssl. Не доверенный сертификат сервера. Если я делаю обычный http, он работает отлично. Должен ли я когда-либо принимать сертификат сервера?

Я предполагаю, но если вы хотите, чтобы действительно было рукопожатие, вы должны сообщить андроиду о своем сертификате. Если вы хотите просто принять что бы то ни было, тогда используйте этот псевдокод, чтобы получить то, что вам нужно с Apache HTTP Client:

FullX509TrustManager – это класс, который реализует javax.net.ssl.X509TrustManager, но ни один из методов фактически не выполняет какую-либо работу, получите образец здесь .

Это то, что я делаю. Он больше не проверяет сертификат.

Пытаясь ответить на этот вопрос, я нашел лучший учебник. При этом вам не нужно компрометировать проверку сертификата.

* Я не писал это, но благодаря Бобу Ли за работу

Вы также можете посмотреть мою статью в блоге, очень похожую на crazybobs.

Это решение также не ставит под угрозу проверку сертификатов и объясняет, как добавить доверенные сертификаты в собственное хранилище ключей.

При разработке приложения, использующего https, ваш тестовый сервер не имеет действительного сертификата SSL. Или иногда веб-сайт использует самозаверяющий сертификат, или веб-сайт использует бесплатный сертификат SSL. Поэтому, если вы попытаетесь подключиться к серверу с помощью Apache HttpClient , вы получите исключение, HttpClient , что «peer not authenticated». Хотя это не очень хорошая практика, чтобы доверять всем сертификатам в производственном программном обеспечении, вам может потребоваться сделать это в соответствии с ситуацией. Это решение устраняет исключение, вызванное «равноправным сверстником».

Но прежде чем мы перейдем к решению, я должен предупредить вас, что это не очень хорошая идея для производственного приложения. Это нарушит цель использования сертификата безопасности. Поэтому, если у вас нет веской причины, или если вы уверены, что это не вызовет никаких проблем, не используйте это решение.

Обычно вы создаете HttpClient как это.

HttpClient httpclient = new DefaultHttpClient();

Но вы должны изменить способ создания HttpClient.

Сначала вам нужно создать класс, расширяющий org.apache.http.conn.ssl.SSLSocketFactory .

Затем создайте такой метод.

Затем вы можете создать HttpClient .

HttpClient httpclient = getNewHttpClient();

Если вы пытаетесь отправить запрос на отправку на страницу входа в систему, остальная часть кода будет такой.

Вы получаете страницу html для InputStream. Затем вы можете делать все, что хотите, с возвращенной страницы html.

Но здесь вы столкнетесь с проблемой. Если вы хотите управлять сеансом с помощью файлов cookie, вы не сможете сделать это с помощью этого метода. Если вы хотите получить файлы cookie, вам нужно будет сделать это через браузер. Тогда вы получите только куки.

Читайте также:  Soundwire server для андроида

Если вы используете сертификат StartSSL или Thawte, он не будет работать для Froyo и более старых версий. Вы можете использовать репозиторий CAcert более новой версии вместо того, чтобы доверять каждому сертификату.

Ни один из них не работал для меня (усугубляется также ошибкой Thawte ). В конечном счете, я получил исправление с самоподписанным SSL-приемом на Android и пользовательская обработка SSL перестала работать на Android 2.2 FroYo

Любой из этих ответов не работал для меня, поэтому вот код, который доверяет любым сертификатам.

Я не знаю об особенностях Android для сертификатов ssl, но было бы разумно, что Android не будет принимать сам подписанный сертификат ssl с места в карьер. Я нашел этот пост на форумах андроидов, которые, похоже, решают одну и ту же проблему: http://androidforums.com/android-applications/950-imap-self-signed-ssl-certificates.html

Это известная проблема с Android 2.x. Я боролся с этой проблемой в течение недели, пока не столкнулся со следующим вопросом, который не только дает хороший исход проблемы, но также обеспечивает эффективное и эффективное решение, лишенное каких-либо дыр в безопасности.

Ошибка «Нет равных сертификатов» в Android 2.3, но НЕ в 4

По какой-то причине решение, упомянутое выше для httpClient, не сработало для меня. В конце я смог заставить его работать, правильно переопределив метод при реализации настраиваемого класса SSLSocketFactory.

Так оно и работало отлично для меня. Вы можете увидеть полный пользовательский класс и реализовать его в следующем потоке: http://blog.syedgakbar.com/2012/07/21/android-https-and-not-trusted-server-certificate-error/

Я делаю этот класс и

В тебе код белый это

Источники, которые помогли мне работать с моим самоподписанным сертификатом на моем сервере AWS Apache и подключиться к HttpsURLConnection с устройства Android:

SSL на примере aws – учебник amazon по ssl
Android Security с HTTPS и SSL – создание собственного доверительного менеджера на клиенте для принятия вашего сертификата
Создание самоподписанного сертификата – простой скрипт для создания ваших сертификатов

Затем я сделал следующее:

  1. Убедитесь, что сервер поддерживает https (sudo yum install -y mod24_ssl)
  2. Поместите этот скрипт в файл create_my_certs.sh :
    Запустить bash create_my_certs.sh yourdomain.com

Поместите сертификаты на свое место на сервере (вы можете найти конфигурацию в /etc/httpd/conf.d/ssl.conf). Все это должно быть установлено:
SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile
SSLCACertificateFile

Перезапустите httpd, используя sudo service httpd restart и убедитесь, что httpd запущен:
Остановка httpd: [OK]
Запуск httpd: [OK]

Скопируйте my-private-root-ca.cert в папку ресурсов проекта Android.

Создайте свой менеджер доверия:

CertificateFactory cf = CertificateFactory.getInstance («X.509»); InputStream caInput = context.getAssets (). Open («my-private-root-ca.cert.pem»); Сертификат ca; Try Наконец

И сделайте соединение с помощью HttpsURLConnection:

Соединение HttpsURLConnection = (HttpsURLConnection) url.openConnection (); connection.setSSLSocketFactory (SSLContext.getSocketFactory ());

Вот оно, попробуйте ваше соединение https.

Просто используйте этот метод как ваш HTTPClient:

Источник

Https Connection Android

Я делаю запись https и получаю исключение из исключения ssl. Не доверенный сертификат сервера. Если я делаю обычный http, он работает отлично. Должен ли я когда-либо принимать сертификат сервера?

ОТВЕТЫ

Ответ 1

Я предполагаю, но если вы хотите, чтобы произошло подлинное рукопожатие, вы должны сообщить андроиду о своем сертификате. Если вы хотите просто принять что бы то ни было, тогда используйте этот псевдокод, чтобы получить то, что вам нужно с HTTP-клиентом Apache:

FullX509TrustManager — это класс, который реализует javax.net.ssl.X509TrustManager, но ни один из методов не выполняет какую-либо работу, получите образец здесь.

Ответ 2

Это то, что я делаю. Он просто больше не проверяет сертификат.

Ответ 3

При попытке ответить на этот вопрос я нашел лучший учебник. При этом вам не нужно компрометировать проверку сертификата.

* Я не писал это, но благодаря Бобу Ли за работу

Ответ 4

Вы также можете посмотреть мою статью в блоге, очень похожую на crazybobs.

Это решение также не ставит под угрозу проверку сертификата и объясняет, как добавить доверенные сертификаты в собственное хранилище ключей.

Ответ 5

При разработке приложения, использующего https, ваш тестовый сервер не имеет действительного сертификата SSL. Или иногда веб-сайт использует самозаверяющий сертификат, или веб-сайт использует бесплатный сертификат SSL. Поэтому, если вы попытаетесь подключиться к серверу с помощью Apache HttpClient , вы получите исключение, указывающее, что «peer not authenticated». Хотя это не очень хорошая практика, чтобы доверять всем сертификатам в программном обеспечении для производства, вам, возможно, придется это сделать в соответствии с ситуацией. Это решение разрешает исключение, вызванное «равноуровневой аутентификацией».

Читайте также:  Android actionbar icon color

Но прежде чем мы перейдем к решению, я должен предупредить вас, что это не очень хорошая идея для производственного приложения. Это нарушит цель использования сертификата безопасности. Поэтому, если у вас нет веских оснований или если вы уверены, что это не вызовет каких-либо проблем, не используйте это решение.

Обычно вы создаете HttpClient , как это.

HttpClient httpclient = new DefaultHttpClient();

Но вы должны изменить способ создания HttpClient.

Сначала вам нужно создать класс, расширяющий org.apache.http.conn.ssl.SSLSocketFactory .

Затем создайте такой метод.

Затем вы можете создать HttpClient .

HttpClient httpclient = getNewHttpClient();

Если вы пытаетесь отправить почтовый запрос на страницу входа в систему, остальная часть кода будет такой.

Вы получаете страницу html для InputStream. Затем вы можете делать все, что хотите, с возвращенной страницы html.

Но здесь вы столкнетесь с проблемой. Если вы хотите управлять сеансом с помощью файлов cookie, вы не сможете сделать это с помощью этого метода. Если вы хотите получить файлы cookie, вам нужно будет сделать это через браузер. Тогда только вы получите куки.

Ответ 6

Если вы используете сертификат StartSSL или Thawte, он не будет работать для Froyo и более старых версий. Вы можете использовать новую версию CAcert repository вместо того, чтобы доверять каждому сертификату.

Ответ 7

Ответ 8

Любой из этих ответов не работал у меня, поэтому вот код, который доверяет любым сертификатам.

Ответ 9

Я не знаю об особенностях Android для сертификатов ssl, но было бы разумно, что Android не будет принимать самоподписанный сертификат ssl с места в карьер. Я нашел это сообщение на форумах Android, которые, похоже, решают одну и ту же проблему: http://androidforums.com/android-applications/950-imap-self-signed-ssl-certificates.html

Ответ 10

Это известная проблема с Android 2.x. Я боролся с этой проблемой в течение недели, пока не столкнулся со следующим вопросом, который не только дает хороший запас проблемы, но также обеспечивает эффективное и эффективное решение, лишенное каких-либо дыр в безопасности.

Ответ 11

По какой-то причине решение, упомянутое выше для httpClient, не сработало для меня. В конце я смог заставить его работать, правильно переопределив метод при реализации настраиваемого класса SSLSocketFactory.

Вот как он отлично работал у меня. Вы можете увидеть полный пользовательский класс и реализовать его в следующем потоке: http://blog.syedgakbar.com/2012/07/21/android-https-and-not-trusted-server-certificate-error/

Ответ 12

Я делаю этот класс и обнаружил

в вашем коде белый это

Ответ 13

Источники, которые помогли мне работать с моим самоподписанным сертификатом на моем сервере AWS Apache и подключиться к HttpsURLConnection с устройства Android:

SSL на примере aws — учебник по амазонке по ssl
Android Security с HTTPS и SSL — создание собственного менеджера доверия на клиенте для принятия вашего сертификата
Создание самоподписанного сертификата — простой script для создания ваших сертификатов

Затем я сделал следующее:

  • Убедитесь, что сервер поддерживает https (sudo yum install -y mod24_ssl)
  • Поместите этот script в файл create_my_certs.sh :
    Запустить bash create_my_certs.sh yourdomain.com

Поместите сертификаты на свое место на сервере (вы можете найти конфигурацию в /etc/httpd/conf.d/ssl.conf). Все это должно быть установлено:
SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile
SSLCACertificateFile

Перезапустите httpd с помощью sudo service httpd restart и убедитесь, что httpd запущен:
Остановка httpd: [OK]
Запуск httpd: [OK]

Скопируйте my-private-root-ca.cert в папку ресурсов проекта Android.

Создайте свой менеджер доверия:

CertificateFactory cf = CertificateFactory.getInstance( «X.509» ); InputStream caInput = context.getAssets(). Open ( «my-private-root-ca.cert.pem» ); Сертификат ca; пытаться < ca = cf.generateCertificate(caInput); >в конце концов

И сделайте соединение с помощью HttpsURLConnection:

Соединение HttpsURLConnection = (HttpsURLConnection) url.openConnection(); connection.setSSLSocketFactory(SSLContext.getSocketFactory());

Вот оно, попробуйте ваше https-соединение.

Ответ 14

Просто используйте этот метод как ваш HTTPClient:

Источник

Оцените статью