昨天发现一个现象,如果:

  1. 一个cert是由Windows 2003 Certificate Service颁发的,而且Subject CN中带有下划线("_"),例如SPK_PARTNER_ADCENTER;
  2. IIS中创建了client cert mapping,rule是Subject CN = SPK_PARTNER_ADCENTER;

这种情况下,当客户端用这个cert来访问时,这条mapping rule会被跳过。

例如,我的三个cert的Subject分别是:

Subject: E=nssdev@microsoft.com CN=SPKPARTNERADCENTER OU=SPG O=Microsoft L=Redmond S=WA C=US Subject: E=nssdev@microsoft.com CN=SPK_PARTNER_ADCENTER OU=SPG O=Microsoft L=Redmond S=WA C=US Subject: CN=SPK_PARTNER_CSS OU=SPG O=MS L=Redmond S=WA C=US E=test@microsoft.com

为这三个cert创建的client cert mapping rule分别是:

用三个cert分别访问IIS,结果是: 第一个cert (SPKPARTNERADCENTER)和第三个cert (SPK_PARTNER_CSS)分别能够被第一个mapping rule和第三个mapping rule对应到,但第二个cert (SPK_PARTNER_ADCENTER)会跳过第二个mapping rule。

这三个cert的区别是: 前两个都是从Windows 2003 Certification Service颁发出来的,Email在他们的Subject中排在第一个;第三个cert是很早以前就在用的,不知道是不是Windows 2003 Certification Service颁发的,但至少第三个cert的Email是Subject里最后一个值。

这真是一件神奇的事情。我不知道为什么当Subject里的顺序是E= CN= 且CN带有下划线的时候IIS Client Cert Mapping会失败。估计是一个Bug。反正以后CN里面只用A-Za-z就是了。