Со временем при просмотре ключевой информации на устройстве eTokenPro 72k (Java) конфигуратор TumarCSP «виснет».
Возможные причины: Устройство неисправно.
Решение: Необходимо обратиться к поставщику услуг.
Со временем перестала отображаться ключевая информация на устройстве eTokenPro 72k (Java).
Возможные причины: В системе, возможно, присутствует инфицированная библиотека ..\Windows\System32\WinSCard.dll.
Решение: Рекомендуем переименовать инфицированную библиотеку в ..\Windows\System32\WinSCard.dll.OLD либо переместить её в другой каталог. Скачать библиотеку WinSCard.dll. Поместить ее вместо инфицированной. После этого необходимо запустить конфигуратор TumarCSP и проверить, исчезла ли вышеописанная проблема.
При запуске СГДС появляется окно криптопровайдера.
Решение: В директории, куда устанавливается СГДС ( по умолчанию это c:\Program Files\NAT\GDMS3\ ), необходимо заменить библиотеку ( файл strlib.dll ). Если окно конфигуратора после этого опять будет появляться, то необходимо проверить - нет ли этого файла еще и в папке \windows\system32, и если он там присутствует - то заменить.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Office.Interop.Word; using Microsoft.Office.Core; namespace testWordsign { class Program { static void Main(string[] args) { // создаем объект MS Word Microsoft.Office.Interop.Word.Application wordapp = new Microsoft.Office.Interop.Word.Application(); object fileName = args[0]; object isVisible = false; object missing = System.Reflection.Missing.Value; object readOnly = true; // открываем только для чтения файл, переданный в командной строке, без запуска экземпляра приложения MS Word (isVisible=false) Microsoft.Office.Interop.Word.Document doc = wordapp.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing); // перечисляем все подписи документа и проверяем каждую из них foreach (Signature sig in doc.Signatures) { if (sig.IsValid) { Console.WriteLine("Имя подписавшего " + sig.Details.SignatureText); Console.WriteLine("Результат проверки - подпись действительна"); } else Console.WriteLine("Результат проверки - подпись недействительна"); } Console.ReadKey(); } } <strong></strong> }
Как запустить TumarCSP конфигуратор?
Кликнуть на иконке на рабочем столе TumarCSP Конфигуратор либо выбрав пункт меню Пуск-Программы-GammaTech-Tumar CSP-TumarCSP Конфигуратор.
Как узнать какие созданы профайлы?
Чтобы узнать какие профайлы созданы в системе нужно запустить TumarCSP конфигуратор. В появившемся окне будет отображен список существующих профайлов.
Как определить наличие ключей в профайле?
Кликнуть левой кнопкой мыши по интересующему профайлу в TumarCSP Конфигуратор. В нижней части окна будут отображены ключи, хранящиеся в профайле с дополнительной информацией о каждом ключе.
Ключи точно есть в профайле, но они не отображаются. Почему?
Такое возможно, если указаны неверные настройки профайла (пароль, параметры устройства хранения, имя контейнера) либо если не указан пароль к ключам.
Как посмотреть/изменить настройки профайла?
Кликнув правой кнопкой мыши по интересующему профайлу, выбрать пункт меню "Изменить профайл".
Как просмотреть сертификаты, хранящиеся в контейнере?
Если в профайле не содержатся сертификаты, то в списке ключей профайла в типе данных будет указано - "Ключ". Если профайл содержит сертфикат - "Ключ и сертификат". Если профайл помимо пользовательского содержит и сертификат УЦ - "Ключ и цепочка сертификатов".
Кликнуть левой кнопкой мыши по интересующему профайлу в TumarCSP Конфигуратор. В нижней части окна будут отображены ключи. Необходимо дважды кликнуть по интересующему ключу. В зависимости от типа хранящейся ключевой информации будет открыт либо сам сертификат, либо консоль mmc. В консоли необходимо дважды кликнуть на значок папки в правой части окна, дойдя до папки с именем "Сертификаты"(Certificates). В этой папке можно выбрать один их хранящихся сертификатов и просмотреть, кликнув по нему.
1 Открыть Kaspersky Internet Security.
2 Выбрать опцию "Настройка".
3 Перейти на вкладку "Контроль программ" и снять галочку "Включить Контроль программ".
4 Перейти на вкладку "Проактивная защита" и отключить опцию "Включить Проактивную защиту".
Сохранить внесенные в настройки изменения.
6 Запустить инсталлятор «ТУМАР-CSP».
7 В окне KIS 2012 "Контроль программ" выбрать вариант "Да, доверяю", далее, следуя мастеру установить ТУМАР-CSP.
8 После перезагрузки запустить TumarCSP Конфигуратор и убедиться, что приложение установлено корректно.
9 Открыть KIS 2012, выбрать "Настройка", перейти на вкладку "Дополнительные параметры" – "Угрозы и исключения".
10 Выбрать "Настройка" раздела "Исключения".
11 Перейти на вкладку "Доверенные программы" и выбрать "Добавить".
12 В диалоговом окне выбора программы выбрать программы, производителем которых является ТОО «НИЛ «Гамма Технологии».
13 В диалоге "Исключения для программы" выбрать все опции и сохранить изменения.
14 Применить все внесенные изменения в настройках KIS 2012.
15 Перейти на вкладку "Центр защиты". Включить отключенные в п. 3-4 компоненты защиты - "Контроль программ" и "Проактивная защита".
16 Сохранить изменения в настройках.
17 Убедиться, что KIS 2012 не блокирует работу ТУМАР-CSP.
Как сформировать запрос на выпуск сертификата в формате PKCS#10?
CPExportKey(hProv,hKey,0,PUBLICKEYBLOB_REQ_P10,0,pbData,&dwData);
где:
hKey - созданный ключ, для которого необходимо сформировать запрос.
Примечания:
Для формирования запроса в текстовом виде (PEM) вместо
PUBLICKEYBLOB_REQ_P10
надо указать
PUBLICKEYBLOB_REQ_P10_PEM.
Как сформировать запрос на выпуск сертификата в формате PKCS#10, подписать и вложить в PKCS#7?
CPExportKey(hProv,hKey,hKeySign,PUBLICKEYBLOB_REQ_P7,0,pbData,&dwData);
где:
hKey - созданный ключ, для которого необходимо сформировать запрос.
hKeySign - ключ подписи с действующим сертификатом.
Примечания:
Для формирования запроса в текстовом виде (PEM) вместо
PUBLICKEYBLOB_REQ_P7
надо указать
PUBLICKEYBLOB_REQ_P7_PEM.
Как сформировать электронный документ в формате PKCS#7?
CPSignHash(hProv,hHash,AT_SIGNATURE,NULL,CRYPT_SIGN_PKCS7,pbData,&dwData);
hHash - вычисленный хэш на данные.
Примечания:
- Для формирования PKCS#7 в текстовом виде (Base64), нужно указать флаг PKCS7_BASE64_ENCODING.
- Для добавления в ЭД сертификатов, перед вызовом CPSignHash нужно выполнить:
CPSetHashParam(hProv,hHash,HP_PKCS7_CERTIFICATE,Cert,0); где:
Cert - блоб с нужным сертификатом.
- Для добавления в ЭД подписываемых данных, перед вызовом CPSignHash нужно выполнить:
CPSetHashParam(hProv,hHash,HP_PKCS7_DATA_SIZE,(BYTE*)&len,0);
CPSetHashParam(hProv,hHash,HP_PKCS7_DATA,Data,0);
где:
len - размер данных.
Data - подписываемые данные.
- Для добавления в ЭД подписываемых атрибутов, перед вызовом CPSignHash нужно выполнить:
CPSetHashParam(hProv,hHash,HP_PKCS9_CUR_OID,(BYTE*)OID_PKCS9_XXX,0);
CPSetHashParam(hProv,hHash,HP_PKCS9A_SIZE,(BYTE*)&len,0);
CPSetHashParam(hProv,hHash,HP_PKCS9A_DATA,(BYTE*)attr,0);
где:
OID_PKCS9_XXX - OID нужного атрибута.
len - размер данных атрибута.
attr - данные атрибута.
- Для добавления в ЭД не подписываемых атрибутов, перед вызовом CPSignHash нужно выполнить:
CPSetHashParam(hProv,hHash,HP_PKCS9_CUR_OID,(BYTE*)OID_PKCS9_XXX,0);
CPSetHashParam(hProv,hHash,HP_PKCS9U_SIZE,(BYTE*)&len,0);
CPSetHashParam(hProv,hHash,HP_PKCS9U_DATA,(BYTE*)attr,0);
где:
OID_PKCS9_XXX - OID нужного атрибута.
len - размер данных атрибута.
attr - данные атрибута.
Как проверить электронный документ в формате PKCS#7?
CPVerifySignature(hProv,hHash,pbData,dwData,hKey,0,0);
где:
pbData - блоб электронного документа в формате PKCS#7.
dwData - размер блоба.
hKey - открытый ключ подписавшего документ.
Примечания:
Если открытый ключ доступен в виде сертификата, то его можно получить вызовом:
CPImportKey(hProv,Cert,len,0,0,&hKey);
Получить размер вложенных в ЭД данных:
CPGetHashParam(hProv,hHash,HP_PKCS7_DATA_SIZE,(BYTE*)&dsize,&len,0);
Получить вложенные в ЭД данные:
CPGetHashParam(hProv,hHash,HP_PKCS7_DATA,data,&dsize,0);
Узнать количество подписей в ЭД:
CPGetHashParam(hProv,hHash,HP_PKCS7_SIGN_COUNT,(BYTE*)&scount,&len,0);
Установить нужную подпись для работы:
CPSetHashParam(hProv,hHash,HP_PKCS7_CUR_SIGN,(BYTE*)&num,0);
Узнать серийный номер сертификата подписавшего:
CPGetHashParam(hProv,hHash,HP_PKCS7_SI_SN,SN,&len,0);
Узнать DN-имя подписавшего:
CPGetHashParam(hProv,hHash,HP_PKCS7_SI_DN,DN,&len,0);
Узнать алгоритм хэш:
CPGetHashParam(hProv,hHash,HP_PKCS7_SI_HASH_AID,(BYTE*)&ai,&len,0);
Узнать алгоритм подписи:
CPGetHashParam(hProv,hHash,HP_PKCS7_SI_SIGN_AID,(BYTE*)&ai,&len,0);
Узнать количество вложенных в ЭД сертификатов:
CPGetHashParam(hProv,hHash,HP_PKCS7_CRT_COUNT,(BYTE*)&dw,&len,0);
Получить все вложенные сертификаты:
len=sizeof(Cert);
if
(CPGetHashParam(hProv,hHash,HP_PKCS7_ENUM_CERT,Cert,&len,CRYPT_FIRST)) {
do {
// работа
len=sizeof(Cert);
} while(CPGetHashParam(hProv,hHash,HP_PKCS7_ENUM_CERT,Cert,&len,0));
}
Узнать значение подписываемого атрибута:
CPSetHashParam(hProv,hHash,HP_PKCS9_CUR_OID,(BYTE*)OID_PKCS9_XXX,0);
CPGetHashParam(hProv,hHash,HP_PKCS9A_SIZE,(BYTE*)&len,&dw,0);
CPGetHashParam(hProv,hHash,HP_PKCS9A_DATA,(BYTE*)attr,&len,0);
Узнать значение не подписываемого атрибута:
CPSetHashParam(hProv,hHash,HP_PKCS9_CUR_OID,(BYTE*)OID_PKCS9_XXX,0);
CPGetHashParam(hProv,hHash,HP_PKCS9U_SIZE,(BYTE*)&len,&dw,0);
CPGetHashParam(hProv,hHash,HP_PKCS9U_DATA,(BYTE*)attr,&len,0);
Узнать тип вложенных данных:
ObjectInfoStr_t p7i;
len=sizeof(p7i);
p7i.object.pbData=Buf;
p7i.object.cbData=size;
CPGetProvParam(hProv,PP_PKCS7_CONTENT_OID,(BYTE*)&p7i,&len,0);
Как зашифровать данные и сформировать цифровой пакет в формате PKCS#7?
1. Устанавливаем сертификаты получателей:
CPImportKey(hProv,Cert,len,0,0,&hExpKeyN);
2. Создаем сессионный ключ:
CPGenKey(hProv,CALG_GOST,CRYPT_EXPORTABLE,&hKey);
3. Шифруем данные:
CPEncrypt(hProv,hKey,0,TRUE,0,Data,&len,size);
4. Формируем PKCS7 для N-го получателя
CPExportKey(hProv,hKey,hExpKeyN,SIMPLEBLOB_P7,CRYPT_DEFAULT_MODE,NULL,&len);
5. Формируем результат
CPExportKey(hProv,hKey,0,SIMPLEBLOB_P7,0,result,&len);
Примечания:
Если зашифрованные данные должны быть включены в PKCS#7, то перед его формированием
CPSetKeyParam(hProv,hKey,KP_PKCS7_DATA_SIZE,(BYTE*)&len,0);
CPSetKeyParam(hProv,hKey,KP_PKCS7_DATA,(BYTE*)Data,0);
Как расшифровать данные в формате цифровой пакет (PKCS#7)?
1. Устанавливаем цифровой пакет (PKCS#7):
CPImportKey(hProv,Data,len,0,0,&hKey)) {
2. Узнаем размер вложенных данных:
CPGetKeyParam(hProv,hKey,KP_PKCS7_DATA_SIZE,(BYTE*)&len,&dw,0);
3. Получаем данные:
CPGetKeyParam(hProv,hKey,KP_PKCS7_DATA,Buf,&len,0);
4. Расшифровываем данные:
CPDecrypt(hProv,hKey,0,TRUE,0,Buf,&len);
Как сформировать OCSP-запрос на получение статуса сертификата?
1. Получим ключ на подпись:
CPGetUserKey(hProv,AT_SIGNATURE,&hExpKey);
2. Загружаем проверяемый сертификат:
CPImportKey(hProv,Cert,len,0,0,&hKey);
3. Формируем OCSP-запрос
CPExportKey(hProv,hKey,hExpKey,PUBLICKEYBLOB_OCSP,0,Buf,&len);
Как работать с ответом OCSP сервера?
1. Установим ответ OCSP сервера:
CPImportKey(hProv,Buf,len,0,0,&hKey);
2. Узнаем время проверки статуса сервером OCSP:
CPGetKeyParam(hProv,hKey,KP_OCSP_REP_TIME,Time,&len,0);
3. Узнаем серийный номер проверенного сертификата:
CPGetKeyParam(hProv,hKey,KP_OCSP_REP_CRT_SN,SN,&len,0);
4. Узнаем статус проверяемого сертификата:
CPGetKeyParam(hProv,hKey,KP_OCSP_REP_CRT_STATUS,(BYTE*)&dw,&len,0);
// 0 - good; 1 - revoked; 2 - unknown
5. Если сертификат был отозван, узнаем когда:
CPGetKeyParam(hProv,hKey,KP_OCSP_REP_REV_TIME,Time,&len,0);
6. Если сертификат был отозван, узнаем причину отзыва:
CPGetKeyParam(hProv,hKey,KP_OCSP_REP_REV_REASON,(BYTE*)&dw,&len,0);
7. Узнаем рекомендуемое время обновления "с":
CPGetKeyParam(hProv,hKey,KP_OCSP_REP_THIS_UPD,Time,&len,0);
8. Узнаем рекомендуемое время обновления "по":
CPGetKeyParam(hProv,hKey,KP_OCSP_REP_NEXT_UPD,Time,&len,0);
9. Получим сертификат подписавшего OCSP-ответ:
CPGetKeyParam(hProv,hKey,KP_CERTIFICATE,Cert,&len,0);
// Проверяем сертификат (см. примеры проверки, с учетом полномочий OCSP)
10. Импортируем сертификат OCSP сервера:
CPImportKey(hProv,Cert,len,0,0,&hKey);
11. Проверяем подлинность ответа сервера:
CPVerifySignature(hProv,0,Buf,len,hKey,NULL,CRYPT_OBJECT_OCSP);
Как сформировать TSP-запрос на получение метки времени для указанного документа?
1. Создеем хэш-объект
CPCreateHash(hProv,CALG_TGR3411,0,0,&hHash);
2. Хэшируем данные
CPHashData(hProv,hHash,(BYTE*)Data,len,0);
3. Устанавливаем политику использования TSP
CPSetHashParam(hProv,hHash,HP_TIME_STAMP_OID,(BYTE*)tsp_policy,0);
4. Если требуется чтобы TSP-сервер вложил свой сертификат: dw=1;
CPSetHashParam(hProv,hHash,HP_TIME_STAMP_CRT,(BYTE*)&dw,0);
5. Формируем запрос
CPGetHashParam(hProv,hHash,HP_TIME_STAMP_REQ,Buf,&len,0);
Как работать с ответом TSA сервера метки времени?
1. Создеем хэш-объект:
CPCreateHash(hProv,CALG_TGR3411,0,0,&hHash);
2. Загружаем в него метку времени:
CPSetHashParam(hProv,hHash,HP_TSTAMP_BODY,Buf,0);
3. Узнаем статус обработки:
CPGetHashParam(hProv,hHash,HP_TSTAMP_STSTUS,(BYTE*)&dw,&len,0);
4. Узнаем хэш:
CPGetHashParam(hProv,hHash,HP_TSTAMP_HASH,hash,&len,0);
5. Узнаем политику:
CPGetHashParam(hProv,hHash,HP_TSTAMP_POLICIE,policy,&len,0);
6. Узнаем время:
CPGetHashParam(hProv,hHash,HP_TSTAMP_TIME,Time,&len,0);
7. Узнаем серийный номер метки времени:
CPGetHashParam(hProv,hHash,HP_TSTAMP_SN,tsp_sn,&len,0);
8. Узнаем NONCE:
CPGetHashParam(hProv,hHash,HP_TSTAMP_NONCE,nonce,&len,0);
9. Узнаем DN:
CPGetHashParam(hProv,hHash,HP_TSTAMP_DN,DN,&len,0);
Примечания:
Так как ответ TSA сервера метки времени имеет формат PKCS#7, проверка подлинности осуществляется по аналогии с примерами проверки подписи PKCS#7.
Для добавления метки времени в электронный документ она помещается как не подписываемый
атрибут и имеет
OID - OID_PKCS9_TIMESTAMPATTR.
Как проверить подлинность сертификата?
CPVerifySignature(hProv,0,Cert,len,0,NULL,CRYPT_OBJECT_CRT);
Как проверить валидность сертификата?
1. Загружаем проверяемый сертификат:
CPImportKey(hProv,Cert,len,0,0,&hKey);
2. Получим информацию о валидности:
CPGetKeyParam(hProv,hKey,KP_CRT_VFROM,(BYTE*)vfr,&len,0);
CPGetKeyParam(hProv,hKey,KP_CRT_VTO, (BYTE*)vto,&len,0);
3. Посмотрим текущее время:
CPGetProvParam(hProv,PP_SYS_TIME,(BYTE*)cur,&len,0);
4. Проверяем валидность:
if (memcmp(vfr,cur,14)>0) Error;
if (memcmp(vto,cur,14)<0) error="" p="">
Как проверить права использования ключа сертификата?
1. Получим информацию о правах использования ключа:
CPGetKeyParam(hProv,hKey,KP_CRT_USAGE,(BYTE*)&dw,&len,0);
2. Проверим, например, можно ли использовать ключ для создания ЭЦП ?
if (dw & CRT_KEYUSAGE_DIGSIGN) - OK;
else - Error;
Как проверить полномочия ключа сертификата?
1. Получим информацию о полномочиях ключа:
CPGetKeyParam(hProv,hKey,KP_CRT_PURPOSES,(BYTE*)&dw,&len,0);
2. Проверим, например, можно ли использовать ключ для подписи
OCSP-ответов ?
if (dw&CRT_PURPOSE_OCSP) - OK;
else - Error;
Как проверить политики использования сертификата?
Получим информацию о всех политиках сертификата:
len=sizeof(policy);
if
(CPGetKeyParam(hProv,hKey,KP_CRT_ENUM_POLICIES,(BYTE*)policy,&len,CRYPT_FIRST))
do {
// принимаем решение по полученной политике
len=sizeof(policy);
}
while(CPGetKeyParam(hProv,hKey,KP_CRT_ENUM_POLICIES,(BYTE*)policy,&len,0));
Как проверить статус сертификата с использованием СОС?
1. Импортируем СОС
CPImportKey(hProv,CRL,len,0,0,&hCRL);
2. Проверяем статус сертификата
CPVerifySignature(hProv,0,Cert,len,hCRL,NULL,CRYPT_OBJECT_REV);
Как проверить подлинность COC?
CPVerifySignature(hProv,0,CRL,len,0,NULL,CRYPT_OBJECT_CRL);
Как узнать какие криптопровайдеры установлены в системе?
Запустить редактор реестра (Пуск-Выполнить-regedit.exe), развернуть ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider. Появившиеся подключи представляют собой список установленных криптопровайдеров
Как узнать версию криптопровайдера?
Чтобы узнать какая версия криптопровайдера установлена нужно зайти в папку C:\Program Files\GammaTech\TumarCSP\lib\, найти там файл cptumar.dll, кликнуть правой кнопкой мыши по нему. В появившемся окне выбрать вкладку Версия (Version).