我有一个域名,例如我将使用 test.nl。
让 wordpress 在主域上作为虚拟主机运行。让 wikimedia 在子域上作为虚拟主机运行:wiki.test.nl
现在我有另一个子域(vnc.test.nl),我想使用自签名证书保护它,以确保 VNC 连接的安全。
端口已正确转发。
虚拟主机文件:
<VirtualHost *:80>
ServerName vnc.test.nl
Redirect permanent / https://vnc.test.nl/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName vnc.test.nl
DocumentRoot /var/www/vnc.test.nl
DirectoryIndex index.html index.php index.pl index.cgi
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
ProxyPreserveHost On
ProxyPass / http://10.0.6.4:6080/
ProxyPassReverse / http://10.0.6.4:6080/
</VirtualHost>
</IfModule>
我已经使用本指南了解如何使用 SSL 保护网站安全。https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04
我在浏览器中收到 SLL_PROTOCOL_ERROR。在 apache 错误日志中有以下内容:
[Tue Nov 14 13:04:05.476933 2017] [ssl:warn] [pid 2128] AH01906: vnc.test.nl:443:0 server certificate is a CA certificate (BasicConstraints: CA ==
TRUE !?)
[Tue Nov 14 13:04:05.497306 2017] [ssl:warn] [pid 2132] AH01906: vnc.test.nl:443:0 server certificate is a CA certificate (BasicConstraints: CA ==
TRUE !?)
[Tue Nov 14 13:04:05.499219 2017] [mpm_prefork:notice] [pid 2132] AH00163:
Apache/2.4.25 (Ubuntu) OpenSSL/1.0.2g configured -- resuming normal
operations
[Tue Nov 14 13:04:05.499241 2017] [core:notice] [pid 2132] AH00094: Command
line: '/usr/sbin/apache2'
然后我尝试了 CertBot,但我得到的唯一结果是:
Server only speaks HTTP, not TLS
即使我删除了虚拟主机文件中的一个端口 80 上的监听。
我该如何纠正 ssl 协议错误?
答案1
似乎您安装了错误的文件作为服务器证书。您可以使用 读取证书的内容openssl x509 -in server.crt -text
。(如果它不是pem
格式,您必须尝试使用 参数-inform
。)
检查您server.crt
从 CA 获得的其他文件。正确的证书必须vpn.test.nl
列为主题备用名称和/或作为 CN。(如今证书应始终包含主题备用名称。
如果你测试正确的文件,应该会出现以下几行之一:
...
Subject: CN=vpn.test.nl
...
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:vpn.test.nl
...
附言:您应该编辑您的问题并删除您的真实域名……甚至从日志中删除。