0

我使用 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.

所以我相对确定我使用了正确的文件(其他文件给了我类似badmatchand的错误{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修复了所有问题。

4

1 回答 1

0

只是为了确保理解,当你做类似的事情时curl -v https://example.com:8080,你会超时,就这样吗?(这里的https协议和端口8080当然是强制性的)

当在 SSL vhost 上收到未加密的请求时,可以触发接受期间的 SSL 超时。

您能否提供以下命令的输出:

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

最后,您运行的是哪个版本的 Yaws?在哪个操作系统上?

于 2017-01-24T20:59:32.257 回答