Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline idtks  
#1 Оставлено : 28 апреля 2018 г. 17:00:46(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 97
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 21 раз
Добрый день.

Есть вопросы по CAPILite 4.0 под Linux:

1. Функции обработки сертификатов (http://cpdn.cryptopro.ru/content/capilite40/html/group___cert_func.html) и функции обработки списка отозванных сертификатов (http://cpdn.cryptopro.ru/content/capilite40/html/group___c_r_l_func.html) реализованы / протестированы / сюрпризов под Linux не будет?
2. Возможно ли загрузить при помощи этих функций 2000 доверенных сертификатов в хранилище + периодически обновлять СОС (CRL) для каждого из для них?
3. Как быстро будет строиться цепочка доверия (функция CertGetCertificateChain) на таком большом объеме доверенных сертификатов и СОС (длина цепочки не более трех-четырех УЦ)?

--- я в курсе, что сейчас CSP 4.0 для Linux не сертифицирован, но ведь рано или поздно это произойдет (не с этой версией, так со следующей). Просто, в рамках обсуждения различных вопросов по импортозамещению, надо выбрать, что и как мы будем переписывать. И очень хотелось бы, и нам, и нашим заказчикам, не переписывать одно и то же многократно :)

Еще вопрос: где можно взять нормальный заголовочный файл под Linux для вышеприведенных функций? Особенно для СОС.

С уважением, Константин Ткачук.
Offline Максим Коллегин  
#2 Оставлено : 29 апреля 2018 г. 0:17:36(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,375
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
Здравствуйте.
КриптоПро CSP для Linux сертифицирован с версии 3.6.
Проблем с построением цепочек нет, но с проверкой по большим CRL есть - мы активно работаем над этим и в версии CSP 5.0 уже стало в несколько раз быстрее.
Вот здесь были тесты:
https://www.cryptopro.ru...aspx?g=posts&t=11625
Все заголовочные файлы устанавливаются devl пакетом.
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
idtks оставлено 02.05.2018(UTC)
Offline idtks  
#3 Оставлено : 2 мая 2018 г. 13:12:43(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 97
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 21 раз
Добрый день.

Спасибо, за Ваш ответ.

Попробовал собрать нашу библиотеку под Ubuntu (ubuntu-18.04-desktop-amd64). Установил версию CSP 4.0 (64-биная 4.0.9944-5 - поставил все, что предложил "install_gui.sh"). Установил контейнеры приватных ключей и сертификаты к ним + сертификат УЦ (тот еще квест). Вроде как, заработало. Формирует подписи и проверяет для сертификатов трех типов (ГОСТ-2001 / ГОСТ-2012-256 / ГОСТ-2012-512).

Но есть две проблемы:

1. Функция "CertVerifyCertificateChainPolicy" не желает работать с параметром "CPCERT_CHAIN_POLICY_SIGNATURE" - возвращает FALSE и "GetLastError" выдает ошибку 0x57 (ERROR_INVALID_PARAMETER - "The parameter is incorrect"?). Вот фрагмент кода, который проверяет сертификат перед подписью (он работает под Windows без проблем):

...
CPSIGNATURE_EXTRA_CERT_CHAIN_POLICY_PARA extraPolicyPara = {0};
extraPolicyPara.cbSize = sizeof(CPSIGNATURE_EXTRA_CERT_CHAIN_POLICY_PARA);
extraPolicyPara.pPrivateKeyUsedTime = (FILETIME *) NULL;

CERT_CHAIN_POLICY_PARA chainPolicyPara = {0};
chainPolicyPara.cbSize = sizeof(CERT_CHAIN_POLICY_PARA);
chainPolicyPara.dwFlags = 0;
chainPolicyPara.pvExtraPolicyPara = (void *) &extraPolicyPara;

CPSIGNATURE_EXTRA_CERT_CHAIN_POLICY_STATUS extra_policy_status = {0};
extra_policy_status.cbSize = sizeof(extra_policy_status);

CERT_CHAIN_POLICY_STATUS chainPolicyStatus = {0};
chainPolicyStatus.cbSize = sizeof(CERT_CHAIN_POLICY_STATUS);
chainPolicyStatus.pvExtraPolicyStatus = (void *) &extra_policy_status;

BOOL ret = CertVerifyCertificateChainPolicy(CPCERT_CHAIN_POLICY_SIGNATURE, p_chain_context, &chainPolicyPara, &chainPolicyStatus);
if (ret == FALSE) {
printf("===ps1:%x\n", GetLastError());
...

2. Совсем забавно, но функция "CryptBinaryToStringA" не желает работать с параметром "CRYPT_STRING_NOCRLF". То есть, с "CRYPT_STRING_BASE64" она отрабатывает нормально, а вот с комбинацией "CRYPT_STRING_BASE64 | CRYPT_STRING_NOCRLF" уже нет. Возвращает FALSE и "GetLastError" выдает ошибку 0x57 (ERROR_INVALID_PARAMETER - "The parameter is incorrect"?).

Можете прокомментировать? Вдруг я что-то не так делаю...

С уважением, Константин Ткачук.

P.S. Если в пункте № 1 указать параметр "CPCERT_CHAIN_POLICY_PRIVATEKEY_USAGE_PERIOD", то все отрабатывает без ошибок. Какой из двух вариантов значения параметра правильнее указывать для дальнейшей сертификации ПО в ФСБ? Просто, не я занимался изначальной разработкой библиотеки - и, вроде как, первая версия со значением параметра "CPCERT_CHAIN_POLICY_SIGNATURE" сертификацию под Windows прошла. Теперь вот делаем доработки для ГОСТ-2012.

Отредактировано пользователем 2 мая 2018 г. 13:35:37(UTC)  | Причина: Не указана

Offline idtks  
#4 Оставлено : 8 мая 2018 г. 15:30:45(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 97
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 21 раз
Добрый день.

Какая-нибудь реакция на вопросы будет? Неужели они настолько сложны?

Вот еще проблемы с CSP под Linux (в добавление к двум предыдущим):

3. Функция "CertAddEncodedCRLToStore" отказывается работать с параметром "CERT_STORE_ADD_NEWER". Если указать параметр "CERT_STORE_ADD_NEW", то все начинает работать (правда, запускать приходится под "sudo", что странно - зачем большие права для установки СОС в хранилище текущего пользователя?). Вот фрагмент кода:

...
HCERTSTORE hStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, (HCRYPTPROV) 0,
useLocalMachine ? CERT_SYSTEM_STORE_LOCAL_MACHINE : CERT_SYSTEM_STORE_CURRENT_USER,
L"CA" /* <- это intermediate trusted certificates */);
if (NULL == hStore) {
errorContext.setBusinnesError(__LINE__, ::crypto::cert_open_store, ::crypto::CryptoApiFunc::CertOpenStore, GetLastError());
return FALSE;
}

BOOL ret = CertAddEncodedCRLToStore(hStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, (BYTE*) crl, crl_len, CERT_STORE_ADD_NEWER, NULL);
if (FALSE == ret) {
DWORD le = GetLastError();
if (CRYPT_E_EXISTS != le)
errorContext.setBusinnesError(__LINE__, ::crypto::add_crl_to_store, ::crypto::CryptoApiFunc::CertAddEncodedCRLToStore, le);
else
ret = TRUE;
}
...

--- "useLocalMachine" установлен в "false". Получаю ошибку "0x57 (The parameter is incorrect.)" при вызове "CertAddEncodedCRLToStore". Под Windows код работает с параметром "CERT_STORE_ADD_NEWER" без проблем.

4. Функция "CertGetCertificateChain" с параметром "HCCE_LOCAL_MACHINE" вообще вызывает падение процесса с выдачей core dump-а. Если подставить "HCCE_CURRENT_USER", то все начинает работать. Под Windows тот же код работает и с "HCCE_LOCAL_MACHINE" и с "HCCE_CURRENT_USER" без проблем.

5. Функция ""CryptBinaryToStringW" с флагом "CRYPT_STRING_HEXRAW" отказывается работать. Та же ошибка "0x57 (The parameter is incorrect.)". А под Windows работает. Реализовать свой велосипед, конечно, не проблема...

6. Мелочь, конечно, но если функции "CertGetCertificateChain" подсунуть совсем "левый" сертификат, то она под Linux выдаст ровно один флаг в "TrustStatus" - "CERT_TRUST_IS_PARTIAL_CHAIN". А под Windows набор флагов в "TrustStatus" гораздо богаче: CERT_TRUST_IS_NOT_TIME_VALID + CERT_TRUST_REVOCATION_STATUS_UNKNOWN + CERT_TRUST_IS_OFFLINE_REVOCATION + CERT_TRUST_IS_PARTIAL_CHAIN.

В общем, как-то все грустно с библиотекой CAPILite под Linux.

С уважением, Константин Ткачук.
Offline Русев Андрей  
#5 Оставлено : 14 мая 2018 г. 8:24:44(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,261

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 444 раз в 323 постах
Спасибо за замечания, постараемся всё поправить. CAPIlite не претендует на полную замену MS CAPI на nix - слово lite недвусмысленно на это намекает. Цель всегда была исключительно прикладной: ПО партнёров должно успешно работать. При этом правки вносятся не только на нашей стороне, так как в CAPI одно и то же можно сделать множеством способов.
Официальная техподдержка. Официальная база знаний.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.