| ||||
| ||||
Всех приветствую. Ситуация такова. Есть машина, к ней прицеплен кардридер, в нем смарт-карта. По этой смарткарте происходит вход в домен. Есть CSP, который при этом используется — от производителя карты. Задача — написать свой CSP, который бы подменил собой существующий и делал бы только одно — переправлял все вызовы в оригинальный CSP от прозводителя. Надо это в будущем для возможности авторизации на удаленной машине с помощью смарткарты — ведь прехваченные вызовы можно отправить куда угодно... Вопрос — возможно ли это и как это сделать. То есть 1. Как сделать так чтоб при авторизации по данной карте использовался мой CSP, а не оригинальный ? 2. Как из моего мне переправит вызовы в этот оригинальный CSP ? Заранее спасибо | ||||
Ответы: | ||||
| ||||
В догонку. Сделал я так: создал dll с нужными функциями на экспорт, каждая ф-я примерно такого вида BOOL WINAPI CPReleaseContext( IN HCRYPTPROV hProv, IN DWORD dwFlags) { BOOL result; typedef BOOL (WINAPI* PFUNC)(HCRYPTPROV,DWORD); PFUNC pFunc = (PFUNC)GetProcAddress(GetOriginalCSP(),"CPReleaseContext"); result = pFunc(hProv,dwFlags); Log("%s(%p) returned %d\n",__FUNCTION__,pFunc,result); return result; } Ну то есть берется указатель на соответствующую функцию из csp от производителя смарткарты и вызывается, а результат отдается обратно. Библиотека зарегистрирована, все как сказано в cspsdk Теперь надо было, чтоб логон в систему проходил с использованием моего csp. Это я пытался делать двумя способами. Сначала тупо менял в реестре в ключах для конкретной смарткарты имя криптопровайдера на мое. При попытке логона по карте вызовы в мою библиотек идут, и даже проходят без ошибок, но входа в систему не происходит. В Event Log'e системы при этом появляется "An error occurred while verifying a signed message using the inserted smart card: ASN1 unexpected end of data." Второй способ — вызвал SCardSetCardTypeProviderName и устанавливал свой CSP для карты с помощью этой функции. Ну тут вообще, вызовы даже не приходят в мою библиотеку. А в Event Log'e системы появляется "An error occurred while retrieving a digital certificate from the inserted smart card. The keyset is not defined." Вопрос — что я делаю не так? У меня ощущение, что какой-то важный шаг пропущен, только непонятно какой... | ||||