У нас есть собственное приложение, которое требует использования клиентских SSL-сертификатов для аутентификации на удаленном сервере (не находящемся под нашим контролем).
Раньше это работало без проблем, но при развертывании на новом сервере у нас возникают проблемы с тем, чтобы Windows 2008 использовала сертификат.
Сертификат существует в виде файла .pfx, который содержит закрытый ключ. Тот же сертификат существует в хранилище LocalMachine, опять же с его закрытым ключом. Мы убедились, что тот, который находится в магазине LocalMachine, верен, создав веб-сайт в IIS для этого сертификата, поэтому мы рады, что сертификат, цепочка сертификатов и закрытый ключ действительны.
PFX был создан путем экспорта из оснастки Certificates MMC.
Проблема в том, что в журналах диагностики системы мы получаем следующее, что говорит о том, что он не может найти закрытый ключ:
System.Net Information: 0 : [5988] SecureChannel#23264094 – Locating the private key for the certificate: [Subject]
CN=internal-server.company.com, OU=Servers, OU=Devices, O=org
[Issuer]
CN=SubCA02, OU=CA, o=org
[Serial Number]
407ABCDE
[Not Before]
31/10/2013 11:08:48 AM
[Not After]
31/10/2016 11:08:48 AM
[Thumbprint]
4354A34F6004F019E60F055979A47E50F62D1504
.
System.Net Information: 0 : [5988] SecureChannel#23264094 – Cannot find the certificate in either the LocalMachine store or the CurrentUser store.
Я проверил отпечаток пальца, эмитента и серийный номер, указанные в журнале, с сертификатом в магазине LocalMachine, и они вступили в брак.
Из того, что я могу судить после долгого поиска, похоже, что это проблема с разрешениями. Пользователю, в котором запущено приложение, был предоставлен доступ к закрытому ключу (личные сертификаты -> щелкните сертификат правой кнопкой мыши -> все задачи -> Управление закрытыми ключами), поэтому теперь я не понимаю, какие разрешения ) возможно, это и является причиной проблемы.
ОБНОВЛЕНИЯ
Мы добавили пользователя приложения в группу «Администраторы», перезагрузили сервер и повторили попытку. Проблема остается.
Мы включили отладку SChannel (согласно http://support.microsoft.com/kb/260729 ). Журнал системных событий сообщает следующее предупреждение:
Удаленный сервер запросил аутентификацию клиента SSL, но не удалось найти подходящий сертификат клиента. Будет предпринята попытка анонимного подключения. Этот запрос SSL-соединения может быть успешным или неудачным в зависимости от настроек политики серверов.
Исключение отказа в доступе .NET не возникает; по сути, SChannel отказывается предоставлять сертификат клиента. Это было проверено с помощью трассировки Wireshark, которая показывает нулевой счетчик сертификатов до того, как удаленный конец принудительно сбросит TCP.