apache启用https的核心是加载mod_ssl模块、准备证书文件(.crt/.pem和.key)并配置443端口虚拟主机,linux需用a2enmod或yum安装模块,windows需在httpd.conf中取消loadmodule ssl_module和include httpd-ssl.conf的注释,证书路径须在virtualhost中正确指定。

Apache 要启用 HTTPS,核心是加载 SSL 模块、准备有效的证书文件(公钥证书 + 私钥),并在虚拟主机中正确指向它们。整个过程不依赖操作系统类型,但路径和启用方式略有差异。
确认并启用 SSL 模块
Apache 必须加载 mod_ssl 才能处理 HTTPS 请求。Linux(Debian/Ubuntu)和 RHEL/CentOS 系统操作不同:
- Debian/Ubuntu 系统:运行 a2enmod ssl 启用模块,然后执行 systemctl reload apache2
- RHEL/CentOS 系统:确保 mod_ssl 已安装(如 yum install mod_ssl 或 dnf install mod_ssl),检查 /etc/httpd/conf.modules.d/00-ssl.conf 是否存在且未被注释
- Windows 系统:打开 httpd.conf,取消以下两行的注释:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
准备证书与私钥文件
证书来源有两种常见方式:自签名(仅限测试)或由可信 CA(如 Let’s Encrypt)签发(生产环境必需)。无论哪种,你都需要两个关键文件:
- 证书文件(.crt 或 .pem):包含你的域名公钥及证书链信息
- 私钥文件(.key):必须严格保密,不可泄露,权限建议设为 600
若使用 Let’s Encrypt,推荐用 acme.sh 或 certbot 自动获取。例如:
certbot --apache -d example.com 会自动申请、部署并配置 Apache;
手动部署时,证书通常存于 /etc/letsencrypt/live/example.com/fullchain.pem,私钥在 privkey.pem。
配置 HTTPS 虚拟主机
不要直接修改主配置文件,应在站点专属配置中定义
SSLEngine on
SSLCertificateFile /path/to/fullchain.pem
SSLCertificateKeyFile /path/to/privkey.pem
SSLCertificateChainFile 在较新 Apache 版本中已非必需(只要 SSLCertificateFile 包含完整证书链即可)
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1(禁用老旧不安全协议)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"(启用 HSTS)
配置完成后务必执行 apachectl configtest 检查语法,无误再重启服务:
systemctl reload apache2(Debian/Ubuntu)或 systemctl reload httpd(RHEL/CentOS)
验证与调试要点
部署后不能只看浏览器锁图标,还需主动验证:
- 用 openssl s_client -connect example.com:443 -servername example.com 查看证书链是否完整、过期时间是否正确
- 访问 https://example.com,检查是否重定向 HTTP 流量(可加 Redirect permanent / https://example.com/ 到 HTTP 虚拟主机中)
- 用在线工具如 SSL Labs’ SSL Test 扫描评分,重点关注协议支持、密钥交换、证书信任链
- 注意:证书中 Common Name 或 Subject Alternative Names 必须精确匹配用户访问的域名,否则浏览器会报错











