我试图在我的apache2 webserver上设置SSL,但似乎根本无法工作。
我按照教程用openssl创建了cert文件,并正确配置了/etc/apache2/sites-available/default-ssl.conf
。
每次我试图用https打开我的网站时,我的浏览器都因安全问题而拒绝连接。它说,我没有正确配置我的网站。
在我的/var/log/apache2/error.log
中,我收到警告,说我的服务器证书不包括与服务器名称相符的ID。
[Mon Apr 10 11:03:24.041813 2017] [mpm_prefork:notice] [pid 1222] AH00169: caught SIGTERM, shutting down
[Mon Apr 10 11:03:30.566578 2017] [ssl:warn] [pid 661] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.579088 2017] [ssl:warn] [pid 1194] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.592958 2017] [mpm_prefork:notice] [pid 1194] AH00163: Apache/2.4.25 (Raspbian) OpenSSL/1.0.2k configured -- resuming normal operations
[Mon Apr 10 11:03:31.593136 2017] [core:notice] [pid 1194] AH00094: Command line: '/usr/sbin/apache2'
你有什么办法来解决这个问题吗?谢谢!
好吧,我注意到这个帖子最近被浏览的频率很高,所以似乎很多人都面临着和我一样的问题。如果是这样,那么这可能对你有帮助。
我按照一个简单的步骤教程为我的网络服务器创建了一个SSL证书。就像外面的许多教程一样,我遵循的教程的结果是使用OpenSSL的自签名证书。是的,自签的,这就是问题所在。浏览器无法信任服务器,因为它的证书是由自己签署的。好吧,我也不会这么做......
证书必须由外部值得信赖的证书机构(CA)签署。因此,我偶然发现了Let's Encrypt,它为你做所有的工作,甚至更容易设置,最好的是:它是完全免费的。
删除你用OpenSSL创建的旧的ssl证书文件
在Debian上打开Backports以获得certbot客户端。你应该知道,这将为未完成的软件打开一个洞!只有在你知道你在做什么的时候才安装软件包。
echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list
sudo apt-get update
sudo apt-get install python-certbot-apache -t jessie-backports
sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
. . .
ServerName example.com
ServerAlias www.example.com
. . .
</VirtualHost>
sudo apache2ctl configtest
sudo systemctl restart apache2
sudo certbot --apache
Let's Encrypt的所有证书的有效期为3个月。要更新,你可以手动运行
sudo certbot renew
或将此服务作为一个cron job自动运行
sudo crontab -e
并输入以下一行,以调用每周一凌晨2:30的更新。
. . .
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
你可以按照这里的更详细的教程:https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8
这些不是错误--它们是警告。只要你定义了一个默认的ssl主机,并且证书上的通用名称与客户连接使用的主机名称相匹配,就很有可能使用不符合定义的服务器名称的证书运行mod_ssl。
在你的情况下,后者似乎不是真的。正如雅各布所说,你需要在创建CSR时*指定正确的主机名作为公共名称(或别名)。
要查看证书上目前有哪些名称:
openssl s_client -showcerts -connect ${HOSTNAME}:443
如果机器上安装了多个证书,并在同一IP地址上提供服务,那么:
openssl s_client -showcerts -connect ${HOSTIP}:443 -servername ${HOSTNAME}
(其中${...}的值是占位符,你应该用相关的值替换)。