在 Ubuntu 上为 Apache2 开启 HTTPS,通常分为两种情况:生产环境(使用权威机构颁发的免费证书,如 Let’s Encrypt) 和 测试/内网环境(使用自签名证书)。
以下是详细步骤:
这种方法最简单,Certbot 工具会自动帮你申请证书并配置 Apache。
首先更新软件包列表并安装 Certbot 及其 Apache 插件:
sudo apt update
sudo apt install certbot python3-certbot-apache
运行以下命令,将 yourdomain.com 替换为你自己的域名(请确保域名已解析到你的服务器 IP):
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
A 同意。2(Redirect,强制 HTTPS)。Certbot 会自动修改 Apache 配置并重启服务。
Let’s Encrypt 证书有效期为 90 天,Certbot 会自动设置定时任务续期。你可以测试一下:
sudo certbot renew --dry-run
如果你没有域名,或者只是想在局域网内测试 HTTPS,可以生成自签名证书。浏览器会提示“不安全”,但连接本身是加密的。
sudo a2enmod ssl
sudo mkdir -p /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/apache2/ssl/apache.key \
-out /etc/apache2/ssl/apache.crt
Apache 自带了一个 SSL 配置模板,我们复制一份来修改:
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/your-site-ssl.conf
sudo nano /etc/apache2/sites-available/your-site-ssl.conf
在文件中修改以下关键内容:
<VirtualHost *:443>
ServerName your_server_ip_or_domain
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
# 其他配置...
</VirtualHost>
sudo a2ensite your-site-ssl.conf
sudo systemctl restart apache2
无论使用哪种方法,都需要确保服务器的防火墙允许 443 端口(HTTPS)的流量。
如果你使用的是 UFW 防火墙:
# 允许 Apache 全量流量(包含 80 和 443)
sudo ufw allow 'Apache Full'
# 或者直接允许 443 端口
sudo ufw allow 443/tcp
检查防火墙状态:sudo ufw status
在浏览器中输入:https://你的服务器IP或域名
如果你希望用户访问 http:// 时自动跳转到 https://,可以在 80 端口的虚拟主机配置中添加重定向:
编辑 /etc/apache2/sites-available/000-default.conf,在 <VirtualHost *:80> 块内添加:
Redirect permanent / https://你的域名/
然后重启 Apache:sudo systemctl restart apache2
(注:如果使用 Certbot 并选择了 Redirect 选项,这一步它已经帮你做好了。)