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, вам нужно будет сделать это через браузер. Тогда вы получите только куки.
Если вы используете сертификат 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 – создание собственного доверительного менеджера на клиенте для принятия вашего сертификата
Создание самоподписанного сертификата – простой скрипт для создания ваших сертификатов
Затем я сделал следующее:
- Убедитесь, что сервер поддерживает https (sudo yum install -y mod24_ssl)
- Поместите этот скрипт в файл 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». Хотя это не очень хорошая практика, чтобы доверять всем сертификатам в программном обеспечении для производства, вам, возможно, придется это сделать в соответствии с ситуацией. Это решение разрешает исключение, вызванное «равноуровневой аутентификацией».
Но прежде чем мы перейдем к решению, я должен предупредить вас, что это не очень хорошая идея для производственного приложения. Это нарушит цель использования сертификата безопасности. Поэтому, если у вас нет веских оснований или если вы уверены, что это не вызовет каких-либо проблем, не используйте это решение.
Обычно вы создаете 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:
Источник