Я использовал 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
все исправили.