Я гуглил это часами. Я не могу заставить свое отображение работать с определенными полями сертификата. 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.
Я сам разобрался. Это связано с тем, что сопоставление iisclientcertificate не выполняется, если поставщик сертификата, субъект находятся в строке в кодировке UTF8. Это известная проблема с IIS 7 и 7.5.
Это исправление от Microsoft. Взгляните на статью базы знаний 2597665: