![IIS7 中的证书信任列表](https://linux22.com/image/485538/IIS7%20%E4%B8%AD%E7%9A%84%E8%AF%81%E4%B9%A6%E4%BF%A1%E4%BB%BB%E5%88%97%E8%A1%A8.png)
我正在尝试为 IIS7 中托管的 WebService 启用相互身份验证。我已设置并运行服务器端证书,但无法弄清楚如何在 IIS7 中创建和设置证书信任列表,以便我可以要求和验证客户端证书。
我的所有客户端证书均由我自己的根证书签名,因此我需要创建一个仅包含我的根证书的 CTL,然后让 IIS 根据 CTL 验证客户端提供的证书。
有人能解释一下如何做到这一点吗?IIS6 有一个用于分配 CTL 的 UI,但我在 IIS7 中找不到类似的东西。
更新: 我现在已经成功使用向导模式的 MakeCTL 创建了具有友好名称的 CTL。但是我的 IIS7 机器不支持 adsutil,因此我通过其他帖子尝试使用“netsh http add sslcert”命令将 CTL 分配给我的站点。
在使用此命令之前,我必须删除分配给我的站点用于服务器身份验证的现有 SSL 证书。然后,在我的 netsh 命令中,我指定了我删除的那个 SSL 证书的指纹,加上一个虚构的 appid,加上“sslctlidentifier=MyCTL sslctlstorename=CA”。结果命令是:
netsh http 添加 sslcert ipport=10.10.10.10:443 certhash=adfdffa988bb50736b8e58a54c1eac26ed005050 appid={ffc3e181-e14b-4a21-b022-59fc669b09ff} sslctlidentifier=MyCTL sslctlstorename=CA
(IP 地址被混淆),但我收到此错误:
SSL 证书添加失败,错误:1312 指定的登录会话不存在。它可能已被终止。
我确信该错误与 CTL 选项有关,因为如果我删除它们,它就可以起作用(当然,没有分配 CTL)。
有人能帮助我迈出这最后一步并让它成功吗?
更新日期 2010-01-07: 我从未使用 IIS 7.0 解决此问题,后来将我们的应用程序迁移到 IIS 7.5,并再次尝试。根据 Taras Chuhay 的回复,我在测试服务器上安装了 IIS6 兼容性,并尝试使用 adsutil.vbs 记录的步骤(也可以在这里)。我立即遇到了这个错误:
ErrNumber:-2147023584 尝试设置属性时出错:SslCtlIdentifier
运行此命令时:
adsutil.vbs 设置 w3svc/1/SslCtlIdentifier MyFriendlyName
然后我继续尝试记录的下一个 adsutil.vbs 命令,但因同样的错误而失败。
我已经验证我创建的 CTL 具有友好名称 MyFriendlyName,并且它存在于 LocalComputer 的“中级证书颁发机构\证书信任列表”存储中。
所以我又一次陷入了停滞状态。我不知道还能尝试什么。有没有人让 CTL 与 IIS7 或 7.5 一起工作过?曾经有过?我是不是在做无用功。谷歌搜索后,除了我自己的帖子和其他类似的故事外,什么也没找到。
更新日期:2010 年 2 月 23 日- 我已经向 Microsoft 确认这是 IIS 7.5 的一个错误,但它确实适用于 IIS 7。查看此链接了解详情:http://rethinker.net/Geek/Configuration/IIS7-CTLs.htm
更新日期:6/08/10- 我现在可以确认 KB981506 解决了这个问题。有一个与此 KB 相关的补丁,必须将其应用于 Server 2008 R2 计算机才能启用此功能。一旦安装完毕,对我来说一切都完美无缺。
答案1
这听起来很奇怪,但您不能使用 IIS 7.0 用户界面创建证书信任列表 (CTL)。请按照以下步骤使用 IIS 7.0 创建 CTL。
使用 MakeCTL.exe 创建 CTL。有关 MakeCTL.exe 的详细信息,请参阅制作CTLMSDN 网站上的页面。
MakeCTL.exe 工具是.NET Framework SDK 版本 1.1。安装 SDK 后,MakeCTL.exe 会出现在以下位置:
\Program 文件\Microsoft.NET\SDK\v1.1\Bin
创建 CTL 后,必须运行 AdsUtil.vbs 将 CTL 标识符分配给 MakeCTL.exe 中使用的名称。
adsutil.vbs 设置 w3svc/1/SslCtlIdentifier
其中 是 MakeCTL.exe 中使用的 CTL 的友好名称。
- 运行 adsUtil.vbs 来设置 SslCtlStoreName。
adsutil.vbs 设置 w3svc/1/SslCtlStoreName CA
- 运行 AdsUtil.vbs 后,使用以下命令停止 Web 服务:
网络停止 HTTP /y
- 使用以下命令重新启动 WS3SVC 服务:
网络启动 W3SVC
答案2
您必须安装 Microsoft 提供的此修补程序
KB981506 - 它解决了这个问题。
抱歉,直到我发布这篇文章后才看到答案中引用的知识库
答案3
您是否确保 CTL 是在计算机上下文中创建的?默认情况下,SSL 将在计算机上下文中查找,如果在那里找不到,它将给出错误(虽然不确定是否是这个错误)。