文档中心
Apache鏈嶅姟鍣ㄥ浣曢儴缃插涓猄SL璇佷功锛熶竴鏂囧浼氬绔欑偣HTTPS閰嶇疆
时间 : 2025-09-27 15:41:29浏览量 : 2

在今天的互联网环境中,HTTPS已经成为网站安全的基本要求。对于运维人员来说,如何在Apache服务器上为多个网站配置不同的SSL证书是一个常见需求。本文将用通俗易懂的方式,结合具体实例,带你一步步掌握Apache多SSL证书部署的技巧。
一、为什么需要多个SSL证书?
想象一下你有一栋大楼(服务器),里面有多家公司(网站)办公。如果只用一个大门钥匙(单SSL证书),所有公司共用一把钥匙显然不安全。专业的做法是给每家公司配独立的门禁系统(独立SSL证书)。这样即使一家公司的钥匙丢了,也不会影响其他公司的安全。
实际场景举例:
- 你运营着shop.example.com和blog.example.com两个子域名
- 客户要求api.example.com使用企业级EV证书
- 旧版legacy.example.com还需要保持兼容老式加密算法
二、准备工作:了解SNI技术
传统HTTPS有个限制:浏览器在握手阶段才发送域名信息,导致服务器无法提前知道该返回哪个证书。这就像客人敲门时不说自己是谁,管家不知道该拿哪把钥匙开门。
SNI(Server Name Indication)技术解决了这个问题:
1. 浏览器会在握手时明确说:"我要访问shop.example.com"
2. Apache根据这个提示选择对应的证书
3. 现代浏览器都支持SNI(IE7+、Chrome5+等)
查看Apache是否支持SNI:
```bash
httpd -v | grep -i ssl
需要看到mod_ssl模块
```
三、具体配置步骤(带实例)
假设我们有两个网站:
1. 电商站:/var/www/shop (域名shop.example.com)
2. 博客站:/var/www/blog (域名blog.example.com)
步骤1:准备证书文件
每个网站需要:
- 证书文件:shop.crt / blog.crt
- 私钥文件:shop.key / blog.key
- CA中间证书:intermediate.crt(通常由CA提供)
建议整理目录结构:
/etc/ssl/
├── shop/
│ ├── shop.crt
│ ├── shop.key
│ └── intermediate.crt
└── blog/
├── blog.crt
├── blog.key
└── intermediate.crt
步骤2:修改Apache配置
典型虚拟主机配置示例:
```apacheconf
电商站点配置
ServerName shop.example.com
DocumentRoot /var/www/shop
SSLEngine on
SSLCertificateFile /etc/ssl/shop/shop.crt
SSLCertificateKeyFile /etc/ssl/shop/shop.key
SSLCertificateChainFile /etc/ssl/shop/intermediate.crt
强制HTTPS跳转
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
博客站点配置
ServerName blog.example.com
DocumentRoot /var/www/blog
SSLCertificateFile /etc/ssl/blog/blog.crt
SSLCertificateKeyFile /etc/ssl/blog/blog.key
SSLCertificateChainFile /etc/ssl/blog/intermediate.crt
HSTS安全增强头
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
步骤3:测试与验证
1. 语法检查:
apachectl configtest
2. 重启服务:
```bash
systemctl restart httpd
3. 在线检测工具:
- SSL Labs测试:https://www.ssllabs.com/ssltest/
- Chrome开发者工具 → Security标签页
四、常见问题解决方案
问题1:访问时报"SSL_ERROR_BAD_CERT_DOMAIN"
- ?检查ServerName是否与证书域名完全匹配
- ?通配符证书要确认覆盖范围(*.example.com不包含example.com)
问题2:老版本Android提示证书错误
- ?不要关闭SNI
- ?确保中间证书正确链式拼接
- ?考虑购买兼容性更好的CA机构证书
问题3:如何优化性能?
```apacheconf
OCSP装订加速握手过程
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling_cache(128000)"
五、进阶技巧
1. 自动续期方案(Let's Encrypt示例):
certbot renew --pre-hook "systemctl stop httpd" \
--post-hook "systemctl start httpd"
2. 混合使用不同CA的证书:
- API站点用DigiCert企业级证书
- Blog用免费Let's Encrypt证书
(配置方法完全相同)
3. IP地址不够用时:
IP相同但端口不同时可用方案
Listen 44300
...其他配置相同...
六、安全最佳实践
1. 私钥保护三原则:
- chmod 400所有.key文件
- auditd监控密钥目录访问
- Never share keys via email
2. 密码套件推荐设置:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
通过以上步骤,你的Apache服务器就能专业地管理多个SSL证书了。记住定期检查日志中的TLS错误信息,保持加密套件更新,这样才能构建既灵活又安全的Web服务环境。
TAG:apache部署多个ssl证书,apache2 ssl,apache配置ssl证书,apache2安装ssl证书,apache配置多个域名,apache配置多个端口