April 1, 2013

Сказ о том, как из-под MSIE10 сертификаты запрашивать

Службы сертификации в Windows Server - вещь, безусловно, хорошая и нужная.
К сожалению, иногда появляются ситуации, когда работают они не так, как того следовало бы ожидать.
В частности, если у вас на Windows Server 2008 R2 установлен апдейт, обновляющий Internet Explorer до 10-й версии, то при онлайн-запросе сертификатов могут возникнуть вот такие казусы:








Один из workaround-ов - запустить IE в режиме совместимости. К сожалению, на серверной версии Windows это не работает:



Выход - найти на сервере служб сертификации файлик, находящийся по пути:
%systemroot%\system32\certsrv\en-us\certsbrt.inc


























Открыть его как текстовый файл и найти строчки:

Function IsOldMSIE(sHttpUserAgent)
   Dim nMSIE
   Dim sMSIEVersion
  
   nMSIE = InStr(sHttpUserAgent, "MSIE")
  
   If nMSIE=0 Then
      IsOldMSIE = False

   ElseIf nMSIE+5 < Len(sHttpUserAgent) Then
      sMSIEVersion = Mid(sHttpUserAgent, nMSIE+5, 1)
      IsOldMSIE = CInt(sMSIEVersion) < NEW_MSIE_VERSION

   Else
      IsOldMSIE = False
   End If

End Function

По рецепту, найденному на форуме Technet, нам нужно изменить этот участок кода следующим образом, добавив одну строчку условия:

Function IsOldMSIE(sHttpUserAgent)
   Dim nMSIE
   Dim sMSIEVersion
  
   nMSIE = InStr(sHttpUserAgent, "MSIE")
  
   If nMSIE=0 Then
      IsOldMSIE = False

   ElseIf nMSIE+5 < Len(sHttpUserAgent) Then
      sMSIEVersion = Mid(sHttpUserAgent, nMSIE+5, 1)
 If sMSIEVersion = "1" Then sMSIEVersion = Mid(sHttpUserAgent, nMSIE+5, 2)     

IsOldMSIE = CInt(sMSIEVersion) < NEW_MSIE_VERSION
   Else
      IsOldMSIE = False
   End If

End Function

К сожалению, данный файлик не редактируется просто так. Если посмотреть его свойства, то прав на запись ни у администратора, ни у пользователя нет, да и добавить их получится не сразу:






























Остановим на всякий случай сервис служб сертификации:



Поменяем владельца файла либо на текущего пользователя, либо на группу безопасности, в которой он находится:




























Дадим все необходимые права (по желанию - затем вернуть все параметры NTFS в исходное
положение):

























Теперь можно редактировать и сохранять файл.
Запустим сервис служб сертификации заново:



И попробуем запросить сертификат еще раз:

Сложно объяснить, почему так происходит и почему до сих пор не выпущен патч, устраняющий этот казус. Не всегда удобно запрашивать сертификаты через интерфейс MMC, либо через другие оснастки.