Apache SSL:服务器证书不包括与服务器名称匹配的ID

我试图在我的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,它为你做所有的工作,甚至更容易设置,最好的是:它是完全免费的。

安装

  1. 删除你用OpenSSL创建的旧的ssl证书文件

  2. 在Debian上打开Backports以获得certbot客户端。你应该知道,这将为未完成的软件打开一个洞!只有在你知道你在做什么的时候才安装软件包。

echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list
  1. 更新你的linux系统
sudo apt-get update
  1. 安装certbot
sudo apt-get install python-certbot-apache -t jessie-backports
  1. 设置apache的ServerName和ServerAlias
sudo nano /etc/apache2/sites-available/000-default.conf
  1. 编辑apache配置文件

    . . .
    ServerName example.com
    ServerAlias www.example.com
    . . .
  1. 检查语法是否正确
sudo apache2ctl configtest
  1. 如果配置文件看起来没有问题,重新启动apache服务器
sudo systemctl restart apache2
  1. 使用certbot设置一个证书,并按照屏幕上的指示操作。
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

评论(2)

如果你没有看到其他SSL错误、 并且你已经尝试在httpd.conf文件中设置'LogLevel debug'、 这个错误信息也可能表明httpd.conf文件中缺少'Listen 443'。

评论(1)

这些不是错误--它们是警告。只要你定义了一个默认的ssl主机,并且证书上的通用名称与客户连接使用的主机名称相匹配,就很有可能使用不符合定义的服务器名称的证书运行mod_ssl。

在你的情况下,后者似乎不是真的。正如雅各布所说,你需要在创建CSR时*指定正确的主机名作为公共名称(或别名)。

要查看证书上目前有哪些名称:

openssl s_client -showcerts -connect ${HOSTNAME}:443

如果机器上安装了多个证书,并在同一IP地址上提供服务,那么:

openssl s_client -showcerts -connect ${HOSTIP}:443 -servername ${HOSTNAME}

(其中${...}的值是占位符,你应该用相关的值替换)。

评论(3)