WCF — сертификат x509 со смарт-карты — «Не удается проверить подпись»

У меня есть служба WCF, работающая на IIS6, которая настроена с помощью WSHTTPBinding с использованием параметра безопасности «Транспорт с учетными данными сообщения» (с учетными данными транспортного клиента, установленными на «Нет», а для сообщения — «Сертификат». Это используется Клиент .NET, созданный с помощью автоматически сгенерированного кода при использовании службы в VS 2010.

В моей среде разработки я создал сертификат, который действует как сертификат службы и SSL-сертификат IIS, и, поскольку мне было лень, я экспортировал сертификат для использования с моим клиентским приложением. В этой конфигурации все отлично работает, но это не целевая среда. Идея состоит в том, чтобы пользователи использовали свои смарт-карты для доступа к этой услуге. Сервер не будет находиться в том же домене, и LDAP на данный момент запрещен.

Проблема в том, что теперь я получил это в тестовой лаборатории и настроил среду, в которой сертификат SSL был выдан тем же ЦС, что и сертификаты пользователя, и я создал собственный валидатор x509 Cert и учетные данные службы, но после первоначального вызова для моего валидатора что-то происходит между передачей и выдает ошибку в журнале трассировки службы, говоря: «Ошибка проверки безопасности сообщения» с внутренним исключением «Не удается проверить подпись». Поскольку он проходит через мой пользовательский валидатор, и я зарегистрировал сообщение, все выглядит нормально на стороне SOAP, и я получаю сертификат на другой стороне. Я убедился, что каждый сертификат, который я пытаюсь использовать, находится в хранилище «Доверенные пользователи», и даже пытался экспортировать сертификаты и помещать их в «Личное» хранилище локального компьютера, но безуспешно.

У меня такое ощущение, что я не совсем понимаю использование сертификата службы и сертификата клиента в файле web.config. Может кто-нибудь, пожалуйста, помогите мне здесь?


person iMortalitySX    schedule 18.06.2012    source источник


Ответы (1)


Итак, мне удалось ответить на свой вопрос с некоторой помощью моего коллеги. После того, как мы сели вместе и начали задавать мне кучу вопросов и делать несколько случайных поисков в Google, мы решили изменить кое-что в конфигурации, что меня удивило.

Итак, чтобы закончить мой вопрос вверху, я установил учетные данные сообщения «Сертификат» с набором алгоритмов шифрования, установленным на «TripleDesSha256Rsa15». Выяснилось, что сертификаты на смарт-карте или сама карта будут поддерживать только Sha1 (чего нельзя было сделать со всем остальным). Когда мы изменили настройку на «Basic256», все заработало. В конце концов я смог установить его на «TripleDesRsa15», и он продолжал работать.

По сути, WCF отправляет сертификат без закрытого ключа, поскольку не может получить к нему доступ с помощью этого алгоритма шифрования. WCF НЕ выдает исключение при попытке доступа к сертификату, он выдает его только на стороне сервера с исключением «Не удалось проверить подпись». Хотелось бы, чтобы было написано «Подписи не было», потому что это было бы немного легче отследить. Я не знаю, найдет ли это кому-нибудь когда-нибудь полезное, но если вы это сделаете и сможете найти ссылку на «Правильный» способ использования смарт-карт с WCF, опубликуйте его со ссылкой.

В общем, проверьте алгоритм шифрования, который вы пытаетесь использовать, и убедитесь, что он работает со смарт-картами/сертификатами, которые вы планируете использовать.

person iMortalitySX    schedule 19.06.2012