我设法从LetsEncrypt提取了一个新证书。我的VirtualHost配置设置为:
<VirtualHost *:80>
ServerName example.com
Redirect 301 / https://example.com/
</VirtualHost>
<VirtualHost *:443>
Servername example.com
DocumentRoot /var/www/example.com/wav
ErrorLog /var/log/apache2/example.com/www/error.log
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
尝试通过openssl验证这一点时
openssl s_client -connect example.com -port 443
我得到以下信息:
CONNECTED(00000003)
140229655213824:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:252:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 202 bytes
Verification: OK
---
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:
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1541086087
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
因此,握手似乎可以,但是证书没有发送。
值得指出的是,Apache日志不报告任何错误-只是通常的-“正在启动/正在关闭”消息。 apache2ctl configtest
未报告任何问题。
答案 0 :(得分:0)
因此,握手似乎可以,但是证书没有发送。
握手不正确。客户端已发送ClientHello开始握手,但没有收到任何有用的回复:
|- ClientHello
---
SSL handshake has read 5 bytes and written 202 bytes
---
|- nothing useful from server
我不知道它在5个字节中返回了什么,但它看起来不像TLS(对于TLS消息来说太短了)。从您显示的配置部分中可能看不到某些服务器配置错误。也可能是一些中间盒(防火墙,负载平衡器...)损坏了连接。可能还因为您未连接到预期的服务器(即example.com
无法解析到您的实际服务器)。
我建议您首先检查服务器本身(即localhost
),如果此方法有效,请使用支票远离服务器。您可能还进行了数据包捕获,并查看了客户端接收到的5个字节中的内容。
答案 1 :(得分:0)
我也遇到了同样的错误。建议您在本地测试https连接,将域名添加到/ etc / hosts,例如: 127.0.0.1 yourdomain.com 为了防止数据包不外出。
然后使用“链接”在本地环境中测试https连接,如果没有问题,则是由ISP防火墙问题或设置引起的,我终于找到了本地https连接,并将问题扔给了ISP以最终解决此问题,祝你好运!
答案 2 :(得分:0)
也为ssl设置文件类型,这可以正常工作 看到“文件匹配”部分?如果缺少该内容,则会看到此错误。
SSLEngine on
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
SSLCertificateFile /etc/letsencrypt/live/mysite.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
#SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5
#SSLCipherSuite "AES256-SHA"
SSLCipherSuite HIGH:!aNULL:!MD5
答案 3 :(得分:0)
只为那些遇到相同问题的人分享。
这是我在带有Apache的Ubuntu 20中的经验
我正在SITES-AVAILABLE文件夹中编辑default-ssl.conf,但是什么也没发生。无论我做什么,上面的相同错误都会重复。
我将默认的ssl.conf从可用的站点复制到了SITES-ENABLED文件夹中,没有IfModule mod_ssl.c标记并且已解决了问题。
希望此信息对某人有帮助。
谢谢
答案 4 :(得分:0)
似乎apache的默认*:80 HTTP处理程序还将在443上侦听不匹配的VirtualHost IP,包括环回。
例如,我的计算机具有NAT ip 192.168.32.5 NAT,当然还有127.0.0.1环回。如果我的站点conf使用
答案 5 :(得分:0)
我遇到了同样的问题。我的 example.com.conf
文件确实正确设置了 HTTPS,但我的 000-default.conf
文件没有。我似乎忘记了包含 SSL 证书并为我的 000-default.conf
打开 SSL 引擎,但在我修复之后,它运行良好。
我添加到 000-default.conf
的代码:
SSLEngine On
SSLCertificateFile /etc/ssl/example.com/domain.cert.pem
SSLCertificateKeyFile /etc/ssl/example.com/private.key.pem