Почему RSACryptoServiceProvider.VerifyHash требуется проверка LDAP? - PullRequest
5 голосов
/ 06 октября 2008

Недавно я столкнулся со странной проблемой с RSACryptoServiceProvider.VerifyHash.

У меня есть веб-приложение, использующее его для расшифровки. Когда пользователи, работающие с веб-сервисом, делали это через наш VPN, это становилось очень медленным Когда у них не было связи или подключения к интернету, они были в порядке.

После долгих копаний я обнаружил, что каждый раз, когда вызывается RSACryptoServiceProvider.VerifyHash, он делает LDAP-запрос на проверку MyMachineName\ASPNET.

Этого не происходит с нашими серверами WebDev (на основе cassini), так как они работают как текущий пользователь, и это только очень медленно в VPN, но это не должно происходить вообще.

Это кажется неправильным по нескольким причинам:

  • Почему он проверяет контроллер домена на пользователя локальной машины?
  • Почему это важно? Шифрование / дешифрование работает независимо.

Кто-нибудь знает, почему это происходит или как лучше обойти это?

Ответы [ 2 ]

7 голосов
/ 06 октября 2008

Из этого КБ это выглядит как «морщина» в коде, который требует сортировки:

http://support.microsoft.com/kb/948080

1 голос
/ 06 октября 2008

Спасибо (+1 и ответ)

Проверено и работает.

Из статьи базы знаний:

Методы SignData или VerifyData всегда выполнять запрос поиска OID который отправляется на домен контроллер, даже когда приложение работает в локальной учетной записи пользователя. Это может вызвать медлительность при подписании или проверка данных. Ошибка входа события аудита происходят на DC, потому что локальный пользователь клиентского компьютера учетная запись не распознана домен. Поэтому поиск OID терпит неудачу.

Это именно то, что мы видели.

Мы изменили эту строку:

rsa.VerifyHash( hashedData, CryptoConfig.MapNameToOID( "SHA1" ), signature );

К этому:

rsa.VerifyHash( hashedData, null, signature );

И это исправило.

...