Ubuntu 上如何配置 Apache SSL 证书

一 准备环境并安装组件
- 先更新 Ubuntu 系统,并安装 Apache 与 SSL 支持模块:
- sudo apt update
- sudo apt install apache2 libapache2-mod-ssl
- 启用 Apache 的 SSL 模块:
- sudo a2enmod ssl
- 放行防火墙端口(如果使用 UFW):
- sudo ufw allow 80,443/tcp 或 sudo ufw allow ‘Apache Full’
- 说明:启用 SSL 模块后,通常会自动开放 443 端口;如果没有生效,可检查 /etc/apache2/ports.conf 中是否包含 Listen 443。
二 准备 SSL 证书文件
- 方案 A 使用 CA 机构签发的正式证书(推荐生产环境使用)
- 常见证书文件包括:域名证书 public.crt / domain.crt、私钥 domain.key、中间证书链 chain.crt / fullchain.pem。
- 建议统一存放证书文件,并设置安全权限:
- sudo mkdir -p /etc/apache2/ssl
- sudo cp YourDomainName_public.crt YourDomainName_chain.crt YourDomainName.key /etc/apache2/ssl
- sudo chmod 600 /etc/apache2/ssl/*.key
- 方案 B 使用自签名 SSL 证书(仅适合测试环境)
- 生成一个有效期为 365 天的自签名证书:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout /etc/ssl/private/apache-selfsigned.key
-out /etc/ssl/certs/apache-selfsigned.crt
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
- 生成一个有效期为 365 天的自签名证书:
- 提示:有些证书服务商会将证书和证书链合并为 fullchain.pem,这种情况下通常只需要配置 SSLCertificateFile 和 SSLCertificateKeyFile。
三 配置 Apache 启用 HTTPS
- 编辑 Apache 的 SSL 虚拟主机配置(常见做法有两种,可任选其一)
- 使用默认 SSL 站点配置:
- sudo nano /etc/apache2/sites-a vailable/default-ssl.conf
- 在
中确认包含以下内容: - ServerName your.domain
- SSLEngine on
- SSLCertificateFile /etc/apache2/ssl/YourDomainName_public.crt
- SSLCertificateKeyFile /etc/apache2/ssl/YourDomainName.key
- SSLCertificateChainFile /etc/apache2/ssl/YourDomainName_chain.crt
- 启用该站点配置:
- sudo a2ensite default-ssl.conf
- 或自行创建站点配置(/etc/apache2/sites-a vailable/example.com.conf):
- 在
中设置 DocumentRoot、ServerName、SSLEngine on 以及上述证书文件路径 - 启用站点:
- sudo a2ensite example.com.conf
- 在
- 使用默认 SSL 站点配置:
- 确认 Apache 正在监听 443 端口:
- 检查 /etc/apache2/ports.conf 中是否包含:Listen 80 和 Listen 443
- 可选安全优化(可在 mods-a vailable/ssl.conf 或对应 VirtualHost 中配置)
- SSLProtocol all -SSLv2 -SSLv3
- SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:MEDIUM
- SSLHonorCipherOrder on
- SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
- SSLSessionCacheTimeout 300
- 让配置立即生效:
- sudo systemctl reload apache2 或 sudo systemctl restart apache2
四、强制HTTP跳转HTTPS(可选)
- 启用 URL 重写模块:
- sudo a2enmod rewrite
- 在端口 80 的虚拟主机配置中(如 000-default.conf)加入:
- RewriteEngine on
- RewriteCond %{HTTPS} off
- RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,R=301]
- 或者在 .htaccess 中配置(需 AllowOverride All):
- RewriteEngine on
- RewriteCond %{SERVER_PORT} !^443$
- RewriteRule ^.* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
- 应用配置变更:
- sudo systemctl reload apache2
五 验证配置并排查问题
- 访问测试:
- 在浏览器中打开 https://your.domain,确认地址栏是否显示安全锁标志;如果使用的是自签名证书,浏览器提示不受信任属于正常现象,仅建议在测试环境中使用。
- 检查证书路径:
- 确认 SSL 证书、私钥和证书链文件路径与 Apache 配置一致,同时确保私钥权限为 600。
- 检查端口和模块状态:
- 确认 443 端口已经监听(ss -tlnp | grep :443),并且 mod_ssl 模块已启用(a2enmod ssl)。
- 查看日志排错:
- 检查错误日志:tail -f /var/log/apache2/error.log
- 自动化申请证书方式(Let’s Encrypt):
- 安装 Certbot:sudo apt install certbot python3-certbot-apache
- 一键申请并自动配置 HTTPS:sudo certbot --apache(会自动修改虚拟主机配置并启用跳转)。
