我已根据此处的说明在我的 LEMP 上使用自签名证书配置了 SSL:https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-16-04
唯一的例外是,default_server
我将无法使用,因为这最终将是一个多虚拟主机服务器
整个过程中没有任何失败,直到我尝试通过 HTTPS 浏览网站,它失败了,Secure Connection Failed
没有其他选择可以绕过。(我预计会出现基于自签名证书的错误,但在 Firefox 中通常有“高级”按钮可以绕过。)
我还验证了服务器是否通过以下方式打开了正确的端口netstat -ntlp
如果您想查看错误消息,可以在此处浏览该网站:https://www.azem.us/ (它不是生产性的,所以我并不担心它......)
运行时curl -I https://www.azem.us/
返回以下错误:curl: (35) gnutls_handshake() failed: The TLS connection was non-properly terminated.
真正让我困扰的是,任何配置的错误日志中都没有任何内容。
我该怎么做才能修复这个问题并能够使用 SSL 来提供这些网站?
笔记:来自真实 CA 的正确 SSL 证书也会发生这种情况
进展诊断
运行openssl s_client -connect www.azem.us:443
返回了一些有趣的信息:
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1474399712
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
我的想法可能有点错误,但这是否意味着证书在服务器上不存在?我可以验证它们确实存在,并且在我的nginx.conf
并带有:openssl s_client -verify www.azem.us:443
返回:
verify depth is 0
connect: Connection refused
connect:errno=111
每nmap从另一台机器
Host is up (0.0043s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
telnet
可以连接,但在尝试端口 443 时立即关闭连接
GIT REPO 配置:https://github.com/kpirnie/LEMP-Command
终于取得了一些进展...我改变了error_log
主 nginx.conf 的级别,现在在日志中收到错误:2016/09/21 08:22:58 [error] 29557#29557: *4 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: this.is.my.ip, server: 0.0.0.0:443
答案1
经过多次讨论和审议后,我发现了问题所在。
在我的主程序中,nginx.conf
我同时设置了listen
端口80
和443
一旦我删除它们并将它们添加到 VHost 配置中,它就开始工作了。