我正在尝试为托管在 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 certash=adfdffa988bb50736b8e58a54c1eac26ed005050 appid={ffc3e181-e14b-4a21-b022-59fc669b09ff} sslctlidentifier=MyCTL sslctlstorename=CA
(IP 地址已被修改),但我收到此错误:
SSL 证书添加失败,错误:1312 指定的登录会话不存在。它可能已经被终止。
我确信该错误与 CTL 选项有关,因为如果我删除它们,它会起作用(尽管当然没有分配 CTL)。
谁能帮我迈出最后一步并完成这项工作?
2010 年 1 月 7日更新: 我从未使用 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 一起工作?曾经?我在打败一匹死马吗?谷歌只找到我自己的帖子和其他类似的故事。
更新 2/23/10 - 我已经与 Microsoft 确认这是 IIS 7.5 的一个错误,但它确实适用于 IIS 7。查看此链接了解详细信息:http ://rethinker.net/Geek/Configuration/IIS7 -CTLs.htm
2010 年 6 月8 日更新- 我现在可以确认 KB981506 解决了这个问题。有一个与此 KB 相关的补丁,必须将其应用于 Server 2008 R2 机器才能启用此功能。一旦安装好,对我来说一切都完美无缺。
这听起来很奇怪,但您不能使用 IIS 7.0 用户界面来创建证书信任列表 (CTL)。按照以下步骤使用 IIS 7.0 创建 CTL。
使用 MakeCTL.exe 创建 CTL。有关 MakeCTL.exe 的详细信息,请参阅 MSDN 站点上的MakeCTL页。
MakeCTL.exe 工具是.NET Framework SDK 1.1 版的一部分。安装 SDK 后,MakeCTL.exe 将出现在以下位置:
\Program Files\Microsoft.NET\SDK\v1.1\Bin
创建 CTL 后,您必须运行 AdsUtil.vbs 以将 CTL 标识符分配给 MakeCTL.exe 中使用的名称。
adsutil.vbs 设置 w3svc/1/SslCtlIdentifier
MakeCTL.exe 中使用的 CTL 的友好名称在哪里。
adsutil.vbs 设置 w3svc/1/SslCtlStoreName CA
净停止 HTTP /y
网络启动 W3SVC
您必须从 Microsoft 安装此修补程序
KB981506 - 它解决了这个问题。
抱歉,在发布此内容之前,我没有看到答案中引用的 KB
您是否确保 CTL 是在机器的上下文中创建的?默认情况下,SSL 将在机器上下文中查找,如果在那里找不到,它会给你一个错误(虽然不确定这是否是错误)。