logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Роман кислухин  
#1 Оставлено : 25 августа 2011 г. 3:47:10(UTC)
Роман кислухин

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

Группы: Участники
Зарегистрирован: 29.03.2011(UTC)
Сообщений: 135
Мужчина
Откуда: Москва

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

Прошу коллег поделиться знаниями по созданию запроса на изготовление сертификата.
Запрос должен быть самоподписанным, а также подписанным руководителем подразделения.

Поиском по форуму, а также изучая MSDN, восстановил примерно следующий алгоритм создания запроса:

1. Создаем PCERT_NAME_BLOB, куда складываем параметры для сертификата. PCERT_NAME_INFO в нем кодируем при помощи CryptEncodeObject.
2. Генерируем ключевую пару:
Код:

prov = CryptAcquireContext("Test", NULL, PROV_GOST_2001_DH, CRYPT_NEWKEYSET)
key = CryptGenKey(prov, AT_SIGNATURE, 0)

3. Каким-то образом засовываем в запрос информацию об открытом ключе. В MSDN это сделано странным образом (вырезал лишнее для удобства):
Код:

CryptAcquireContext(
    &hCryptProv,        // Address for handle to be returned.
    NULL,               // Use the current user's logon name.
    NULL,               // Use the default provider.
    PROV_RSA_FULL,      // Need to both encrypt and sign.
    NULL);              // No flags needed.

CryptExportPublicKeyInfo(
          hCryptProv,            // Provider handle
          AT_SIGNATURE,          // Key spec
          MY_ENCODING_TYPE,      // Encoding type
          pbPublicKeyInfo,       // pbPublicKeyInfo
          &cbPublicKeyInfo)     // Size of PublicKeyInfo

CertReqInfo.SubjectPublicKeyInfo = *pbPublicKeyInfo;


Я предполагаю, что открытый ключ надо добывать из вновь созданного keyset-а, при помощи CryptExportPublicKeyInfo, передав в нее хэндл сгенерированного ключа. После этого полученное CERT_PUBLIC_KEY_INFO положить в CertReqInfo.SubjectPublicKeyInfo.

4. Далее вызываем CryptSignAndEncodeCertificate:
Код:

CryptSignAndEncodeCertificate(
          hCryptProv,                      // хэндл провайдера, полученный для создания ключевой пары
          AT_KEYEXCHANGE,                  // Key spec
          MY_ENCODING_TYPE,                // Encoding type
          X509_CERT_REQUEST_TO_BE_SIGNED,  // Structure type
          &CertReqInfo,                    // наш сформированный запрос на сертификат
          &SigAlg,                         // CALG_GR3410?
          NULL,                            // Not used
          pbSignedEncodedCertReq,         // pbSignedEncodedCertReq
          &cbEncodedCertReqSize))          // Size of certificate 
                                           

В результате получаем в pbSignedEncodedCertReq - содержимое запроса, которое сохраняем в файл.

А теперь вопросы:

1. Достаточно ли этих операций, чтобы получить самоподписанный запрос? Или надо генерировать самоподписанный сертификат и каким-то образом им подписывать полученный запрос?
2. Как добавить к этому запросу еще подпись руководителя?
Offline Роман кислухин  
#2 Оставлено : 4 сентября 2011 г. 0:09:58(UTC)
Роман кислухин

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

Группы: Участники
Зарегистрирован: 29.03.2011(UTC)
Сообщений: 135
Мужчина
Откуда: Москва

Сказал «Спасибо»: 3 раз
Всем спасибо.
С этой частью кажется все проблемы решил.
Offline Vladilsav  
#3 Оставлено : 10 июля 2019 г. 14:27:50(UTC)
Vladilsav

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

Группы: Участники
Зарегистрирован: 08.07.2019(UTC)
Сообщений: 10

Сказал(а) «Спасибо»: 1 раз
Автор: Роман кислухин Перейти к цитате
Всем спасибо.
С этой частью кажется все проблемы решил.


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