本文主要探讨在 Apache 2.x 架构中通过 mod_ssl 模块实现 HTTPS 加密通信的标准化流程。技术核心在于正确关联服务器公钥证书、中间证书链以及本地生成的私钥,并确保 Apache 虚拟主机(VirtualHost)在 443 端口上能够准确挂载这些密钥文件,从而完成从非加密 HTTP 到加密 HTTPS 的安全升级。
在正式进入 Apache 配置前,需确保 ssl证书 相关文件的完整性与格式正确。通常从 CA 机构获取的证书包需要按照以下逻辑拆解:
-----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE-----,复制保存为server.crt.(注:文件名和后缀随意起)
----BEGIN RSA PRIVATE KEY-----开头的。文件名可能是server.key或者key.txt等(这个文件找不到的话,问下下订单的相关同事,如果找不到的话是部署不了的)mod-aviable中的 ssl.conf和 ssl.load这两个配置文件,复制到 mod-enable中。(这一步是启用ssl,这部配置完成后,443端口就能起来,但不一定能加载成功证书)site-aviable中的 default-ssl配置,加载到 site-enable中(相当于创建了443的vhost,当然也可以自己创建host的配置文件)注:默认的 default-ssl的 dcomentRoot和80的可能不一致,可修改成与其一致。如果需要强制http跳转https的,在80的配置文件里,添加rewrite规则(需apache2有rewrite功能模块)。
简单如:
RewriteEngine on
RewriteRule ^(.*) https://{http_host}$1 [L,N]
这里的 R=301 比起原稿中的 N 模式在 SEO 权重传递上更具优势,能明确告知搜索引擎页面已永久迁移。
具体的则请参阅apache官方的rewrite的文档,按需进行配置。
配置了 SSL 但浏览器提示证书链不完整?
是因为 SSLCertificateChainFile 指向的文件没有正确合并中间证书,或者在 Apache 2.4.8 以后的版本中,未将中间证书内容直接追加到 SSLCertificateFile 指向的文件末尾。
找不到私钥文件 server.key 怎么办?
私钥不在证书颁发机构手中,而是在生成 CSR 的服务器上。如果彻底遗失,唯一的办法是重新生成 CSR 并进行证书重签(Reissue)。
80 端口跳转 https 循环重定向了?
检查跳转规则是否写在了 443 端口的配置内,或者是 RewriteCond 判定条件缺失,导致 HTTPS 请求又被重写回了自身。
Apache 部署 SSL 后服务无法启动如何排查?
首选查看错误日志(error.log),通常是由于私钥与证书不匹配或文件路径权限导致 Apache 无法读取。
加密您的网站,赢得客户信任!