我已经在 Google 上搜索了好几个小时。我无法使我的映射在某些证书字段上工作。请参考此示例代码:
<iisClientCertificateMappingAuthentication enabled="true" manyToOneCertificateMappingsEnabled="true">
<manyToOneMappings>
<add name="Contoso Employees"
enabled="true"
permissionMode="Allow"
userName="Username"
password="[enc:AesProvider:57686f6120447564652c2049495320526f636b73:enc]">
<rules>
<add certificateField="Subject"
certificateSubField="O"
matchCriteria="MyCompany A/S CVR:12345"
compareCaseSensitive="true" />
</rules>
</add>
</manyToOneMappings>
</iisClientCertificateMappingAuthentication>
这不管用。我怀疑 matchCriteria="MyCompany A/S CVR:12345"。如果我将它映射到 certificateSubField="C" 和 matchCriteria="DK" 上,那么它就可以正常工作。我也尝试过这种组合 matchCriteria="MyCompany*",其中我使用了通配符 *,但它仍然不起作用。如果我只使用 matchCriteria="*" 中的 *,那么它就可以正常工作,但这又是一个无用的匹配。
我使用 certutil 检查了它为子字段 CN、O 和 C 提供的值。CN 和 O 具有相似的值:MyCompany A/S CVR:12345 它们都包含空格和特殊字符。
我如何在 II 7.5 中进行这种匹配?我应该提到,在 IIS 6 中,对完全相同的值的这种映射可以正常工作。
答案1
我自己搞明白了。这是因为如果证书颁发者、主体采用 UTF8 编码字符串,iisclientcertificate 映射就会失败。这是 IIS 7 和 7.5 的已知问题。
Microsoft 提供了一个修复此问题的修补程序。请查看知识库文章 2597665: