16.10.2007 10:35:29промежуточный CSP Ответов: 1
Max
Всех приветствую.

Ситуация такова. Есть машина, к ней прицеплен кардридер, в нем смарт-карта. По этой смарткарте происходит вход в домен.
Есть CSP, который при этом используется — от производителя карты.

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

Вопрос — возможно ли это и как это сделать. То есть
1. Как сделать так чтоб при авторизации по данной карте использовался мой CSP, а не оригинальный ?
2. Как из моего мне переправит вызовы в этот оригинальный CSP ?

Заранее спасибо
 
Ответы:
16.10.2007 10:36:32Max
В догонку.

Сделал я так: создал 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."

Вопрос — что я делаю не так? У меня ощущение, что какой-то важный шаг пропущен, только непонятно какой...