文档中心
Apache鏈嶅姟鍣ㄥ浣曞悓鏃堕厤缃袱寮燬SL璇佷功锛熷疄鎴樻寚鍗楁潵浜嗭紒
时间 : 2025-09-27 15:41:27浏览量 : 1

作为一名网络安全工程师,我经常需要为企业的Apache服务器配置SSL证书。今天我要分享一个实用技巧:如何在Apache服务器上同时配置两张SSL证书。这个需求在实际工作中很常见,比如企业可能需要为同一个域名同时使用商业CA证书和自签名证书,或者需要为不同的子域名配置不同的证书。
为什么需要两张SSL证书?
在开始配置之前,我们先理解下为什么会有这种需求:
1. 业务过渡期:从旧证书迁移到新证书时,可能需要同时保留两个证书一段时间
2. 不同环境需求:生产环境用商业CA证书,测试环境用自签名证书
3. 多域名管理:主域名和子域名使用不同的证书
4. 兼容性考虑:某些老旧设备可能只支持特定类型的加密算法
举个实际例子:某电商网站example.com需要在主站使用DigiCert的商业SSL证书,同时在支付子域pay.example.com使用更高级别的EV SSL证书。这种情况下就需要在Apache中配置两张不同的SSL证书。
准备工作
在开始前确保你已经准备好:
- 两张有效的SSL证书(.crt文件)
- 对应的私钥文件(.key文件)
- 根证书/中间证书链(如有)
- Apache已安装mod_ssl模块
检查mod_ssl是否已启用:
```bash
apachectl -M | grep ssl
```
如果看到"ssl_module"就说明已经启用。
基础单证书配置回顾
先快速回顾下单SSL证书的典型配置(以Ubuntu系统为例):
```apache
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt
多SSL证书的三种实现方式
方案一:基于不同端口的配置
这是最简单的实现方式,每张SSL监听不同端口:
第一个SSL监听443端口(默认HTTPS)
SSLCertificateFile /path/to/cert1.crt
SSLCertificateKeyFile /path/to/key1.key
第二个SSL监听8443端口(或其他非标准端口)
ServerName example.com
SSLCertificateFile /path/to/cert2.crt
SSLCertificateKeyFile /path/to/key2.key
优点:简单直接
缺点:用户需要记住非常用端口号
方案二:基于SNI的多域名配置
Server Name Indication(SNI)技术允许在同一个IP上为不同域名提供不同SSL:
```apache
ServerName main.example.com
SSLCertificateFile /path/to/main.crt
SSLCertificateKeyFile /path/to/main.key
Require all granted
ServerName shop.example.com
SSLEngine on
SSLCertificateFile /path/to/shop.crt
SSLCertificateKeyFile /path/to/shop.key
Require all granted
关键点:
1. Apache版本需≥2.2.12支持SNI
2. 现代浏览器都支持SNI
3. Windows XP+IE6等老旧客户端不支持SNI
方案三:同一域名的双证书记录(较复杂)
通过OpenSSL合并两张私钥和两张证书记录到一个文件中:
合并私钥(注意权限保持600)
cat key1.pem key2.pem > combined_keys.pem
合并公钥(顺序很重要)
cat cert1.pem cert2.pem > combined_certs.pem
RSA+AES256加密合并后的私钥文件(可选)
openssl rsa -aes256 -in combined_keys.pem -out encrypted_keys.pem
然后在Apache中引用合并后的文件:
SSLCertificateFile /path/to/combined_certs.pem
SSLCertificateKeyFile /path/to/combined_keys.pem
SSL性能优化技巧
当使用多张SSL时要注意性能影响:
1. 会话缓存共享:
```apache
httpd.conf中添加:
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
```
2. OCSP装订优化(减少客户端验证时间):
```apache
SSLUseStapling On
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors Off
3. 启用HTTP/2(提升多资源加载速度):
Protocols h2 http/1.1
常见问题排查指南
Q1: Apache启动时报错"Failed to configure certificate..."
→ `检查私钥是否与公钥匹配`:
```bash
openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in private.key | openssl md5
两个MD5值必须一致。
Q2: Chrome浏览器提示"NET::ERR_CERT_COMMON_NAME_INVALID"
→ `确认ServerName与CN或SAN匹配`:
openssl x509 -in cert.crt -text | grep "DNS:"
Q3: IE8等老浏览器无法访问
→ `可能是缺少中间CA或使用了SNI`:
openssl s_client -connect example.com:443 -servername example.com \
-showcerts > chain.txt
HTTPS安全加固建议
完成双证书记录后还应考虑:
1. 禁用不安全协议和加密套件:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5:!RC4
2. 启用HSTS(强制HTTPS):
```apache
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
3. 定期轮换密钥(即使未到期):
建议每6个月重新生成一次私钥并更新CSR。
与最佳实践建议
通过以上方法,你可以灵活地在Apache中部署多个SSL证书记录。根据我的经验给出几点建议:
1?? SNI方案最适合现代互联网应用场景
2?? IP+端口方案适合内部系统或特殊需求
3?? EC密钥比RSA更高效(P-256曲线推荐)
4?? Let's Encrypt可自动化管理多个域名的免费证书记录
最后提醒定期检查你的HTTPS安全评分:
ssllabs-scan example.com
保持A+评级才是真正的安全运维之道!
TAG:apache添加两张ssl证书,http加ssl,apache2安装ssl证书,apache ssl