通过对 Httpd 服务器证书部署流程的系统梳理,本文明确了在不同证书获取渠道下文件的处理逻辑,并针对 Apache 核心配置文件中 mod\_ssl 模块的加载与加密套件的定义给出了规范化建议。
在执行证书部署前,需确保服务器底层组件满足加密协议的性能与安全性要求。
根据不同的签发渠道,获取的文件格式及处理流程略有差异。
.key 文件。-----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 的内容保存为 .cer。.crt 后缀。至此,完成 ssl证书 所需的三个关键文件准备。为使 Httpd 支持 HTTPS,必须在主配置文件中启用 SSL 模块及相关路径引用。
启用 SSL 模块:
Apache
LoadModule ssl_module modules/mod_ssl.so
这可能在conf.modules.d目录下的00-ssl.conf,也可能在httpd.conf,也可能在http-ssl.conf里,版本不一样,目录结构不一样,自然就不一样
加载扩展配置:
Apache
IncludeOptional conf.d/*.conf
这里加载的写法很多,主要加载配置ssl的配置目录
进入 ssl.conf 或相应的站点配置文件,首先确保监听 443 端口:
Apache
Listen 443 https
针对特定域名的 VirtualHost 进行如下安全加固配置:
Apache
<VirtualHost _default_:443>
# 项目根目录
DocumentRoot "/myproject"
# 开启 SSL 引擎
SSLEngine on
# 协议过滤:禁用存在漏洞的 SSLv2 和 SSLv3
SSLProtocol all -SSLv2 -SSLv3
# 优先使用服务器定义的加密套件顺序
SSLHonorCipherOrder On
# 加密套件定义(推荐高强度组合)
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:AES256-GCM-SHA384:AES128-GCM-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4
# 证书路径指向
SSLCertificateFile /xx/xx/domain.cer
SSLCertificateKeyFile /xx/xx/domain.key
SSLCertificateChainFile /xx/xx/domain_ca.crt
</VirtualHost>
为提升用户访问的安全性,建议通过重写引擎强制全站加密。
加载重写模块:
Apache
LoadModule rewrite_module modules/mod_rewrite.so
在 80 端口的 VirtualHost 中添加跳转逻辑:
Apache
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
完成配置并重启 Httpd 服务后,需确保防火墙已放行 443 端口。若存在负载均衡或网关,请确认端口转发策略正常。
可使用在线工具进行安全性评级检测。若检测评级达到 B 级以上,说明该服务器在安全强度与浏览器兼容性方面已达到生产环境的稳健要求。
问:SSLCertificateChainFile 是必须的吗?
答:是的。对于 OV SSL证书 或其他高级别证书,若不配置证书链文件,浏览器可能会因无法验证证书颁发机构而提示“不安全”。
问:修改配置后 Apache 无法启动怎么办?
答:通常是由于路径错误或加密套件语法不规范导致。建议使用 httpd -t 命令进行语法检查,系统会提示具体的报错行数。
问:Apache 2.4 与 2.2 的 SSL 配置有区别吗?
答:有区别。2.4 版本在权限控制和 SSL 指令上更加严谨,例如部分旧版加密套件在 2.4 中已被废弃,建议参考本文推荐的 CipherSuite 配置。
问:如何确认 443 端口是否被占用?
答:在 Linux 环境下可以使用 netstat -tunlp | grep 443 查看,确保没有其他进程(如 Nginx)占用了该端口。
加密您的网站,赢得客户信任!