我正在尝试在我的 apache2 网络服务器上设置 SSL,但似乎根本不起作用。
我已按照教程使用 openssl 创建证书文件并/etc/apache2/sites-available/default-ssl.conf
正确配置。
每次我尝试使用 https 打开网站时,我的浏览器都会因安全问题而拒绝连接。它说我没有正确配置我的网站。
在 my 中,/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'
您对如何解决这个问题有什么想法吗?谢谢您的关注!
答案1
好吧,我注意到这篇文章最近被浏览得很频繁,所以似乎很多人都面临着和我一样的问题。如果是这样,那么这可能对您有帮助。
我按照简单的分步教程为我的网络服务器创建了 SSL 认证。像许多教程一样,我遵循的教程的结果是使用 OpenSSL 的自签名证书。是的自签名,这就是问题所在。浏览器无法信任服务器,因为它的证书是自己签名的。嗯,我也不会做...
证书必须由外部值得信赖的证书颁发机构 (CA) 签名。所以我偶然发现让我们加密它可以为您完成所有工作,并且更容易设置,而且最好的是:它完全免费。
安装
1) 删除使用 OpenSSL 创建的旧 ssl 证书文件
2) 打开向后移植以在 Debian 上获取 certbot 客户端。您应该知道,这将为未完成的软件打开一个漏洞!仅当您了解自己在做什么时才安装软件包。
echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list
3)更新你的Linux系统
sudo apt-get update
4)安装证书机器人
sudo apt-get install python-certbot-apache -t jessie-backports
5)设置apache ServerName和ServerAlias
sudo nano /etc/apache2/sites-available/000-default.conf
6) 编辑apache配置文件
<VirtualHost *:80>
. . .
ServerName example.com
ServerAlias www.example.com
. . .
</VirtualHost>
7) 检查语法是否正确
sudo apache2ctl configtest
8) 如果配置文件看起来没问题,请重新启动 apache 服务器
sudo systemctl restart apache2
9) 使用 certbot 设置证书并按照屏幕上的说明进行操作。
sudo certbot --apache
更新
Let's Encrypt 的所有证书的有效期为 3 个月。要更新您可以手动运行
sudo certbot renew
或者将此服务自动化为 cron 作业
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
就我而言,我已通过在每个相关域的 apache ssl 配置文件中替换来解决此问题:
ServerName mydomain.com
ServerAlias www.mydomain.com
经过 :
ServerName www.mydomain.com
ServerAlias mydomain.com
因为我的证书适用于“www.mydomain.com”而不是“mydomain.com”
完整的阿帕奇文件:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName www.mydomain.com
ServerAlias mydomain.com
DocumentRoot /home/mydomain.com/public_html
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|ico|png)$ \ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ \no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
<Directory />
Options +FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/mydomain.com/public_html>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
答案3
如果您没有看到其他 SSL 错误,并且您已尝试在 httpd.conf 文件中设置“LogLevel debug”,则此错误消息还可能表明 httpd.conf 文件中缺少“Listen 443”。
答案4
我最近遇到了这个问题,当时我的自签名证书过期了。我用谷歌搜索并刚刚复制了从一个网站创建新证书的命令。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/apache2/ssl/apache.crt
在我的 apache 配置文件中:/etc/apache2/sites-available/default-ssl.conf。证书文件和密钥文件是指以下文件名。
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
因此,在我的例子中看到的错误更容易修复,只需在创建 ssl 证书时提供证书密钥文件的正确位置即可。
所以,这是我应该正确使用和输入的命令。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt