我使用certbot为我的网站生成一个Let的加密证书,但是当我尝试连接到它时,Yaws给我一个SSL accept failed: timeout
错误(在它超时之后)。有趣的是,当我将example.com
重定向到我的机器上的hosts文件中的服务器的本地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
和{tls_alert,"decrypt error"}
等错误。我也尝试了一些琐碎的事情,比如在URL之前编写https://
,但它没有解决问题,而且,当服务器在没有SSL的情况下运行时,一切正常。在我的服务器上运行的Erlang版本是Erlang / OTP 19.此外,如果不清楚,该域实际上不是example.com
。
此外,如果重要,example.com
会通过cname重定向到examplecom.duckdns.org
。
更新
当默认https端口为端口8080
时,我的服务器正在侦听从外部端口80
转发的端口443
,用于https连接。我的另一个错误是连接到http://example.com
而不是https://example.com
。将外部端口443
转发到内部端口8443
并配置偏航以侦听端口8443
,修复了所有内容。
答案 0 :(得分:0)
为了确保理解,当您执行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
最后,你在运行哪个版本的雅司?哪个操作系统?