我一直在Google上search几个小时。 我无法让我的映射在某些证书字段上工作。 Fx这个示例代码:
<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 *”,我使用通配符charachter *,但它仍然不起作用。 如果我只使用*作为matchCriteria =“*”,那么它可以工作,但是这又是一个无用的匹配。
我使用certutil进行了检查,看看它为CN,O和C子域提供了什么值。CN和O具有相似的值:MyCompany A / S CVR:12345它们都包含空格和特殊字符。
我如何在II 7.5中做这个匹配? 我应该提到,这个映射完全相同的值在IIS 6中工作正常。
我自己想清楚了。 这是因为如果证书颁发者,主体是UTF8编码的string,iisclient证书映射失败。 这是IIS 7和7.5的已知问题。
有一个来自Microsoft的修补程序修复此问题。 看看知识库文章2597665:
“IIS中的证书映射规则不适用于在Windows Server 2008,Windows Vista,Windows Server 2008 R2或Windows 7中具有Unicode编码属性的客户端证书”