文档中心
IIS7閰嶇疆澶氫釜SSL璇佷功鍏ㄦ敾鐣ュ疄鎴樻楠や笌甯歌闂瑙f瀽
时间 : 2025-09-27 16:18:51浏览量 : 2
为什么需要配置多个SSL证书?

在互联网安全日益重要的今天,SSL证书已经成为网站标配。但对于运维人员来说,经常会遇到一个服务器需要托管多个HTTPS网站的情况。比如:
1. 企业官网+电商平台:公司主站www.company.com和商城shop.company.com需要不同的证书
2. 多品牌运营:同一服务器托管brand1.com和brand2.com两个独立品牌的网站
3. 测试环境:dev.site.com和test.site.com需要独立的测试证书
传统方法是为每个域名单独配置一台服务器,这显然成本高昂且管理不便。IIS7提供的SNI(Server Name Indication)技术完美解决了这个问题,允许在同一IP地址上绑定多个SSL证书。
SNI技术原理简介
SNI就像是一个聪明的邮递员系统。想象一下:
- 没有SNI时:所有寄到同一地址的信件(HTTPS请求)都会被拆开查看内容后才能知道该交给谁(哪个证书),这在技术上是不可能的,因为需要先验证证书才能解密内容。
- 有SNI后:信封外面就标注了"收件人姓名"(请求的域名),邮递员(服务器)不用拆信就能知道该用哪个证书处理这个请求。
这种技术扩展了TLS协议,在握手初期就传递了目标域名信息,使得服务器能够选择正确的证书进行响应。
IIS7配置多SSL证书详细步骤
准备工作
1. 获取证书文件:
- 从CA机构购买或申请免费证书(如Let's Encrypt)
- 确保每个域名都有对应的.pfx文件(包含私钥)或.crt+.key组合
- 示例文件:
- www_site1_com.pfx
- shop_site2_com.pfx
2. 检查IIS版本:
- 打开IIS管理器 → 点击服务器名称 → 右侧"关于Internet Information Services"
- 确认版本至少是7.0(Windows Server 2008)
具体配置流程
第一步:安装第一个证书
1. 导入证书到服务器存储:
```powershell
PowerShell管理员身份运行
Import-PfxCertificate -FilePath "C:\certs\www_site1_com.pfx" -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString -String "your_password" -Force -AsPlainText)
```
2. IIS管理器绑定:
- 右键网站 → "编辑绑定"
- 添加HTTPS绑定 → IP地址选择"全部未分配",端口443
- SSL证书下拉菜单中选择刚导入的www_site1_com证书
- *不要勾选*"需要服务器名称指示"
第二步:安装第二个及更多证书
1. 导入额外证书:
重复上述Import-PfxCertificate命令,更换为其他域名的pfx文件
2. 关键SNI配置:
- 添加新HTTPS绑定时:
- IP相同(全部未分配)
- 端口相同(443)
- *必须勾选*"需要服务器名称指示"
- SSL证书选择对应域名的证书
3. 验证绑定结果:
最终绑定列表应类似:
类型 | IP地址 | 端口 | 主机名 | SSL证书
HTTPS | * | 443 | www.site1.com | www_site1_com
HTTPS | * | 443 | shop.site2.com | shop_site2_com (SNI启用)
CLI爱好者可选方法
对于习惯命令行的管理员,可使用appcmd.exe完成配置:
```batch
:: 添加第一个非SNI绑定
%windir%\system32\inetsrv\appcmd.exe set site /site.name:"Site1" /+bindings.[protocol='https',bindingInformation='*:443:',sslFlags='0']
:: 添加SNI绑定
%windir%\system32\inetsrv\appcmd.exe set site /site.name:"Site2" /+bindings.[protocol='https',bindingInformation='*:443:shop.site2.com',sslFlags='1']
```
Windows Server不同版本的注意事项
| Windows Server版本 | SNI支持情况 | TLS协议限制 |
|-|||
| 2008 R2 (IIS7.5) | √ | TLS1.0/1.1默认 |
| 2012 (IIS8) | √ | TLS1.0/1.1默认 |
| 2025及以上 | √ | TLS1.2默认 |
如果需要支持老旧客户端(如Android4.x),需额外启用TLS1.0/1.1:
```powershell
Enable TLS protocols
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server' -Name Enabled -Value 1
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client' -Name Enabled -Value 1
SSL Labs检测常见问题排查
A级评分必备设置
即使正确配置了多证书,还需优化以下参数:
Disable weak ciphers
$insecureCiphers = @(
"DES-CBC3-SHA",
"RC4-MD5",
"RC4-SHA"
)
foreach ($cipher in $insecureCiphers) {
Disable-TlsCipherSuite $cipher
}
Enable modern ciphers
Enable-TlsCipherSuite TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Enable-TlsCipherSuite TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
SNI兼容性问题分析工具
使用OpenSSL测试不同客户端的识别情况:
```bash
Linux/Mac测试命令示例(替换为你的IP)
openssl s_client connect your_server_ip:443 servername shop.site2.com
Windows Git Bash可用同样命令检测是否返回正确证书记录
IIS高级应用场景扩展
CDN背后的多证书记录处理
当使用Cloudflare等CDN服务时:
客户端 ←HTTPS→ CDN边缘节点 ←专用通道→ IIS源站(可自签名)
此时源站只需配置CDN提供商指定的专用证书即可。
Let's Encrypt自动化续期策略
使用Certbot自动管理多个域名:
certbot certonly --webroot ^
-w C:\inetpub\temp\.well-known acme-challenge ^
-d www.site.com ^
-d shop.site.com ^
--config-dir C:\le-certs ^
--agree-tos --email admin@site.com
certbot certonly --webroot ^
-w C:\inetpub\temp\.well-known acme-challenge ^
-d api.site.net ^
--config-dir C:\le-certs ^
--agree-tos --email admin@site.net
然后通过任务计划程序每月自动运行续期脚本。
FAQ快速排错指南
Q:访问时报ERR_SSL_VERSION_OR_CIPHER_MISMATCH错误?
A:按顺序检查:
① IIS加密套件设置 → PowerShell执行Get-TlsCipherSuite查看启用列表
② Schannel注册表项 → HKLM SYSTEM CurrentControlSet Control SecurityProviders SCHANNEL
③ CDN/防火墙是否过滤了TLS握手
Q:Chrome正常但手机浏览器提示不安全?
A:99%是因为缺少中间CA链 →
① OpenSSL检查完整链 `openssl s_client showcerts connect yourdomain:443`
② IIS中重新导出包含中间CA的pfx
Q:如何验证SNI确实生效?
A:双管齐下验证法 →
① SSLLabs测试报告查看Certificate
X部分
② Wireshark抓包过滤TLS握手包查看Server Name扩展字段
TAG:iis7 配置多个ssl证书,iis设置ssl证书,iis部署ssl证书,iis配置https证书,iis配置多个网站,iis证书配置文件