文档中心
Apache鏈嶅姟鍣ㄩ厤缃涓猄SL璇佷功涓€绔欏紡鎸囧崡涓庡疄鎴樻渚?txt
时间 : 2025-09-27 15:41:33浏览量 : 2
为什么需要多个SSL证书?

想象一下你经营着一家大型电商网站,同时运营着多个子域名:www.yourstore.com(主站)、shop.yourstore.com(购物专区)、blog.yourstore.com(企业博客)。如果只用一个SSL证书,要么只能保护主域名,要么要购买昂贵的通配符证书。这时候,配置多个SSL证书就成了经济又实用的解决方案。
在实际工作中,我遇到过不少客户因为不了解多证书配置而陷入困境。比如有位客户的主站证书即将到期需要更换,但因为所有子域名都共用同一个证书,导致更新过程异常复杂。学会正确配置多个SSL证书能帮你避免这类问题。
准备工作:了解SNI技术
在深入配置之前,我们需要了解一个关键技术:SNI(Server Name Indication)。这就像快递员送包裹时的"姓名确认"环节——客户端在握手初期就告诉服务器:"嗨,我要访问的是shop.yourstore.com",这样服务器就能返回正确的SSL证书。
重要提示:SNI需要客户端和服务器都支持。好消息是,几乎所有现代浏览器和操作系统都支持SNI。只有Windows XP上的IE6等古董级浏览器不支持。
实战案例一:基于名称的虚拟主机多证书配置
让我们通过一个真实案例来学习。假设我们有:
- www.example.com - 使用证书A
- shop.example.com - 使用证书B
- blog.example.com - 使用证书C
步骤1:准备SSL证书文件
通常从CA获得的SSL证书包含以下几个文件:
```
certificate.crt
域名证书
ca_bundle.crt
中间证书链
private.key
私钥文件
建议将这些文件按域名整理存放:
/etc/ssl/example/www.crt
/etc/ssl/example/www.key
/etc/ssl/example/www.ca-bundle
/etc/ssl/example/shop.crt
/etc/ssl/example/shop.key
/etc/ssl/example/shop.ca-bundle
/etc/ssl/example/blog.crt
/etc/ssl/example/blog.key
/etc/ssl/example/blog.ca-bundle
步骤2:配置Apache虚拟主机
以下是典型的Apache虚拟主机配置示例:
```apache
ServerName www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/example/www.crt
SSLCertificateKeyFile /etc/ssl/example/www.key
SSLCertificateChainFile /etc/ssl/example/www.ca-bundle
其他配置...
ServerName shop.example.com
DocumentRoot /var/www/shop
SSLCertificateFile /etc/ssl/example/shop.crt
SSLCertificateKeyFile /etc/ssl.example/shop.key
SSLCertificateChainFile /etc/ssl.example/shop.ca-bundle
ServerName blog.example.com.site
DocumentRoot /var/www/blog
SSLEngine on
SSLCertificateFile /etc.blog.example.com.crt
SSLCertificateKeyFile /etc.blog.example.com.key
步骤3:合并中间证书链(可选但推荐)
有些情况下需要将中间证书记录到主证书文件中:
```bash
cat www.crt www.ca-bundle > www-combined.crt
然后在配置中使用:
```apache
SSLCertificateFile /etc.blog.example-combined.crt
不再需要SSLCertificateChainFile指令
实战案例二:同一IP上的多域名混合HTTP2优化
HTTP2协议要求所有域名使用相同TLS会话才能实现连接复用。我们可以这样优化:
SSL公用设置放在最前面或单独的include文件中
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on
SSLCompression off
HTTP2设置
Protocols h2 http.tcp
ServerName www.domain1.com
DocumentRoot "/var/www/html"
Include ssl-params.conf
SSLEngine On
SSLCertificateFile "/path/to/certs/cert1.pem"
SSLCertificateKeyFile "/path/to/certs/key1.pem"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
ServerName domain2.net
DocumentRoot "/var/webapps/app2/public"
Include ssl-params.conf
SSLEngine On
SSLCertificateFile "/path/to/certs/cert2.pem"
SSLCertificateKeyFile "/path/to/certs/key2.pem"
SSL性能优化技巧
1. 会话票证复用:
SSLSessionCache shmcb:/run/httpd.sslcache(512000)
SSLSessionCacheTimeout 300
2. OCSP装订提升验证速度:
SSLUseStapling on
SSLStaplingCache shmcb:/tmp/staple_cache(128000)
3. 启用HTTP严格传输安全(HSTS):
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
常见问题排查指南
问题1:浏览器提示"此网站的安全凭证有问题"
- ?检查时间同步`ntpdate pool.ntp.org`
- ?验证私钥匹配`openssl x509 -noout -modulus -in cert.pem | openssl md5`
- ?确认中间证书记录完整`openssl s_client -showcerts -connect domain:443`
问题2:特定浏览器无法访问HTTPS站点(特别是旧版Android)
- ?确保未禁用TLSv1.2`SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1`
问题3:Apache启动失败提示"Failed to configure certificate"
- ?检查私钥权限`chmod 400 private.key`
- ?确认没有复制粘贴导致的格式错误`file private.key`
SSL安全加固检查清单
最后分享我的安全检查清单:
1. [ ]禁用已废弃的协议版本(如TLSv1.0)
2. [ ]禁用弱密码套件(如RC4,DES)
3. [ ]启用完美前向保密(PFS)
4. [ ]设置合适的HSTS头部信息值域范围值域范围值域范围值域范围值域范围值域范围值域范围值域范围值域范围值域范围值域范围值域范围值域范围值域范围值域范范范范范范围围围围围围围围围围围围围围围围圍圍圍圍圍圍囲囲囲囲囲囲囲圈圈圈圈圈圈圈圈圏圏圏圏圏圏圏圏?????????????????????
TAG:apache 多个ssl证书,apache开启ssl,ssl证书多个域名,apache2 ssl,ssl证书tomcat配置