文档中心
1鍙版湇鍔″櫒濡備綍閰嶇疆2涓狧TTPS璇佷功锛熷疄鎴樻寚鍗楁潵浜嗭紒
时间 : 2025-09-27 15:38:46浏览量 : 4

在当今互联网环境中,HTTPS加密已经成为网站安全的基本要求。但你是否遇到过这样的情况:你的服务器需要同时托管两个不同域名的网站,或者一个网站需要同时支持新旧两个域名?这时候就需要在一台服务器上配置多个HTTPS证书了。本文将用通俗易懂的方式,手把手教你如何实现这一需求。
为什么需要在一台服务器上配置多个HTTPS证书?
让我们先看几个实际场景:
1. 企业官网与电商平台共存:公司既有官方网站www.company.com,又有独立电商平台shop.company.com,两者都需要HTTPS加密。
2. 新旧域名过渡期:公司更换域名后,需要同时支持old-domain.com和new-domain.com一段时间。
3. 多品牌运营:同一家公司运营多个品牌网站,如brand1.com和brand2.com。
在这些情况下,如果每个域名都使用独立的服务器显然不经济也不高效。那么如何在单台服务器上实现多证书配置呢?
技术基础:SNI扩展是关键
传统HTTPS协议有一个限制:在TLS握手阶段(建立加密连接的第一步),客户端还没有告诉服务器它要访问哪个域名,服务器就无法知道该提供哪个证书。这就是所谓的"SNI问题"(Server Name Indication)。
解决方案是SNI扩展技术——它允许客户端在TLS握手时就告诉服务器:"我要访问xxx.com"。这样服务器就能正确返回对应的证书了。
> 真实案例:2025年某电商大促期间,技术团队发现使用Windows XP的客户无法访问新版支付页面。原因就是XP系统不支持SNI扩展。最终他们不得不为这些用户单独维护一个不依赖SNI的老版本服务。
主流Web服务器的多证书配置方法
Nginx配置示例
Nginx是目前最流行的Web服务器之一,配置多证书非常方便:
```nginx
server {
listen 443 ssl;
server_name www.domain1.com;
ssl_certificate /path/to/domain1.crt;
ssl_certificate_key /path/to/domain1.key;
其他配置...
}
server_name www.domain2.com;
ssl_certificate /path/to/domain2.crt;
ssl_certificate_key /path/to/domain2.key;
```
关键点:
- 两个server块监听相同的443端口
- 通过不同的server_name区分不同域名
- 每个server块指定自己的证书和密钥路径
Apache配置示例
Apache同样支持多证书:
```apache
ServerName www.domain1.com
SSLEngine on
SSLCertificateFile /path/to/domain1.crt
SSLCertificateKeyFile /path/to/domain1.key
ServerName www.domain2.com
SSLCertificateFile /path/to/domain2.crt
SSLCertificateKeyFile /path/to/domain2.key
IIS配置示例
Windows服务器的IIS也可以通过"主机名绑定"实现:
1. 打开IIS管理器 → 选择站点 → "绑定"
2. 添加HTTPS绑定 → 输入主机名(如www.domain1.com) → 选择对应证书
3. 重复步骤为第二个域名添加绑定
HTTPS多证书的最佳实践
1. SAN/UCC证书可能是更好选择
如果你的多个域名都属于同一组织管理(如a.example.com和b.example.com),可以考虑使用SAN(Subject Alternative Name)或UCC(Unified Communications Certificate)证书。这种单一证书可以保护多个域名。
优点:
- 管理更简单 - 只需维护一个证书的续期和更新
- Windows XP等老旧系统兼容性更好(因为它们不支持SNI)
缺点:
- 如果其中一个域名的安全需求发生变化(如需要更高强度的加密),会影响所有域名
- CA机构对SAN数量通常有限制
2. OCSP Stapling优化性能
每次验证HTTPS证书时都要查询CA的OCSP服务会影响性能。OCSP Stapling可以让服务器定期获取OCSP响应并缓存起来,提高响应速度。
Nginx启用方法:
ssl_stapling on;
ssl_stapling_verify on;
3. HSTS强化安全
HTTP Strict Transport Security可以强制浏览器只使用HTTPS连接:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
4. CAA记录防止非法签发
DNS中添加CAA记录可以指定哪些CA有权为你的域名签发证书:
example.com. IN CAA 0 issue "letsencrypt.org"
example.com. IN CAA 0 issuewild "comodoca.com"
HTTPS多证书常见问题排查
Q1: Chrome提示"ERR_SSL_VERSION_OR_CIPHER_MISMATCH"
可能原因:
- SNI未正确启用
- TLS版本不匹配(如客户端只支持TLS1.0而服务端禁用了它)
解决方案:
检查Nginx/Apache的ssl_protocols设置是否包含主流版本:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
Q2: Android旧版本无法访问特定子域
Android4.x及以下版本对SNI支持不完善。
考虑降级兼容方案或引导用户升级系统。
Q3: SSL Labs测试评级不高
常见改进点:
- Disable weak ciphers (如RC4, DES)
- Enable TLS_FALLBACK_SCSV防止降级攻击
- Prefer server cipher suites to mitigate BEAST attack
优化后的Nginx SSL配置示例:
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...';
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
HTTPS多证书记录与管理建议
当管理大量SSL证书记录时建议:
| Domain | Issuer | Expiry Date | Auto-renew | Notes |
|--|--|-||-|
| domainA | Let's Encrypt | Jan2025 | Yes | Wildcard cert |
| domainB | DigiCert | Mar2025 | No | EV cert |
可以使用工具自动化监控和管理:
- Certbot (Let's Encrypt官方客户端)
- acme.sh (Shell脚本)
TAG:1台服务器配置2个https证书,架设一台服务器,服务器配置两个ip,服务器配两个地址,一台服务器配置多个网站,一台服务器如何配置多个ip