我使用 certbot 为我的网站生成 Let's encrypt 证书,但是SSL accept failed: timeout
当我尝试连接它时 Yaws 给了我一个错误(当然是在超时之后)。有趣的是,当我重定向example.com
到我机器上的主机文件中的服务器的本地 IP 地址并连接到时,它可以工作example.com:8080
,但当我在example.com
不编辑主机文件的情况下连接到或当我通过 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
and的错误{tls_alert,"decrypt error"}
)。我还尝试了一些琐碎的事情,比如https://
在 URL 之前写,但它没有解决问题,而且,当服务器在没有 SSL 的情况下运行时一切正常。我的服务器上运行的 Erlang 版本是 Erlang/OTP 19。此外,如果不清楚,域实际上不是example.com
.
此外,如果重要,则example.com
通过 cname 重定向到。examplecom.duckdns.org
更新:
当默认 https 端口为 port 时,我的服务器正在侦听8080
从外部 port 转发的 port 80
,用于 https 连接443
。我的另一个错误是连接到http://example.com
而不是https://example.com
. 将外部端口转发443
到内部端口8443
并配置 yaws 以侦听端口8443
修复了所有问题。