it-swarm.com.ru

Невозможно установить соединение 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, потому что я не хочу этого делать?

54
meder omuraliev

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 также может дать некоторое представление.

84
Daniel Roethlisberger

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

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

a2ensite default-ssl
service Apache2 reload
18
angularsen

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

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

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

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

9
Nostalg.io

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

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

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

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

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

4
Dave S.

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

2
Steve Ellis

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

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

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

1
Kirill Oficerov

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

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

Sudo lsof -i tcp: 443

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

LoadModule ssl_module modules/mod_ssl.so
Listen 443
0
GeekHades