400 no required ssl certificate was sent

При посещении веб-сайта с установленным сертификатом безопасности (для шифрования данных по протоколам SSL/TLS), который браузер не может проверить, выдаются следующие предупреждения:

Internet Explorer:

«Сертификат безопасности этого веб-узла не был выпущен доверенным центром сертификации».

Firefox 3:

«(Имя сайта) использует недействительный сертификат безопасности. К сертификату нет доверия, так как сертификат его издателя неизвестен». Или: «(Имя сайта) использует недействительный сертификат безопасности. К сертификату нет доверия, так как он является самоподписанным».

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

Почему возникает ошибка SSL?

Браузеры обычно разрабатываются с уже встроенным списком доверенных поставщиков SSL сертификатов. К таким относятся всем известные компании Comodo, Thawte, Geotrust, Symantec, RapidSSL, GlobalSign и некоторые другие.

Тем не менее многие поставщики SSL сертификатов в этих списках отсутствуют, так как далеко не у всех есть договоренности с разработчиками веб-браузеров. При открытии сайта с SSL сертификатом, выданным одним из таких поставщиков, браузер выдает предупреждение, что Центр сертификации (ЦС), выдавший SSL сертификат, не является доверенным. То же происходит, когда на сайте установлен самоподписанный SSL сертификат. Internet Explorer выдает довольно общее предупреждение, тогда как Firefox 3 различает SSL сертификаты, выданные самим сервером (самоподписанные SSL сертификаты), и другие виды недоверенных сертификатов.

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

Самоподписанные SSL сертификаты

Возможной причиной подобной ошибки SSL может быть установленный на сервере самоподписанный SSL сертификат. Браузеры не принимают самоподписанные сертификаты, потому что они сгенерированы Вашим сервером, а не независимым центром сертификации. Чтобы определить, является ли Ваш SSL сертификат самоподписанным, посмотрите с помощью вышеназванного тестера, указан ли центр сертификации в поле Issuer. В случае самоподписанного SSL, в этой графе указывается название Вашего сервера и далее написано «Self-signed».

Решение: Купить SSL сертификат от доверенного центра сертификации.

Если после установки доверенного SSL сертификата на Вашем сервере нашелся самоподписанный, мы рекомендуем пересмотреть инструкции по установке и убедится, что Вы выполнили все нужные шаги.

Ошибка в установке SSL сертификата

Наиболее распространенной причиной ошибки типа «к сертификату нет доверия» — это неверная установка SSL на сервер (или серверы), на котором размещен сайт. С помощью все того же тестера SSL сертификатов Вы можете проверить, в этом ли причина проблемы. В блоке Certification Paths перечислены промежуточные и корневые сертификаты, установленные на Вашем сервере. Если в этом блоке указано «Path #X: Not trusted», значит у Вас ошибка в установке SSL сертификата и клиенту не удалось установить издателя Вашего SSL сертификата.

Решение: Чтобы устранить эту ошибку SSL, установите файл промежуточного сертификата на сервер, следуя инструкциям по установке для Вашего сервера. Промежуточные и корневые сертификаты Вы можете скачать в личном кабинете, вместе с Вашим основным SSL сертификатом.

После установки сертификата дополнительно убедитесь, что установка была произведена правильно. Если нужно, перезагрузите сервер.

Другие сообщения браузеров об ошибке SSL

Ниже приведены еще несколько предупреждающих сообщений, выдаваемых различными браузерами. Internet Explorer 6:

«Информация, которой Вы обмениваетесь с этим сайтом, не может быть просмотрена или изменена другими. Тем не менее, имеются замечания по сертификату безопасности сайта. Сертификат безопасности выдан компанией, не входящей в состав доверенных. Просмотрите сертификат, чтобы определить, следует ли доверять центру сертификации. Хотите продолжить?»

Internet Explorer 7:

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

The code and inputs

I’m trying to establish SSL connection and I’m getting 400 No required SSL certificate was sent response from the server. I’m doing this in a standard way like it’s described for example here; I run Java 8.

The sample of my code would be:

And here is the code that I use to send GET-request:

So to see debug messages — but there’s no errors/warnings/alerts there, the only thing is in the very end:

Which is the only thing I can treat as «abnormal» stuff (but I doubt it is).

I tried:

  • Different protocols disabling/enabling. For instance, forcing TLSv1 / TLSv1.1 for the socket with no success. To try that I wrapped my ssl factory into another factory which disables/enables certain protocols.
  • Disabling SSLv2Hello — but it doesn’t change the picture.
  • Install Oracle policies because before there were notices about some skipped algorithms and this installation «solved» that but the overall result is still same.
  • Setting System.setProperty(«sun.security.ssl.allowUnsafeRenegotiation», «true»); — lame, but also didn’t change a thing apart from message in the log Allow unsafe renegotiation: true (was «false» obviously)
  • Using KeyManagerFactory.getDefaultAlgorithm() as algorithm for KeyManagerFactory.getInstance() call. That raises exception Get Key failed: Given final block not properly padded and as far as I got the idea, it’s because of wrong algorithm used (read this). My default algorithm is: SunX509
  • Adding the certificate directly to my machine with keytool -importcert -file /path/to/certificate -keystore keystore.jks -alias «Alias» and then using this in my program via System.setProperty(«javax.net.ssl.trustStore»,»/path/to/keystore.jks»); with setting password: System.setProperty(«javax.net.ssl.trustStorePassword»,»mypassword»); (I set password in keytool after which confirmed trusted certificate with yes ); see this and this posts. No errors were raised with this — but issue persisted.
  • Adding the certificate to the global keystore (the one located in JAVA_PATH/jre/lib/security/cacerts ) with: keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias Alias -file /path/to/certificate (see this); looks like import operation was successful but it didn’t change the picture

There’s also notice in debug: ssl: KeyMgr: choosing key: 1 (verified: OK) — not sure if it’s relevant as I’m not SSL expert.

Unfortunately I can not see the server-side logs so I can’t observe the full picture.

Question

What can be the reason for this 400 error and how can I progress further (debug/try something else) ? Any tips would be much appreciated.

Очередь просмотра

Очередь

  • Удалить все
  • Отключить

YouTube Premium

Хотите сохраните это видео?

  • Пожаловаться

Пожаловаться на видео?

Выполните вход, чтобы сообщить о неприемлемом контенте.

Понравилось?

Не понравилось?

Текст видео

For some reason unknown to me, nginx won’t redirect «400 Bad Request — No required SSL certificate was sent» errors that are generated when accessing an SSL enabled site via an IP address.

In my case I’m tunneling a subdomain via CloudFlare through my home router and want to redirect any requests made using the public IP address.

Using the usual error_page directive just doesn’t work.

I spent quite a while trying to find out why error_page won’t work for this specific 400 Bad Request situation and couldn’t find an answer so instead I came up with this workaround.

Create a config file as shown in /etc/nginx/sites-enabled/:

Obviously you’ll need to reference your own cert files and it may well work without any at all, I haven’t tried.

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: