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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline olekhov  
#1 Оставлено : 12 сентября 2017 г. 15:41:38(UTC)
olekhov

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
Цитата:
Проверка завершена успешно ошибок не обнаружено
Контейнер закрытого ключа пользователя
имя TTT
уникальное имя REGISTRY\\TTT
FQCN \\.\REGISTRY\TTT
проверка целостности контейнера успешно
Ключ обмена доступен
длина ключа 512 бит
экспорт открытого ключа успешно
вычисление открытого ключа успешно
импорт открытого ключа успешно
подпись успешно
проверка успешно
создание ключа обмена успешно
экспорт ключа запрещен
алгоритм ГОСТ Р 34.10-2001 DH
ГОСТ Р 34.10-2001, параметры обмена по умолчанию
ГОСТ Р 34.11-94, параметры по умолчанию
ГОСТ 28147-89, параметры по умолчанию
сертификат в контейнере отсутствует
Срок действия закрытого ключа 12 декабря 2018 г. 21:33:06
Использование ключа обмена разрешено до окончания срока действия закрытого ключа.
Ключ подписи отсутствует
загрузка ключей успешно
Версия контейнера 2
Расширения контейнера
некритическое Расширение контейнера КриптоПро CSP. Срок действия ключа обмена
действителен по 12 декабря 2018 г. 21:33:06




Вот эти значения можно достать через CryptoAPI ?

подглядел в свежий WinCryptEx.h, там есть KP_START_DATE и KP_END_DATE, но при попытке

Код:
CryptGetKeyParam(hKey, KP_START_DATE, x, &dwBufSize,0)


оно возвращает NTE_BAD_TYPE 0x8009000A [Указан неправильный тип.]

Offline Kirill Sobolev  
#2 Оставлено : 12 сентября 2017 г. 15:54:29(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Можно.
Нужно перечислить расширения контейнера через GetProvParam(PP_ENUM_CONTAINER_EXTENSION).
OID сроков действия ключей можно взять из WinCryptEx.h.
Код:
#define szOID_CryptoPro_private_keys_extension_container_signature_key_usage_period "1.2.643.2.2.37.3.9"
#define szOID_CryptoPro_private_keys_extension_container_exchange_key_usage_period "1.2.643.2.2.37.3.10"
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Кирилл Соболев за этот пост.
olekhov оставлено 12.09.2017(UTC)
Offline olekhov  
#3 Оставлено : 12 сентября 2017 г. 16:09:25(UTC)
olekhov

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
Там вернулся такой блоб:
Код:

00 00 00 00  13 00 00 00   30 11 81 0F  32 30 31 38    | ........0...2018
31 32 31 32  31 38 33 33   30 36 5A 31  2E 32 2E 36    | 1212183306Z1.2.6
34 33 2E 32  2E 32 2E 33   37 2E 33 2E  31 30 00       | 43.2.2.37.3.10.

Я хитрым взглядом могу его распарсить, например так:
Код:

DWORD dwZero; // 0x0
DWORD dwSize; // 0x13 = 19 байт
CHAR Value[dwSize]; // "20181212183306Z"  // YYYYMMDDHHmmSSZ UTC Time ?
CHAR szOID[]; // 1.2.643.2.2.37.3.10


нашёл.

Код:

typedef struct _CONTAINER_EXTENSION {
    BOOL bCritical; /*!< Флаг критического расширения. */
    DWORD cbExtension; /*!< Длина данных в pbExtension. */
    BYTE pbExtension[1]; /*!< Данные. */
    char sOid[1]; /*!< Строка с OID-ом расширения (невыровненный указатель). */
} CONTAINER_EXTENSION;

Отредактировано пользователем 12 сентября 2017 г. 16:17:53(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#4 Оставлено : 12 сентября 2017 г. 16:25:57(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
На будущее - у нас есть документация на API.
Например на это - http://cpdn.cryptopro.ru...b469d529147c081106d.html
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Кирилл Соболев за этот пост.
olekhov оставлено 12.09.2017(UTC)
Offline AlexEr81  
#5 Оставлено : 8 октября 2018 г. 15:13:34(UTC)
AlexEr81

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

Группы: Участники
Зарегистрирован: 09.11.2012(UTC)
Сообщений: 65
Откуда: Ростовская область

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Как декодировать такое расширение?
попробовал
CryptDecodeObject(szOID_CryptoPro_private_keys_extension_container_exchange_key_usage_period)
отрабатывает без ошибок, но что возвращает непонятно.
Offline AlexEr81  
#6 Оставлено : 8 октября 2018 г. 15:30:40(UTC)
AlexEr81

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

Группы: Участники
Зарегистрирован: 09.11.2012(UTC)
Сообщений: 65
Откуда: Ростовская область

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Методом тыка ). получилось так:
CryptDecodeObject(szCPGUID_PRIVATEKEY_USAGE_PERIOD_Encode)
в полученных данных дата в PCPCERT_PRIVATEKEY_USAGE_PERIOD.pNotAfter

жаль что в расширение не записывается pNotBefore. дата формирования ключа не лишняя информация.

Отредактировано пользователем 8 октября 2018 г. 15:42:33(UTC)  | Причина: Не указана

Offline two_oceans  
#7 Оставлено : 9 октября 2018 г. 4:55:17(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Цитата:
жаль что в расширение не записывается pNotBefore. дата формирования ключа не лишняя информация.
Соглашусь, у зарубежных УЦ есть ограничение действия ключа именно с момента формирования ключевой пары. До момента этого ограничения разрешается перевыпускать новый сертификат на тот же ключ. В отечественной криптографии как правило УЦ не предусматривает возможности перевыпуска сертификата на тот же ключ, так что знание даты не так необходимо. Так, УЦ ФК насколько помню отзывает ранее выпущенный сертификат и отклоняет запрос на сертификат если открытый ключ в запросе совпал со открытым ключом ранее выпущенного сертификата этим же УЦ.

Насколько понимаю, на текущий момент расширение контейнера не переносится при создании нового контейнера и это помогает решить проблемы с сертификатами, выданными более чем на 1 год и 3 месяца, контейнеры которых на съемных носителях или в реестре.
По такой логике в NotBefore была бы не дата формирования ключа, а дата формирования контейнера. Кроме того, даты в контейнере проставляются по локальному времени компьютера, то есть ими легко манипулировать изменив дату на компьютере при пересоздании контейнера.
Обычно достаточно отсчитать назад 1 год 3 месяца от NotAfter, чтобы получить дату формирования контейнера. Ну и конечно дата формирования ключа раньше чем выпуск сертификата, поэтому косвенно можно предположить дату формирования ключа из 2 полученных дат (выпуска сертификата и формирования контейнера). Например, в качестве "первого приближения" взять самую раннюю из них.
Offline AlexEr81  
#8 Оставлено : 9 октября 2018 г. 10:12:38(UTC)
AlexEr81

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

Группы: Участники
Зарегистрирован: 09.11.2012(UTC)
Сообщений: 65
Откуда: Ростовская область

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
чтобы получить NotBefore от NotAfter(срока действия ключа)надо знать, чего там прибавили к текущей дате, при формировании ключа.
думаю (по календарю):
дата форм. ключа 09.10.2018 09:57:47(NotBefore) + 1г. 3м. = 09.01.2020 09:57:47(NotAfter)
на самом деле получилось:
дата форм. ключа 09.10.2018 09:57:47(NotBefore) + 1г. 3м. = 08.01.2020 15:57:47(NotAfter)
получается прибавили 456 дней(проверял на нескольких контейнерах), а время почему +6 часов?
так надо? или перевели неправильно текущую дату в Filetime, при сохранении контейнера?
Offline two_oceans  
#9 Оставлено : 9 октября 2018 г. 13:31:47(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Полагаю что да, прибавляется фиксированное количество дней, а не календарными функциями DateAdd("1 year").DateAdd("3 month").
Скорее всего переведено неверно. Ну, дату стартовую 09.10.2018 09:57:47 Вы же заметили сами, а не получили из функций? Отображение Filetime очень зависит от текущего часового пояса и флага "летнего времени" (не у всех стоят последние обновления часовых поясов), одна из функций (например, при создании контейнера) может брать время UTC, вторая при декодировании (или при отображении полученного декодированного результата в Вашей программе) использовать текущий часовой пояс, например UTC+6. Или наоборот - при генерации бралось текущее, а при декодировании было воспринято как UTC и были прибавлен сдвиг часового пояса еще раз. Чтобы узнать наверняка надо просто вытащить необработанное значение времени и пересчитать в видимую дату вручную. Filetime это 64-битное значение, отсчитывается от 1 января 1601 года 0:00 UTC 100-наносекундными интервалами (за секунду значение увеличивается на 10 миллионов). Попробую на досуге проверить сколько у меня разница.
Offline trunovsergey  
#10 Оставлено : 10 февраля 2021 г. 14:10:42(UTC)
trunovsergey

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
Коллеги, подскажите, а как быть если расширения контейнера с приведенными выше oid не проставлены? Тестирование контейнера каким-то образом достает данные по срокам действия ключа и при таком случае (Тестирование ключа, срок действия ключа).

Отредактировано пользователем 10 февраля 2021 г. 15:17:18(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.