Невозможно установить соединение SSL, как мне исправить мой сертификат SSL?

Я пытаюсь wget на мой собственный ящик, и он не может быть внутренним адресом в wget (так говорит другой разработчик).

Когда я вижу, я получаю это:

wget http://example.com
--2013-03-01 15:03:30--  http://example.com/
Resolving example.com... 172.20.0.224
Connecting to example.com|172.20.0.224|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://www.example.com/ [following]
--2013-03-01 15:03:30--  https://www.example.com/
Resolving www.example.com... 172.20.0.224
Connecting to www.example.com|172.20.0.224|:443... connected.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Unable to establish SSL connection.

Я считаю, что это потому, что у меня не настроен сертификат правильно. Использование openssl:

openssl s_client -connect example.com:443
CONNECTED(00000003)
15586:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:588:

Хотя если я делаю ту же команду на другом сайте, она показывает весь сертификат.

Возможно, сертификат ssl никогда не был настроен в файле conf на Apache для этого домена?

Если так, что я должен указать в виртуальном хосте? Есть ли альтернатива, кроме указания --no-check-certificate потому что я не хочу этого делать?

8 ответов

Решение

SSL23_GET_SERVER_HELLO: неизвестный протокол

Эта ошибка возникает, когда OpenSSL получает что-то отличное от ServerHello в версии протокола это понимает с сервера. Это может произойти, если сервер отвечает простым (незашифрованным) HTTP. Это также может произойти, если сервер поддерживает только, например, TLS 1.2, а клиент не понимает эту версию протокола. Обычно серверы обратно совместимы, по крайней мере, с SSL 3.0 / TLS 1.0, но, возможно, этот конкретный сервер не является (по реализации или конфигурации).

Неясно, пытались ли вы пройти --no-check-certificate или нет. Я был бы довольно удивлен, если бы это сработало.

Простой тест заключается в использовании wget (или браузер) для запроса http://example.com:443 (Обратите внимание http://не https://); если это работает, SSL не включен на порту 443. Для дальнейшей отладки, используйте openssl s_client с -debug опция, которая прямо перед сообщением об ошибке выводит первые несколько байтов ответа сервера, который OpenSSL не смог проанализировать. Это может помочь определить проблему, особенно если сервер не отвечает с ServerHello сообщение. Чтобы увидеть, что именно ожидает OpenSSL, проверьте источник: ищите SSL_R_UNKNOWN_PROTOCOL в ssl/s23_clnt.c,

В любом случае, просмотр журнала ошибок apache также может дать некоторое представление.

В моем случае я не включил сайт "default-ssl". Только "000 по умолчанию" был указан в /etc/apache2/sites-enabled папка.

Включить сайт SSL в Ubuntu 14 LTS, Apache 2.4.7:

a2ensite default-ssl
service apache2 reload

Просто быстрая заметка (и возможная причина).

Вы можете иметь совершенно правильно VirtualHost настроить с _default_:443 и т.д. в вашем файле Apache .conf.

Но... Если есть даже один файл.conf с неправильными настройками, который также прослушивает порт 443, то это приведет к остановке всей системы SSL.

Поэтому, если вы уверены, что ваш файл.conf правильный, попробуйте отключить другие файлы.conf сайта в sites-enabled,

Есть несколько возможностей:

  1. На вашей рабочей станции нет сертификата корневого ЦС, используемого для подписи сертификата вашего сервера. Как именно вы это исправите, зависит от того, какую ОС вы используете, какой релиз и т. Д. (Я подозреваю, что это не связано)
  2. Ваш сертификат не установлен должным образом. Если ваш SSL-сертификат требует наличия промежуточного сертификата, а вы его не настроили, вы можете получить эти предупреждения.
  3. Вы уверены, что включили SSL на порту 443?

Для начала, чтобы устранить (3), что произойдет, если вы подключитесь к этому порту?

Если предположить, что это не так (3), то, в зависимости от ваших потребностей, вы можете проигнорировать эти ошибки и просто пройти --no-certificate-check. Возможно, вы захотите использовать обычный браузер (который обычно будет напрямую связывать корневые сертификаты) и посмотреть, насколько все будет хорошо.

Если вы хотите проверить сертификат вручную, отправьте более подробную информацию из openssl s_client выход. Или использовать openssl x509 -text -in /path/to/cert распечатать его на свой терминал.

У меня была эта проблема при настройке нового экземпляра EC2. Я не добавил HTTPS в свою группу безопасности, поэтому порт 443 не был открыт.

Для меня DNS-имя моего сервера было добавлено в /etc/hosts, и оно было сопоставлено с 127.0.0.1, что привело к

SL23_GET_SERVER_HELLO: неизвестный протокол

Удаление сопоставления моего реального имени DNS с 127.0.0.1 решило проблему.

Эта проблема произошла для меня только в особых случаях, когда я звонил на сайт от некоторых интернет-провайдеров,

Я настроил только ip v4 в конфигурации Apache VirtualHost, но некоторые маршрутизаторы используют ip v6, и когда я добавил ip v6 в конфигурацию apache, проблема решена.

Я встречаю этот же вопрос. Порт 443 не был открыт в Centos.

Проверьте порт 443 с помощью следующей команды:

sudo lsof -i tcp: 443

В первой строке /etc/httpd/conf.d/ssl.conf добавьте эти две строки:

LoadModule ssl_module modules/mod_ssl.so
Listen 443

Проблема, с которой я столкнулся, была в среде клиент-сервер. Клиент пытался подключиться через http-порт 80, но хотел, чтобы прокси-сервер сервера перенаправлял запрос на какой-либо другой порт, и данные были https. Таким образом, в основном запрашивая безопасную информацию через http. Итак, сервер должен иметь http порт 80, а клиент порта запрашивает, скажем, urla:1111\subB,

Проблема была в том, что сервер размещал это на каком-то другом порту urla:2222\subB; поэтому клиент пытался получить доступ через 1111, получал ошибку. Исправление номера порта должно решить эту проблему. В этом случае на номер порта 1111.

Другие вопросы по тегам