我有一些正在运行的 Ubuntu 16.04 服务器,并在 apache2 中设置了一个使用(或应该使用)ssl 的 vhost。
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName my.domain.name.de
DocumentRoot /var/www/mysslsite
<Directory /var/www/mysslsite>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mysite.ssl.error.log
CustomLog ${APACHE_LOG_DIR}/mysite.ssl.access.log combined
</VirtualHost>
</IfModule>
我做到了不是启用标准 sites-available/default-ssl.conf。
我现在可以浏览https://my.domain.name.de并且它要求在 Firefox 中添加一些例外情况,如果我没有购买任何证书,这完全正常。
但我想知道它应该在哪里使用 /etc/apache2/ssl/ 目录中的证书。我找不到任何配置来指示使用它。我一直在想它会使用 /etc/ssl 文件夹中的某些内容。
或者我可能没有正确激活 SSL?
答案1
根据一些手册,SSL 证书文件必须放在下/etc/apache2/ssl/
,但它们也可以放在不同的文件夹中,具体取决于您自己的配置。
要通过 HTTPS 访问您的网站,您必须启用SSLEngine
并提供有效的SSL 证书。
为此你应该使用OpenSSL命令行工具来生成您自己的证书。然后您需要在任何提供商处验证证书,例如科摩多,星型SSL、您当地的 DNS 提供商等。通常他们会提供几个月的免费证书。关于这种证书生成方式,您可以查看以下指南:14.04和16.04。
要在您的网站上启用 HTTPS,您需要从证书颁发机构 (CA) 获取证书(一种文件类型)。Let's Encrypt 是一家 CA。为了从 Let's Encrypt 获取您网站域名的证书,您必须证明对该域名的控制权。使用 Let's Encrypt,您可以使用使用 ACME 协议的软件来执行此操作,该软件通常在您的网络主机上运行。
在此阶段,我建议您使用 Let's Encrypt。那么让我们开始吧。
第一- 安装 Let's Encrypt:
sudo apt install python-letsencrypt-apache
第二- 生成证书。要生成与 Apache 兼容的 SSL 证书,只需输入: 。此命令将启动交互式对话(您必须在其中填写您网站的个人数据)并根据您现有的文件letsencrypt --apache
生成文件。HTTPS.conf
HTTP.conf
您可以使用一些附加参数,例如letsencrypt --apache certonly
将执行与上述相同的操作但不会生成HTTPS.conf
文件。
您还可以输入所有必要的参数以避免对话。根据问题中提供的信息,我们的命令应该是这样的:
sudo letsencrypt --apache certonly --rsa-key-size 4096 --email [email protected] -d my.domain.name.de
假设您选择最后一种方法。该命令将生成所有必要的证书文件,并将它们放置在文件夹中/etc/letsencrypt/archive/my.domain.name.de/
。这些文件还将符号链接到文件夹中/etc/letsencrypt/live/my.domain.name.de/
。这些符号链接将来会自动更新,因此我们将使用它们。
第三- 配置(手动)您的 HTTPS VirtualHost。根据上述内容,配置文件应如下所示:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName my.domain.name.de
DocumentRoot /var/www/mysslsite
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/my.domain.name.de/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.name.de/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/my.domain.name.de/chain.pem
<Directory /var/www/mysslsite>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mysite.ssl.error.log
CustomLog ${APACHE_LOG_DIR}/mysite.ssl.access.log combined
</VirtualHost>
</IfModule>
第四-a2ensite
新的 VirtualHost,以防万一a2enmod ssl
,然后重新启动 Apache。就是这样。我希望现在您可以对您的网站进行 HTTPS 访问。
第五- 更新您的证书。为此,您可以编辑根的定时任务并添加一个将尝试letsencrypt renew
证书的作业,例如每周日凌晨 3:00。sudo crontab -e
在底部输入并添加以下行:
0 3 * * 0 /usr/bin/letsencrypt renew >> /var/log/letsencrypt-renew.log 2>&1
笔记:
letsencrypt
/python-letsencrypt-apache
适用于 Ubuntu 16.04 及以上版本,对于之前的版本,certbot
它几乎是相同的 - 来自Ubuntu 手册。如果您有少数虚拟主机,您可以使用此语法来生成它们的证书(全部一起):
sudo letsencrypt --apache certonly --rsa-key-size 4096 --email [email protected] -d my.domain.name-1.de -d my.domain.name-2.de -d my.domain.name-3.de
certbot.eff.org- 使用 EFF 的 Certbot 自动在您的网站上启用 HTTPS,部署 Let's Encrypt 证书。
以上答案基于这个,其中提供了有关 Apache 的 VH 配置的更多详细信息。
请在此处阅读如何以及为什么您应该在 2019 年 2 月 13 日之前更新您的letsecrypt
/ certbot
:无法在 Ubuntu Bionic 上升级 certbot