С сегодняшнего утра моему сертификату больше не доверяют на Android, и мое приложение больше не может подключаться:
Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:137)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93)
at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:591)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:807)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:781)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:770)
Если я попробую в Google Chrome (на ПК), проблем не возникнет, и сертификат будет доверенным, но если я попробую в браузере Chrome на Android, он сообщит мне, что сертификат не доверяет. Что я могу сделать?
android
ssl-certificate
Алексис
источник
источник
Ответы:
Возможно, в вашем файле сертификата отсутствует промежуточный сертификат. Если вы уже посещали другой веб-сайт, у которого есть тот же продавец сертификатов, промежуточный сертификат запоминается в вашем браузере. Это может быть не так - или даже лучше - не будет происходить с каждым посетителем вашего веб-сайта. Чтобы решить проблему отсутствия промежуточного сертификата в SSL-соединении, вам нужно будет добавить промежуточный сертификат в свой собственный файл сертификата.
У GoDaddy есть информация о промежуточных сертификатах (но лучшим источником всегда является ваш поставщик сертификатов): http://support.godaddy.com/help/article/868/what-is-an-intermediate-certificate
Однажды у меня была проблема с промежуточным сертификатом (также с Commodo), и мне пришлось объединить мой собственный файл сертификата с промежуточным CA для работы. После этого ошибок больше не было.
Инструкции по установке для каждого веб-сервера от Godaddy: http://support.godaddy.com/help/article/5346/installing-an-ssl-server-instructions?locale=en
А вот список наиболее распространенных руководств по установке от самих Commodo: https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make- мой собственный-связка-файл-из-CRT-файлов
В зависимости от того, какой веб-сервер вы используете, вам необходимо указать все сертификаты (сертификат домена, промежуточный и корневой) или объединить их в один (например, для Nginx) в следующем порядке:
Легкий способ сделать это в терминале SSH - набрать:
cat domainfile intermediatefile rootfile > targetfile
Инструмент проверки сертификатов
Если у вас возникнут дополнительные проблемы или вы не уверены в правильности сертификата, попробуйте онлайн-инструмент для проверки вашего сертификата SSL. Например: network4all.com/en/ssl+certificates/quickscan.
Поддержка SNI для Android 2.2 и ниже
Обратите внимание, что Android 2.2 (и, возможно, более ранняя версия) не поддерживает SNI, что позволяет без проблем работать с несколькими сертификатами SSL для разных имен хостов на одном IP-адресе. Спасибо @technyquist за предоставленную информацию. Пожалуйста, просмотрите этот SO-вопрос о SNI для получения дополнительной информации по этой проблеме.
источник
Вы должны создать пакет crt, тогда все будет хорошо. Вы получите три файла crt. Используйте их все! Если вы использовали только domain.crt, то на Android будет предупреждение, но не на ПК.
Я использую nginx. Я открыл имя_домена.crt, а затем открыл Positivesslca2.crt, выделил все и скопировал в конец имя_домена.crt. Затем откройте AddTrustExternalCARoot.crt, снова скопируйте в конец domain_name.crt. Затем установите domain_name.crt
работает хорошо.
источник
Добавив это здесь, это может кому-то помочь. У меня возникли проблемы с отображением всплывающего окна и ошибки недопустимого сертификата на Android.
У нас есть сертификат Comodo Extended Validation, и мы получили zip-файл, содержащий 4 файла:
Я объединил их в одну строку следующим образом:
cat www_mydomain_com.crt COMODORSAExtendedValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >www.mydomain.com.ev-ssl-bundle.crt
Затем я использовал этот файл пакета как свой
ssl_certificate_key
в nginx. Вот и все, теперь работает.Вдохновленный этой сутью: https://gist.github.com/ipedrazas/6d6c31144636d586dcc3
источник
cat *yourdomainname*.crt *yourdomainname*.ca-bundle > cert_chain.crt
С Comodo PositiveSSL мы получили 4 файла.
Когда мы следовали инструкциям на сайте comodo, мы получали сообщение об ошибке, что в нашем сертификате отсутствовал промежуточный файл сертификата.
В основном синтаксис
cat our_domain.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > domain-ssl_bundle.crt
источник
Я недавно столкнулся с этой проблемой с сертификатом Commodo, который я купил на ssls.com, и у меня было 3 файла:
имя-домена.ca-связка имя-домена.crt и имя -домена.p7b
Мне пришлось настроить его на Nginx, и я выполнил эту команду:
cat domain-name.ca-bundle domain-name.crt > commodo-ssl-bundle.crt
Затем я использовал Commodo-ssl-bundle.crt внутри конфигурационного файла Nginx и работал как шарм.
источник
У меня была такая же проблема, и моя проблема заключалась в том, что на устройстве не указаны правильная дата и время. Как только я исправил, что сертификату доверяют.
источник
У меня была такая же ошибка, потому что я не выдал сертификат Let's Encrypt для www .my-domain.com, только для my-domain.com
Выпускается также для www. и настройка виртуального хоста для загрузки сертификатов для www .my-domain.com перед перенаправлением на https://my-domain.com сделала свое дело.
источник
Я столкнулся с той же проблемой в Apache 2.2, когда пытался использовать несколько
SSLCertificateChainFile
директив для каждого промежуточного сертификата; вместо этого мне нужно было объединить все три в один файл. Исходя из GoDaddy, где они сделали это для меня как «связку», этот дополнительный шаг был для меня новым, но повторное чтение документации Apache сделало это очевидным.Стоит отметить, что эта директива устарела с Apache 2.4.8, поскольку теперь вы можете объединить все промежуточные звенья с фактическим сертификатом.
источник
Надеюсь, я не слишком поздно, это решение сработало для меня, я использую COMODO SSL, вышеуказанные решения кажутся недействительными со временем, мой веб-сайт lifetanstic.co.ke
Вместо того, чтобы обращаться в службу поддержки Comodo и получить файл пакета CA, вы можете сделать следующее:
Когда вы получаете новый сертификат SSL от Comodo (по почте), к ним прилагается zip-файл. Вам необходимо распаковать zip-файл и открыть следующие файлы в текстовом редакторе, например в блокноте:
AddTrustExternalCARoot.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt
Затем скопируйте текст каждого файла «.crt» и вставьте тексты выше друг друга в поле «Пакет центра сертификации (необязательно)».
После этого просто добавьте сертификат SSL, как обычно, в поле «Сертификат», нажмите кнопку «Автозаполнение по сертификату» и нажмите «Установить».
источник
С Godaddy CERTS вы , скорее всего , будет иметь
domain.key
,gd_bundle_something.crt
и (случайный буквенно - цифровая строка)4923hg4k23jh4.crt
Вам необходимо:
cat gd_bundle_something.crt >> 4923hg4k23jh4.crt
А затем на nginx вы будете использовать
ssl on; ssl_certificate /etc/ssl/certs/4923hg4k23jh4.crt; ssl_certificate_key /etc/ssl/certs/domain.key;
источник
У меня такая же проблема. Другой способ создать правильный файл .crt выглядит так:
Иногда вы получаете файл .PEM со всей цепочкой сертификатов внутри. Файл может выглядеть так ....
-----BEGIN RSA PRIVATE KEY----- blablablabase64private... -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- blablablabase64CRT1... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- blablablabase64CRT2... -----END CERTIFICATE----- ...
Если вы удалите весь
private key
раздел, у вас будет действующий связанный .crtисточник
Убедитесь, что вы также используете свой промежуточный crt (файл .crt с пакетом… некоторые провайдеры также называют его пакетом или сертификатом CA). затем в вашем ssl.conf,
SSLCertificateFile </path/for/actual/certificate> SSLCACertificateFile </path/for/actual/intermediate_certificate>
затем перезапустите свой веб-сервер: ex для использования apache:
sudo service httpd restart
источник
может быть, вам не хватает сертификата на вашем устройстве.
попробуйте посмотреть на этот ответ: Как установить доверенный сертификат CA на устройство Android? чтобы узнать, как установить ЦС на собственное устройство.
источник
У меня была похожая проблема, и я написал об этом подробную статью. Если у кого-то такая же проблема, смело читайте мою статью.
https://developer-blog.net/administration/ssl-zertifikat-installieren/
Это подробное описание проблемы на немецком языке.
источник