Yaws с SSL выдает ошибку SSL accept failed: timeout

Я использовал certbot для создания сертификата Let's encrypt для своего веб-сайта, но Yaws выдает ошибку SSL accept failed: timeout, когда я пытаюсь подключиться к нему (конечно, после истечения времени). Интересно, что это работает, когда я перенаправляю example.com на локальный IP-адрес сервера в файле hosts на моей машине и подключаюсь к example.com:8080, но не когда я подключаюсь к example.com без редактирования файла hosts или когда я подключаюсь с телефона через 4G. Вот файл конфигурации моего веб-сервера (это единственный файл конфигурации в conf.d):

<server www.example.com>
    port = 8080
    listen = 0.0.0.0
    docroot = /usr/share/yaws
    <ssl>
        keyfile = /etc/letsencrypt/live/example.com/privkey.pem
        certfile = /etc/letsencrypt/live/example.com/fullchain.pem
    </ssl>
</server>

Я убедился, что ключевой файл и сертификат доступны для чтения пользователю yaws. Рядом с ключевыми файлами находится README, который содержит следующее:

`privkey.pem`  : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem`     : will break many server configurations, and should not be used
                 without reading further documentation (see link below).
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

Так что я относительно уверен, что использовал правильный файл (другие выдавали мне такие ошибки, как badmatch и {tls_alert,"decrypt error"}). Я также пробовал тривиальные вещи, такие как запись https:// перед URL-адресом, но это не решило проблему, также все работает нормально, когда сервер работает без SSL. Версия Erlang, работающая на моем сервере, — Erlang/OTP 19. Кроме того, если неясно, домен на самом деле не example.com.

Кроме того, example.com перенаправляется через cname на examplecom.duckdns.org, если это имеет значение.

ОБНОВЛЕНИЕ:

Мой сервер прослушивал порт 8080, который был переадресован с внешнего порта 80, для соединений https, когда портом https по умолчанию является порт 443. Другой моей ошибкой было подключение к http://example.com вместо https://example.com. Переадресация внешнего порта 443 на внутренний порт 8443 и настройка yaws для прослушивания порта 8443 все исправили.


person user1792131    schedule 24.01.2017    source источник


Ответы (1)


Просто чтобы убедиться, что когда вы делаете что-то вроде curl -v https://example.com:8080, вы получаете тайм-аут, вот и все? (здесь https протокол и порт 8080 обязательны, конечно)

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

Не могли бы вы также предоставить вывод следующей команды:

echo -e "HEAD / HTTP/1.0\r\n\r\n" | openssl s_client -connect mysite.com:8080 -ign_eof 

И, наконец, какую версию Yaws вы используете? на какой ОС?

person capflam    schedule 24.01.2017
comment
Оказывается, я напортачил с переадресацией портов, исправив это, я решил проблему. Я отредактировал детали в своем исходном сообщении. - person user1792131; 25.01.2017