CryptGetProvParam в MS CryptoAPI 2.0
(GetLastError() == 0x80090016 ) " The default key container does not exist.\n" " Create a default container and generate keys \n" " Using the code in \n" " Example C Program: Creating a Key Container and Generating Keys \n" " Before running this program. \n" "A genral error runing CryptAcquireContext." cbData = 1000; "Provider name: %s\n" "Error reading CSP name. \n" cbData = 1000; "CryptGetProvParam succeeded. \n" "Key Container name: %s\n" "Error reading key container name. \n" "CryptcontextAddRef succeeded. \n" "Error during CryptContextAddRef!\n" "The first call to CryptReleaseContext succeeded. \n" "Error during CryptReleaseContext! #1 \n" "The second call to CryptReleaseContext succeeded. \n" "Error during CryptReleaseContext #2 !\n" "CryptAcquireContext succeeded. \n" "New key set created. \n" "Error during CryptAcquireContext for a new key\ \ncontainer. A container with this name probably \ \nalready exists. \n" "Created a signature key pair.\n" "Error occurred creating a signature key.\n" CryptDestroyKey( hKey ); "CryptReleaseContext succeeded. \n" "Error during CryptReleaseContext!\n" "Acquired the key set just created. \n" "Error during CryptAcquireContext!\n" "CryptReleaseContext succeeded. \n" "Error during CryptReleaseContext!\n" "CryptAcquireContext succeeded. \n" "Error during CryptAcquireContext!\n"
- Требования:
- CryptoPro
- Поддерживаемые браузеры
- Установка и настройка
- NPM
- Bower
- Установка КриптоПРО CSP в Linux / OSX
- Установка КриптоПРО ЭЦП browser plug-in в Linux
- Настройка плагина для Firefox (до версии 52):
- Установка сертификатов в Linux
- API
- Доступные методы
- License
- Пример установки отдельно взятого сертификата из контейнера
- Установка сертификатов используя КриптоПРО в Linux
Требования:
Windows 2000/XP/2003: Необходимо Windows 2000 SP4 или
старше с Internet Explorer 6.0 или старше.
Windows NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP
2.0 ).
Solaris: 9 Update 4 или выше.
FreeBSD: FreeBSD 5.2 или выше
Linux: RedHat 7.3, RedHad 9.0.
Ядро Windows NT: не поддерживает.
hopyres Оставлено | |
Поставил КриптоПРО из AUR релиз 5.0.12330 с рукоприкладством, потому как другие пакеты скачиваются и ставятся без вопросов. Цитата: CSP (Type:80) v5.0.10010 KC1 Release Ver:5.0.11455 OS:Linux CPU:AMD64 FastCode:READY:AVX. Error 0x8009000a: Указан неправильный тип. Что ему нужно? Отредактировано пользователем 20 января 2022 г. 10:28:27(UTC) | |
Андрей * Оставлено | |
Автор: hopyres Поставил КриптоПРО из AUR релиз 5.0.12330 с рукоприкладством, потому как другие пакеты скачиваются и ставятся без вопросов. Цитата: CSP (Type:80) v5.0.10010 KC1 Release Ver:5.0.11455 OS:Linux CPU:AMD64 FastCode:READY:AVX. точно 12330? | |
nickm Оставлено | |
Автор: hopyres Поставил КриптоПРО из AUR релиз 5.0.12330 с рукоприкладством, потому как другие пакеты скачиваются и ставятся без вопросов. Похоже на то, что “кривой” config64.ini. | |
Санчир Момолдаев Оставлено | |
1) скзи – товар двойного назначения. тиражирование скзи – сертифицированное фсб действие. как считаете пойдет ли aur на сертифицикацию фсб? 2) не все скрипты перенесены в скрипты пакета из аура. Код:
Отредактировано пользователем 19 января 2022 г. 10:44:59(UTC) | |
hopyres Оставлено | |
Автор: Андрей * Автор: hopyres Поставил КриптоПРО из AUR релиз 5.0.12330 с рукоприкладством, потому как другие пакеты скачиваются и ставятся без вопросов. Цитата: CSP (Type:80) v5.0.10010 KC1 Release Ver:5.0.11455 OS:Linux CPU:AMD64 FastCode:READY:AVX. точно 12330? Само приложение пишет 5.0.11455, а в AUR файле PKGBUILD указана версия 12330 | |
Санчир Момолдаев Оставлено | |
скачайте дистрибутив 5.0.12330 подложите его к pkgbuild и переустановите пакет | |
hopyres Оставлено | |
Автор: Санчир Момолдаев скачайте дистрибутив 5.0.12330 подложите его к pkgbuild и переустановите пакет Подкинул ему дистрибутив с официального сайта и всё заработало. | |
Три варианта.
1. Сертификат установлен в ключевой контейнер на дискете.
Тогда, после открытия контейнера с дискеты можно считать ключ – CryptGetUserKey, если известен его тип – AT_KEYEXCHANGE или AT_SIGNATURE (если не известен – попробовать оба). Далее вызов CryptGetKeyParam с параметром KP_CERTIFICATE – получите контекст сертификата PCCERT_CONTEXT, откуда можно будет взять любую информацию.
2. Сертификат НЕ установлен в ключевой контейнер на дискете, но установлен (с привязкой к ключевому контейнеру) в хранилище “Личные” текущего пользователя Win.
Тогда обратная ситуация – перечисляете все сертификаты из хранилища и вызываете функцию открытия ключевого контейнера, пока не попадёте на этот контейнер.
3. Сертификат НЕ установлен ни в ключевой контейнер на дискете, ни в хранилище сертификатов Win с привязкой к ключу, но можно перечислить “подозрительные” (в смысле, потенциально соответствующие ключевому контейнеру) сертификаты из файла(ов) или из хранилищ. Тогда, для каждого перечисляемого сертифката – импорт открытого ключа в блоб и сравнение с блобом, импортированным из контейнера.
HCRYPTPROV hCertContainer = 0;
HCRYPTKEY hKey = 0;
LPBYTE pbUserCert;
DWORD dwCertLen;
PCCERT_CONTEXT pUserCert=0;
DWORD dwUserCertLength=0;
if(!CryptAcquireContext(&hCertContainer,
“888”, //это имя контейнера
NULL,
75, //это тип CSP – ГОСТ ..2001
0
))
HandleError(“CryptAcquireContext”);
if(!CryptGetUserKey(
hCertContainer,
AT_KEYEXCHANGE,
&hKey))
HandleError(“CryptGetUserKey”);
/* Получить сертификат.*/
if (!CryptGetKeyParam (hKey, KP_CERTIFICATE, NULL,
&dwUserCertLength, 0)) {
HandleError (“Error during GetKeyParam.\n”);
}
pbUserCert = malloc (dwUserCertLength);
if (pbUserCert == NULL) {
HandleError (“Error during malloc.\n”);
}
if (!CryptGetKeyParam (hKey, KP_CERTIFICATE, pbUserCert,
&dwUserCertLength, 0)) {
HandleError (“Error during GetKeyParam.\n”);
}
/* Декодировать сертификат */
pUserCert = CertCreateCertificateContext (
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, pbUserCert,
dwUserCertLength);
if (pUserCert == NULL) {
HandleError (“Error during CertCreateCertificateContext.\n”);
}
CryptReleaseContext(hCertContainer,0);
function GetCertNameFromCurrentContainer() : String;
var l : Cardinal;
CryptProv : HCRYPTPROV;
UserKey : HCRYPTKEY;
ProvName : String;
ProvType : Cardinal;
Container : String;
Cert_Info : String;
Cert_Context : PCCERT_CONTEXT;
TypePara : Cardinal;
Cert_Name : String;
begin
{
// Достать имя и тип первого провайдера
// Оставляю этот закомментаренный блок на случай, если понадобится узнать имя и тип провайдера
R := CryptEnumProviders(0, nil, 0, ProvType, nil, l);
if not R then begin ShowMessage(‘Ошибка узнавания длинны имени провайдера’); exit; end;
SetLength(ProvName, l);
R := CryptEnumProviders(0, nil, 0, ProvType, PChar(ProvName), l);
if not R then begin ShowMessage(‘Ошибка узнавания имени провайдера’); exit; end;
SetLength(ProvName, l – 1);
ShowMessage(‘Провайдер ‘ + IntToStr(ProvType) + ‘ [‘ + ProvName + ‘]’);
AddToLogText(‘Тип = ‘ + IntToStr(ProvType) + ‘ Имя = [‘ + ProvName + ‘]’);
AddToLogText(‘Имя (Hex) = [‘ + StringToHex(ProvName) + ‘]’);
}
ProvType := 75;
ProvName := ‘Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider’;
CryptProv := 0;
try
try
CheckError(CryptAcquireContext(CryptProv, nil, PChar(ProvName),
ProvType, CRYPT_VERIFYCONTEXT));
except
on E : Exception do begin
raise AddExceptionHeaderFooter(E, CryptoPro_Err_Prov_Connect, ”, [ProvName]);
end;
end;
// Узнаем имя контейнера
// Размер
l := 0;
try
CheckError(CryptGetProvParam(CryptProv, PP_ENUMCONTAINERS, nil, l, CRYPT_FIRST));
except
on E : Exception do begin
raise AddExceptionHeader(E, CryptoPro_Err_Get_Container_Name_Len);
end;
end;
SetLength(Container, l);
// Собственно имя
try
CheckError(CryptGetProvParam(CryptProv, PP_ENUMCONTAINERS, PByte(PChar(Container)), l, CRYPT_FIRST));
except
on E : Exception do begin
raise AddExceptionHeader(E, CryptoPro_Err_Get_Container_Name_Len);
end;
end;
finally
if (CryptProv <> 0)
then CryptReleaseContext(CryptProv, 0);
end;
// Переподключимся к конкретному контейнеру
CryptProv := 0;
try
try
CheckError(CryptAcquireContext(CryptProv, PChar(Container), PChar(ProvName),
ProvType, 0));
except
on E : Exception do begin
raise AddExceptionHeaderFooter(E, CryptoPro_Err_Prov_Container_Connect, ”, [ProvName, Container]);
end;
end;
try
CheckError(CryptGetUserKey(CryptProv, AT_KEYEXCHANGE, UserKey));
except
on E : Exception do begin
raise AddExceptionHeader(E, CryptoPro_Err_Get_Key);
end;
end;
try
CheckError(CryptGetKeyParam(UserKey, KP_CERTIFICATE, nil, l, 0));
except
on E : Exception do begin
raise AddExceptionHeader(E, CryptoPro_Err_Get_Cert_Len);
end;
end;
SetLength(Cert_Info, l);
try
CheckError(CryptGetKeyParam(UserKey, KP_CERTIFICATE, PByte(PChar(Cert_Info)), l, 0));
except
on E : Exception do begin
raise AddExceptionHeader(E, CryptoPro_Err_Get_Cert);
end;
end;
Cert_Context := nil;
try
Cert_Context := CertCreateCertificateContext(X509_ASN_ENCODING, PByte(PChar(Cert_Info)), l);
if (Cert_Context = nil) then begin
raise Exception.Create(CryptoPro_Err_CreateCertificateContext);
end;
l := 0;
l := CertGetNameString(Cert_Context, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, @TypePara, nil, l);
if (l <= 0) then begin
raise Exception.Create(CryptoPro_Err_Get_Cert_Name_Len);
end;
SetLength(Cert_Name, l);
l := CertGetNameString(Cert_Context, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, @TypePara, PChar(Cert_Name), l);
if (l <= 0) then begin
raise Exception.Create(CryptoPro_Err_Get_Cert_Name);
end;
SetLength(Cert_Name, l – 1);
Result := Cert_Name;
finally
CertFreeCertificateContext(Cert_Context);
end;
finally
if (CryptProv <> 0)
then CryptReleaseContext(CryptProv, 0);
end;
end;
Не привожу сдесь константы сообщений об ошибках и процедуру проверки результата CheckError – и без них все понятно.
Kursor Оставлено | |
Добрый день, случилось такая беда. Есть Astra Linux с КриптоПро CSP 5.0 и связкой с КриптоПро HSM. Все работает – красота. После обновления до 5.0R2 все не работает – ужас. После отката обратно на версию 5.0 все работает – красота. Далее подробнее: При попытки обновить КриптоПро 5.0 (v5.0.10003 KC2) до КриптоПро 5.0 R2 (v5.0.10008 KC2) возникают следующие ошибки: Код:
2. При настройки пакета lsb-cprocsp-kc2-64 (5.0.12000-6) Код:
При попытки проверки связи с КриптоПро HSM получаем ошибку (если откатиться на КриптоПро 5.0 (v5.0.10003 KC2) то ошибка исчезает): Код:
В логах stunnel следующе: 2021.07.23 12:43:41 LOG7[17866:0]: clientk2 accepted FD=10 from unix socket Сведения о ОС: Отредактировано пользователем 26 июля 2021 г. 10:27:38(UTC) | |
Александр Лавник Оставлено | |
Автор: Kursor Добрый день, случилось такая беда. Есть Astra Linux с КриптоПро CSP 5.0 и связкой с КриптоПро HSM. Все работает – красота. После обновления до 5.0R2 все не работает – ужас. После отката обратно на версию 5.0 все работает – красота. Далее подробнее: При попытки обновить КриптоПро 5.0 (v5.0.10003 KC2) до КриптоПро 5.0 R2 (v5.0.10008 KC2) возникают следующие ошибки: Код:
2. При настройки пакета lsb-cprocsp-kc2-64 (5.0.12000-6) Код:
При попытки проверки связи с КриптоПро HSM получаем ошибку (если откатиться на КриптоПро 5.0 (v5.0.10003 KC2) то ошибка исчезает): Код:
В логах stunnel следующе: 2021.07.23 12:43:41 LOG7[17866:0]: clientk2 accepted FD=10 from unix socket Сведения о ОС: Здравствуйте. Вопрос решается в рамках обращения № 39682 на портале технической поддержки. | |
CryptoPro
Единое, асинхронное API для взаимодействия с КриптоПРО ЭЦП Browser Plug-In (IE8+)
Поддерживаемые браузеры
Список необходимых полифиллов (подключаются самостоятельно):
- Promise
- EventTarget.addEventListener
- Array.prototype.forEach
- Array.prototype.map
Установка и настройка
NPM
Bower
Для корректной работы используйте:
- КриптоПРО CSP (v3.6+) рекомендуется использование только сертифицированных версий. Инструкция по установке:
- Linux / OSX
- (в Windows следуйте указаниям программы-установщика)
- КриптоПРО ЭЦП browser plug-in (v1.5+). Инструкция по установке:
- Linux
- (в Windows и OSX следуйте указаниям программы-установщика)
Затем установите необходимые сертификаты в систему. Инструкция для Linux / OSX.
Установка КриптоПРО CSP в Linux / OSX
Процесс установки в OSX незначительно отличается от Linux, поэтому описание приведено на примере дистрибутива семейства Debian (x64).
Некоторые команды могут потребовать запуска с sudo.
Названия файлов и директорий могут отличаться из-за различий в версиях.
После загрузки КриптоПРО CSP для нужной платформы, распакуйте архив:
Запустите скрипт установки:
Проверьте отсутствие cprocsp-rdr-gui:
Установите дополнительно cprocsp-rdr-gui-gtk:
Дополнительная информация по установке
Установка КриптоПРО ЭЦП browser plug-in в Linux
Загрузите КриптоПРО ЭЦП browser plug-in и распакуйте его:
Сконвертируйте rpm в deb пакеты при помощи утилиты alien:
Проверьте наличие файлов плагина:
Настройка плагина для Firefox (до версии 52):
После настройки плагина на страницах, запрашивающих работу с ЭП в панели навигации, рядом с url будет кнопка,
позволяющая “разрешить и запомнить” использование установленного плагина.
Перезапустите Firefox, и убедитесь в наличии CryptoPRO Cades plugin (см. Menu -> Addons).
Установка сертификатов в Linux
В OSX процесс схож с Linux.
Подключите USB носитель с ключевыми контейнерами и проверьте результат команды:
Скопируйте ключевой контейнер \\.\FLASH\.\sidorov на жесткий диск:
Проверьте наличие нового контейнера \\.\HDIMAGE\sidor:
Установите личный сертификат:
Возможно в выводе вы ссылку на сертификат УЦ
При необходимости загрузите сертификат удостоверяющего центра и установите его командой:
После чего, при проверке установленного личного сертификата вы увидите PrivateKey Link: Yes:
API
Пример работы с API лежит в папке example.
Доступные методы
Список доступных методов можно посмотреть в файле src/api.js.
License
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро CSP 5.0
»
Сертификат выданный налоговой JaCarta-2 PRO/ГОСТ не видит КриптоПро 5.0
PavelNN Оставлено | |
Прошу помощи в решении следущей проблемы. В налоговой получил бесплатную ЭЦП на токен JaCarta-2 PRO/ГОСТ (Номер модели JC234-12T.F16F20T01) Установил единый клиент JaCartaUnifiedClient_2.13.3.3108_win-x64_ru-Ru Единый клиент токен видит, на закладке ГОСТ показывает записанный в налоговой сертификат, позволяет экспортировать сертификат в файл. КриптоПро не видит токен и соответственно сертификат. Для проверки пытался войти в кабинет на сайте налоговой на компьютере с КриптоПро версии 4 – те же самые ошибки. Несколько команд csptest под спойлером: Отредактировано пользователем 13 октября 2021 г. 15:31:18(UTC) | |
Александр Лавник Оставлено | |
Автор: PavelNN Прошу помощи в решении следущей проблемы. В налоговой получил бесплатную ЭЦП на токен JaCarta-2 PRO/ГОСТ (Номер модели JC234-12T.F16F20T01) Установил единый клиент JaCartaUnifiedClient_2.13.3.3108_win-x64_ru-Ru Единый клиент токен видит, на закладке ГОСТ показывает записанный в налоговой сертификат, позволяет экспортировать сертификат в файл. КриптоПро не видит токен и соответственно сертификат. Для проверки пытался войти в кабинет на сайте налоговой на компьютере с КриптоПро версии 4 – те же самые ошибки. Несколько команд csptest под спойлером: Здравствуйте. Попробуйте использовать сборку КриптоПро CSP 5.0 R2 с библиотеками PKCS#11 для токенов. | |
1 пользователь поблагодарил Александр Лавник за этот пост. | |
PavelNN Оставлено | |
Александр, спасибо, всё получилось! На сайте налоговой удалось запустить процедуру создания личного кабинета. Еще раз спасибо за оперативный и результативный ответ. | |
Grey Оставлено | |
Добрый день. Панель управления – КриптоПро CSP – Оборудование – Настроить считыватели – Считыватель смарт-карт PKCS#11 – Удалить – Добавить – Считыватель смарт-карт PKCS#11. https://support.cryptopr…topro-ssp-50-r2-i-pkcs11 С уважением, | |
1 пользователь поблагодарил Grey за этот пост. | |
PavelNN Оставлено | |
Автор: Grey Добрый день. Панель управления – КриптоПро CSP – Оборудование – Настроить считыватели – Считыватель смарт-карт PKCS#11 – Удалить – Добавить – Считыватель смарт-карт PKCS#11. https://support.cryptopr…topro-ssp-50-r2-i-pkcs11 Есть такая же возможность для CSP 4.0? | |
Grey Оставлено | |
Автор: PavelNN Есть такая же возможность для CSP 4.0? Поддержка неизвлекаемых ключей, создаваемых ФНС, появилась только в CSP 5.0 R2. С уважением, | |
1 пользователь поблагодарил Grey за этот пост. | |
evarlamov Оставлено | |
Помогите справиться, что-то застрял. Инструменты: delphi, JwaWinCrypt Формирую xml-запрос (PrParseFilelnlpu) и пытаюсь подписать его двумя подписями. Второй пописью подписываю каждый элемент row в теле документа. Для этого делаю те же шаги, но обращаюсь к другому контейнеру. – как выбираю нужный контейнер: Подписанный файл не проходит проверку и здесь https://www.justsign.me/verifyqca/Verify/ – XML подпись не верна. | |
two_oceans Оставлено | |
Добрый день. для подписываемого фрагмента – результат получается через GetHashParam(_,HP_HASHVAL,_), потом конвертируется в base64 и сохраняется в DigestValue, уничтожается вызовом CryptDestroyHash. Примечание. В случае, когда хэш создается не для CryptSignHash, можно создать контекст криптопровайдера так: CryptAcquireContext(AProvider, nil, nil, 80, CRYPT_VERIFYCONTEXT) – исключает обращение к контейнеру, когда он реально не нужен. В данном случае, хэш от подписываемого фрагмента (DigestValue) не идет в CryptSignHash, то есть контейнер можно не тревожить. Аналогично при проверке DigestValue и SignatureValue. Про переворот. В стандарте регламентирован порядок байт “старший байт по младшему адресу”, а КриптоПро CSP через функции GetHashParam(_,HP_HASHVAL,_) CryptSignHash возвращает в “младший байт по младшему адресу” (как принято для процессоров x86). С гост-2012 переворачивать хэш “внезапно” стало не нужно, но для значения подписи необходимость остается. Через другие средства (как .Net) необходимости может не быть – результат автоматически переворачивает прослойка между криптопровайдером и высокоуровневым интерфейсом. Смотрим что у Вас на практике: по длине SignatureValue (в 2 раза длиннее, чем DigestValue) видно, что CryptSignHash вызывали – тут все правильно. Остается момент с “отзеркаливанием” порядка байтов. 2) если теги вложенные, то рекомендуется сначала подписывать самый “глубокий” – возможно случайное изменение xml кода в процессе подписания, особенно когда формируете xml вручную. Следовательно сначала подписываете Row, потом Body 3) Обратите внимание, что ds:CanonicalizationMethod Algorithm это алгоритм применяемый к SignedInfo, а ds:Transform Algorithm это алгоритм применяемый к подписываемому фрагменту. Как-то Вы замечательно каноникализируете все подряд, хотя в трансформах у подписи тега Row пусто, каноникализации нет. При проверке будут точно применены явно указанные трансформы, а вот отступления конкретной ИС от стандарта (когда трансформа никакого нет, а ИС все равно каноникализирует и считает верным) не пройдут проверку на общедоступном средстве проверки. Поэтому если каноникализируете и проверяете себя на сайте – добавьте трансформ, так Вы сообщите средству проверке о том, что делаете при подписании. 4) ds:Reference URI=”#ELN_1207700165023″ ведет в никуда – нет такого Id в документе, зато есть soapenv:Body wsu:Id=”OGRN_1207700165023″. Понимаю, запутались уже. Однако ряд средств проверки подписи выбирает пустую строку когда не находят Id (хэш уже будет совсем другой и выдаст ошибку), остальные сразу вываливаются в ошибку (не нашли фрагмент). UPD: Результаты проверки в моей программе: подпись Row выдала ошибку SignatureValue (удаление табуляций и переводов строк не помогло). DigestValue тоже выдало ошибку обработки. Отредактировано пользователем 11 августа 2021 г. 13:12:38(UTC) | |
2 пользователей поблагодарили two_oceans за этот пост. | |
evarlamov Оставлено | |
Добрый день. Но поменял подписываемые блоки, опять что-то сломалось. Одна из подписей стала некорректна. Не подскажете, в чем может быть дело? | |
two_oceans Оставлено | |
Результат проверки в моей программке: Код:
В данном случае трансформ каноникализации указан в Reference, так что каконикализация применена при проверке. Текст, полученный для вычисления хэша (но могу и ошибаться в плане представления некоторых символов и порядка пространств имен, так как может быть у меня включено отступление от стандарта для СМЭВ): Код:
На всякий случай перепроверил, что данный текст сохраненный в файл в кодировке UTF8 без ByteOrderMark (длина 1585) дает вычисленный хэш. Код:
Для гибкости, когда трансформ нужен, а когда нет, у меня при подписании сначала добавляются предполагаемые трансформы в референс. При подписании такая обработка референса: При проверке референса: Отредактировано пользователем 13 августа 2021 г. 7:12:02(UTC) | |
evarlamov Оставлено | |
Спасибо. | |
Рафик Оставлено | |
Может кто подскажет, делаю метод prParseFilelnlpuRequest прикладываю файлик Подпись 1 SOAPRequestSign.xml (13kb) загружен 2 раз(а). | |
Рафик Оставлено | |
Автор: Рафик Может кто подскажет, делаю метод prParseFilelnlpuRequest прикладываю файлик Подпись 1 SOAPRequestSign.xml (13kb) загружен 2 раз(а). Разобрался, неправильно канонизировал файл | |
Форум КриптоПро
»
Средства криптографической защиты информации
»
Linux, Solaris etc.
»
Arch Linux. КриптоПро 5.0 + Рутокен ЭЦП 2.0 + IFCPlugin ГосУслуги + КЭП ФНС
BredoGen Оставлено | |
Пришло время получать КЭП для ИП в ФНС. Приобрел Рутокен ЭЦП 2.0 (как оказалось зря, СКЗИ внутри него использоваться не будет, ФНС всё равно запишет контейнер в формате криптопро). Пришло время запустить всё на Arch Linux с возможностью входа на ГосУслуги. Актуальные шаги: CryptoPro 5.0 1. Ставим КриптоПро 5.0 из AUR: https://aur.archlinux.or…ckages/cryptopro-csp-k1/ 2. Скачиваем архив AUR 4. Ставим: 5. В хромиум ставим расширение CryptoPro Extension for CAdES Browser Plug-in. 6. Открываем гуй CryptoPro Tools (/opt/cprocsp/bin/amd64/cptools), удостоверяемся, что криптопро видит наш Рутокен и контейнер в нём. Код:
Убеждаемся, что в CryptoPro Tools разделе сертификатов наш сертификат установился в раздел персональных. 9. Идём на демо страницу и проверяем, что страница видит наш сертификат и подпись работает. Неcмотря на инструкции в интернете, файл config64.ini не трогаем, раздел PKCS11 не редактируем. Это была моя основная ошибка, я пробовал его редактировать и править под 2012 алгоритм. Трогать не нужно вообще. Всё, подписывать можем, теперь нужно разобраться с ГосУслугами. ГосУслуги (IFCPlugin) 1. Ставим из AUR: https://aur.archlinux.org/packages/ifcplugin/ Версия при которой в списке сертификатов будет показан только 1 наш сертификат ИП (без дублей и лишних сертификатов): Код:
Другие версии для других алгоритмов можно взять например тут. 4. Перезапускаем хромимум. 5. Идём на https://esia.gosuslugi.ru/login/ и пробуем логиниться. P.S. Удивительным для меня остаётся тот факт, что ФНС принудительно записывает криптопро контейнеры, при этом отсутствует опция логина в кабинет ИП nalog.ru. Есть там только опция Рутокен ЭЦП 2.0 (которая не работает из-за формата контейнера) или возня с сертификатами и хромиум-гос. | |
Санчир Момолдаев Оставлено | |
Добрый день! | |
BredoGen Оставлено | |
Автор: Санчир Момолдаев Добрый день! Да, это how-to для тех, кто будет искать процесс установки на Arch. | |
Gigses Оставлено | |
Автор: BredoGen 6. Открываем гуй CryptoPro Tools (/opt/cprocsp/bin/amd64/cptools), удостоверяемся, что криптопро видит наш Рутокен На этом шаге рутокен на виден. Систему перезагружал. Рутокен проверен на другой машине и под другой ОС. Как заставить программу видеть рутокен? Отредактировано пользователем 31 января 2022 г. 16:41:44(UTC) | |
Андрей Русев Оставлено | |
1 пользователь поблагодарил Андрей Русев за этот пост. Gigses оставлено 01.02.2022(UTC) | |
Gigses Оставлено | |
При подключении носителя, команда “pcscd -f -d” пишет это: Код:
Код:
Код:
Код:
Что сделать, чтобы программа увидела рутокен? Отредактировано пользователем 1 февраля 2022 г. 11:35:38(UTC) | |
Андрей Русев Оставлено | |
У вас проблема не с токеном, а с установкой КриптоПро CSP. Сходу ошибку в https://aur.archlinux.or…stall?h=cryptopro-csp-k1 не увидел, но проблема, вероятно, где-то там. Пришлите в личку диагностический архив, собранный с помощью Код:
Отредактировано пользователем 1 февраля 2022 г. 12:46:47(UTC) | |
Андрей Русев Оставлено | |
Gigses Оставлено | |
В этих секциях пусто. Лишь комментарии: Код:
Каким образом заполнить эти секции? | |
Андрей Русев Оставлено | |
Gigses Оставлено | |
Ставил по мануалу из первого сообщения этой темы. А есть ли какое-то официальное руководство по установке КриптоПро на Linux? | |
Андрей Русев Оставлено | |
Gigses Оставлено | |
Удалил всё, переустановил заново. Всё работает. | |
Андрей Русев Оставлено | |
Насколько я понимаю, в PKGBUILD cryptopro-csp-k1.install не хватает post_upgrade(), выполняющей то же, что и в post_install(). Накатал патч в AUR. Ничего не проверял, так как Arch-а у нас нет. | |
Андрей Русев Оставлено | |
Патч приняли, теперь надо, чтобы кто-нибудь проверил на своём Arch-е, что больше проблемы при Upgrade нет. | |
Санчир Момолдаев Оставлено | |
проверил. проблем при upgrade нет | |
Пример установки отдельно взятого сертификата из контейнера
При необходимости скопируйте ключевой контейнер \\.\FLASH\.\sidorov на жесткий диск:
/opt/cprocsp/bin/amd64/csptest -keycopy -contsrc '\\.\FLASH\sidorov' -contdest '\\.\HDIMAGE\sidor'CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
CryptAcquireContext succeeded.HCRYPTPROV: 38556259
CryptAcquireContext succeeded.HCRYPTPROV: 38770755
Total: SYS: 0,000 sec USR: 0,100 sec UTC: 14,920 sec
[ErrorCode: 0x00000000]
Наличие [ErrorCode: 0x00000000] в завершении каждой команды КриптоПРО говорит о ее успешном выполнении.
Проверьте наличие нового контейнера \\.\HDIMAGE\sidor:
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifycCSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 34554467
\\.\FLASH\ivanov
\\.\FLASH\petrov
\\.\FLASH\sidorov
\\.\FLASH\vasiliev
\\.\FLASH\smirnov
\\.\HDIMAGE\sidor
OK.
Total: SYS: 0,010 sec USR: 0,050 sec UTC: 0,130 sec
[ErrorCode: 0x00000000]
Установите личный сертификат:
/opt/cprocsp/bin/amd64/certmgr -inst -cont '\.HDIMAGEsidor'Certmgr 1.0 (c) "CryptoPro", 2007-2010.
program for managing certificates, CRLs and stores
Install:
=============================================================================
1-------
Issuer : OGRN=1234567890123, INN=1234567890, STREET=Арбат, [email protected], C=RU, S=77 г.Москва, L=Москва, O=ООО 'Беркут', OU=Удостоверяющий центр, CN=UCESTP
Subject : SNILS=12345678901, OGRN=1234567890123, INN=0011234567890, [email protected], C=RU, S=10 Республика Карелия, L=Петрозаводск, O=ООО Ромашка, CN=Сидоров Николай Павлович, T=Администратор, G=Николай Павлович, SN=Сидоров
Serial : 0x12C40953000000000019
SHA1 Hash : 0xdd0ea8db46a372571c55315cd7e4d8e2de8fb9b6
SubjKeyID : 5fc37e578cce0abe739c4da227f68a2f9abcb128
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before : 09/08/2016 06:07:00 UTC
Not valid after : 09/11/2017 06:17:00 UTC
PrivateKey Link : No
CA cert URL : <mark>http://cert1.ucestp.ru/estp.crt</mark>
Extended Key Usage : 1.3.6.1.5.5.7.3.4
1.3.6.1.5.5.7.3.2
=============================================================================
[ErrorCode: 0x00000000]
Скачайте корневой сертификат по ссылке выше (из поля CA cert URL
): http://cert1.ucestp.ru/estp.crt и перенесите его, например, в домашнюю папку:
cp ~/Загрузки/estp.crt ~/estp.crt
Установите корневой сертификат (возможно потребуются права суперпользователя):
/opt/cprocsp/bin/amd64/certmgr -inst -store uroot -file ~/estp.crtCertmgr 1.0 (c) "CryptoPro", 2007-2010.
program for managing certificates, CRLs and stores
Install:
=============================================================================
1-------
Issuer : OGRN=1234567890123, INN=1234567890, STREET=Арбат, [email protected], C=RU, S=77 г.Москва, L=Москва, O=ООО 'Беркут', OU=Удостоверяющий центр, CN=UCESTP
Subject : OGRN=1234567890123, INN=1234567890, STREET=Арбат, [email protected], C=RU, S=77 г.Москва, L=Москва, O=ООО 'Беркут', OU=Удостоверяющий центр, CN=UCESTP
Serial : 0x50D7BC0E4A3EC9994454EB83013EE5F5
SHA1 Hash : 0xd2144a3e098b6f2decb224257f48e2b7c6d85209
SubjKeyID : 07b753cd561dee8e5e83407be4575ecc05bfec14
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before : 17/06/2016 13:15:21 UTC
Not valid after : 17/06/2021 13:25:01 UTC
PrivateKey Link : No
=============================================================================
[ErrorCode: 0x00000000]
Проверьте установку личного сертификата:
/opt/cprocsp/bin/amd64/certmgr -list -store uMyCertmgr 1.0 (c) "CryptoPro", 2007-2010.
program for managing certificates, CRLs and stores
=============================================================================
1-------
Issuer : OGRN=1234567890123, INN=1234567890, STREET=Арбат, [email protected], C=RU, S=77 г.Москва, L=Москва, O=ООО 'Беркут', OU=Удостоверяющий центр, CN=UCESTP
Subject : SNILS=12345678901, OGRN=1234567890123, INN=0011234567890, [email protected], C=RU, S=10 Республика Карелия, L=Петрозаводск, O=ООО Ромашка, CN=Сидоров Николай Павлович, T=Администратор, G=Николай Павлович, SN=Сидоров
Serial : 0x12C40953000000000019
SHA1 Hash : 0xdd0ea8db46a372571c55315cd7e4d8e2de8fb9b6
SubjKeyID : 5fc37e578cce0abe739c4da227f68a2f9abcb128
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before : 09/08/2016 06:07:00 UTC
Not valid after : 09/11/2017 06:17:00 UTC
PrivateKey Link : Yes
Container : HDIMAGE\\sidor.000\2B01
Provider Name : Crypto-Pro GOST R 34.10-2012 KC1 CSP
Provider Info : ProvType: 80, KeySpec: 1, Flags: 0x0
CA cert URL : http://cert1.ucestp.ru/estp.crt
Extended Key Usage : 1.3.6.1.5.5.7.3.4
1.3.6.1.5.5.7.3.2
=============================================================================
[ErrorCode: 0x00000000]
Установка сертификатов используя КриптоПРО в Linux
Описание процесса установки приведено на примере дистрибутива семейства Debian (x64).Названия файлов и директорий могут варьироваться от системы к системе.
При установке личных сертификатов не нужны права суперпользователя, и наоборот, при установке сертификатов УЦ(корневых и промежуточных) могут потребоваться такие права.
Подключите USB носитель с ключевыми контейнерами и проверьте результат команды:
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifycCSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 16188003
\\.\FLASH\ivanov
\\.\FLASH\petrov
\\.\FLASH\sidorov
\\.\FLASH\vasiliev
\\.\FLASH\smirnov
OK.
Total: SYS: 0,020 sec USR: 0,060 sec UTC: 0,180 sec
Можно сразу установить личные сертификатов из всех доступных контейнеров одной командой:/opt/cprocsp/bin/amd64/csptestf -absorb -certsПроизойдет установка сертификатов, находящихся во всех доступных в момент запуска команды контейнерах (съемных флэш-носителях, жесткого диска и т. д.) в хранилище uMy.