ООО Топ Кросс
oo


 
 REQUEST_TOOL. Клиентское программное обеспечение на технологии инфраструктуры открытых ключей

Назначение

Утилита request_tool предназначена для создания заверенных CMC (в том числе с вложенным CRMF) запросов, отправки их в удостоверяющий центр и получения ответа. Утилита может использоваться для создания большого количества запросов на выдачу сертификатов, из уже существующих баз с информацией о субъектах доступа в автоматизированных системах, а также других видов CMC запросов. Запрос создается из шаблона в формате XML, который является легко создаваемым и редактируемым, и может быть подготовлен программно из уже имеющихся данных, что обеспечивает большую гибкость и экономию ресурсов при интеграции данной утилиты с уже действующими программными комплексами.

Ключи командной строки.

Утилита командной строки request_tool имеет встроенную систему подсказок доступную по:

   request_tool --h[elp] (для основных параметров) и
   request_tool -cmd <cmd_name> --h[elp] (для команды из списка доступных)
	или вызов утилиты без ключей.

Usage: request_tool [common parameters] [-cmd <cmd_name> [cmd_parameters] ]
Common parameters:
        -pin: defines pkcs#11-token user's PIN 
	Задает пользовательский пин для PKCS11 токена
        -home: path to request_tool certificate storage (default ./)
	Путь к хранилищу сертификатов. По умолчанию это текущая директория.
        -setpin: used to set new user PIN (on initialized token)
	Новый пин для PKCS11 токена. Обязательно в соченании с 
	(-pin "старый PIN")
        -init: -init <initial PIN>: used to initialize new PKCS#11-token
	Инициализация  PKCS11 токена.
        -slotlist: list of slots in tokens
	Список слотов во всех токенах.
        -slot: select slot number
	Выбор основного слота.
        -te: codepage/encoding for text output 
		(win, dos, koi, utf8, ucs2, ucs4)
	Кодировка для текстовых данных (win, dos, koi, utf8, ucs2, ucs4)
        -tf: format for text output (plain, xml)
	Формат текстовых данных (plain, xml)
        -l: language for text output (ru, eng) (default eng)
	Язык сообщений (ru, eng) (по умолчанию eng)
        -crl: CRL file, PEM-format, optional, enables CRL-usage
		(default NULL) file-path form or HTTP-URL form can be used. 
		Example "http://ca.adam.ru/crl_list.pem"
	Файл с CRL  в формате pem. Может быть указан как URL. 
        -crl-cache: crl-cache path, optional, enables CRL-usage 
		(default NULL, example /etc/crl_cache )
	Путь к CRL-кэшу.
        -crl-force-deltas: optional, if set validation process 
		will fail if delta-crl informaion is unavailble
	Указывает на необходимость наличия дельта-CRL для успешной проверки.
        -ldap: LDAP-server DNS-name, optional, set to enable automatic 
		CRL retrival and certificate-chain composition (default NULL)
	LDAP сервер для автоматического обновления CRL и 
	построения цепочек при проверке сертификатов.
Availible commands:
После указания основных параметров можно указать команду из списка 
в виде: -cmd имя_команды. Далее приводится список доступных команд.
        cert: import certificate files (PEM/DER/P7B), 
		list installed certs
	установка сертификатов в токен (PEM/DER/P7B), 
	а также список установленных сертификатов.
        p12: pkcs#12 import
	Импорт pkcs#12 сертификатов.
        text: ASN1 -> text converter for
        { Certificate | CRL | PKCS#10 certificate request 
			| PKCS#7/CMS ContentInfo }
	преобразование ASN.1 в текст или XML документ для указанных типов
        cmc: Managment Messages over CMS
	Создание и отправка CMC запросов.
        params: put parameters to token
	Установка параметров в токен.

Работа с программой.

После установки программы необходимо выбрать путь для хранилища и создать там директорию atoken. Дальнейшая последовательность действий следующая:

  • Инициализировать токен.
  • Установить в токен параметры, для ситуаций когда параметры отличны от уже содержащихся в токене.
  • Установить в токен сертификаты УЦ
  • Установить личные сертификаты.
Ниже приведен пример выполнения этих шагов. Предположим, что создается хранилище сертификатов в директории /etc/certificates/. Для этого необходимо выполнить:

# mkdir /etc/certificates
# cd /etc/certificates
# mkdir atoken
# request_tool -init my_pin
# request_tool -pin my_pin -cmd params -in <path to my parameter>
# request_tool -pin my_pin -cmd cert -in <path to my cert>
# request_tool -pin my_pin -cmd p12 \ 
	-in <path to my personal cert> -passwd <my passwd>

После выполнения этих операций утилита готова к работе. Для создания и отправки запросов необходимо проделать следующее:

  • Создать шаблон запроса.
  • Создать CMC запрос.
  • Отправить запрос на сервер.
Первый этап обсуждается в следующем разделе. Два последних этапа могут быть объединены.

Для создания запроса необходимо вызвать request_tool со следующими ключами:

# request_tool ... -cmd cmc -in <file with tmplt> \
	-passwd <passwd> -pec <pec> -req <file to write request>

Здесь <file with tmplt> файл с шаблоном запроса в формате XML, <file to write request> файл для записи запроса, <passwd> пароль для контейнера PKCS#12, <pec> файл с сертификатом для шифрования пароля в формате pem.

Для отправки запроса необходимо выполнить следующую команду:

# request_tool ... -cmd cmc -req <file with req> -host <host> \
	-url <URL> [-port <port> ] [-tls] [-cmc <file to res<] \
	[-text <textual res>] [-p12 <p12>]

Здесь <file with req> - файл с запросом, полученным на предыдущем шаге, <file to res> - файл для записи ответа от сервера, <textual res< - файл для записи ответа от сервера в текстовом виде, <p12> - файл для записи сертификата в формате контейнера PKCS#12, <host> - доменное имя УЦ, <URL> - URL для отправки запроса, <port> - номер порта, ключ tls указывает, что для отправки сообщения будет использован протокол TLS (HTTPS).

Если указан параметр p12, то будет выведено сообщение о статусе выполнения. Если статус Waiting (запрос не был обработан в режиме on-line), для получения ответа на отработанный запрос необходимо послать тот же запрос через некоторое время.

Создание шаблона запроса.

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


<?xml version="1.0" encoding="KOI8-R"?>
<CertRequest>

   <RequestId>
      0
   </RequestId>
   <CertifiateTemplate>
   
      <Issuer>
      <DistinguishedName>
         
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.6
               </AttributeType>
               <CountryName>
               RU
               </CountryName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.8
               </AttributeType>
               <StateOrProvinceName>
               <UTF8String>
                  MSK
               </UTF8String>
               </StateOrProvinceName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.7
               </AttributeType>
               <LocalityName>
               <UTF8String>
                  МОСКВА
               </UTF8String>
               </LocalityName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.10
               </AttributeType>
               <OrganizationName>
               <UTF8String>
                  ООО Новый Адам
               </UTF8String>
               </OrganizationName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.11
               </AttributeType>
               <OrganizationalUnitName>
               <UTF8String>
                  Удостоверяющий Центр и дополнительные сервисы
               </UTF8String>
               </OrganizationalUnitName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.3
               </AttributeType>
               <CommonName>
               <UTF8String>
                  ТЕСТОВЫЙ УДОСТОВЕРЯЮЩИЙ ЦЕНТР
               </UTF8String>
               </CommonName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         </DistinguishedName>
      </Issuer>
      <Validity>
      
         <NotBefore>
         <UTCTime>
            28.6.2004 7:53:34 UTC
         </UTCTime>
         </NotBefore>
         <NotAfter>
         <UTCTime>
            28.6.2005 7:53:34 UTC
         </UTCTime>
         </NotAfter>
      </Validity>
      <Subject>
      <DistinguishedName>
         
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.6
               </AttributeType>
               <CountryName>
               RU
               </CountryName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.8
               </AttributeType>
               <StateOrProvinceName>
               <UTF8String>
                  MSK
               </UTF8String>
               </StateOrProvinceName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.7
               </AttributeType>
               <LocalityName>
               <UTF8String>
                  MOSCOW
               </UTF8String>
               </LocalityName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.10
               </AttributeType>
               <OrganizationName>
               <UTF8String>
                  XXXX
               </UTF8String>
               </OrganizationName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.11
               </AttributeType>
               <OrganizationalUnitName>
               <UTF8String>
                  Old
               </UTF8String>
               </OrganizationalUnitName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         <RelativeDistinguishedName>
         
            <AttributeTypeAndValue>
            
               <AttributeType>
               2.5.4.3
               </AttributeType>
               <CommonName>
               <UTF8String>
                  Last Test Of Test 4 (TLS)
               </UTF8String>
               </CommonName>
            </AttributeTypeAndValue>
         </RelativeDistinguishedName>
         </DistinguishedName>
      </Subject>
      <PublicKey>
      
         <PublicKeyAlgorithm>
         
            <AlgId>
            1.2.643.2.2.20
            </AlgId>
            <gostR3410_CryptoPro>
            
               <OBJECT_IDENTIFIER>
               1.2.643.2.2.33.1
               </OBJECT_IDENTIFIER>
               <OBJECT_IDENTIFIER>
               1.2.643.2.2.30.1
               </OBJECT_IDENTIFIER>
            </gostR3410_CryptoPro>
         </PublicKeyAlgorithm>
         <SubjectPublicKey>
         0
         </SubjectPublicKey>
      </PublicKey>
      <Extensions>
      
         <Extension>
         
            <ExtensionType>
            2.5.29.15
            </ExtensionType>
            <Critical>
            {TRUE}
            </Critical>
            <extValue>
            
               <KeyUsage>
               11000000
               </KeyUsage>
            </extValue>
         </Extension>
         <Extension>
         
            <ExtensionType>
            2.5.29.37
            </ExtensionType>
            <Critical>
            {TRUE}
            </Critical>
            <extValue>
            
               <ExtKeyUsage>
               
                  <ClientAuth>
                  1.3.6.1.5.5.7.3.2
                  </ClientAuth>
                  <EmailProtection>
                  1.3.6.1.5.5.7.3.4
                  </EmailProtection>
               </ExtKeyUsage>
            </extValue>
         </Extension>
      </Extensions>
   </CertifiateTemplate>
</CertRequest>

  • <RequestId> Идентификатор запроса (Создается автоматически, в XML - любой).
  • <Issuer> Имя издателя. Может быть указано как в виде структуры, представленной выше так и следующим образом: <Issuer encoded="..."></Issuer>. Значение encoded можно получить следующим образом:
    # request_tool -tf xml -cmd text -in <issue.cer> -out issue.xml
    
    Далее берется поле encoded из тега <Subject>, и копируется в encoded тега Issuer.
  • <Validity> Время жизни сертификата. Необходимо указать даты в формате точно совпадающем с указаным выше.
  • <Subject> Информация о владельце сертификата. Указывается как показано в примере.
  • <PublicKey> Будет получен в УЦ. Должен присутствовать в таком же виде.
  • <Extensions> Дополнительная информация об использовании сертификата. В данном случае, разрешается защищать электронную почту.

Другие варианты запросов могут быть получены следующим образом: в абонентском пункте КЦ "AKey PRO" необходимо создать интересующий Вас запрос, и сохранить его без отправки на сервер. Далее преобразовать его в XML с помощью команды:

# request_tool -tf xml -cmd text -in <файл с запросом> -out template.xml
В полученном файле необходимо найти тег <CertificateTemplate> и удалить все теги вне него. Далее CertificateTemplate переименовывается в CertTemplate. В результате получим шаблон запроса для request_tool.

Пример создания сертификата с использованием утилиты request_tool:

  1. Для создания сертификата Вам понадобится шаблон запроса в формате xml.
  2. Необходимо определить от какого корня будет издан сертификат. В xml шаблоне необходимо исправить тег Issue следующим образом:
    <Issuer encoded="..."></Issuer>
    
    Многоточием обозначено поле Subject сертификата издателя. Выполнить это можно так: request_tool -pin 123456 -cmd text -in issuer.cer -out issuer.xml В issue.xml ищем Subject:
          <Subject encoded="
             MIH7MQswaQYDVQQGEwJSVTEMMAoGA1UECAwDTVNLMRUwEwYDVQQHDAzQnNCe0KHQ
             mtCS0JAxIzQhBgNVBAoMGtCe0J7QniDQndC+0LLRi9C5INCQ0LTQsNC8MV8wXQYD
             VQQLDFbQo9C0QL7RgdGC0L7QstC10YDRj9GO0YnQuNC5INCm0LXQvdGC0YAg0Lgg
             0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgdC10YDQstC40YHRizFBMD8G
             A1UEAww40KLQldCh0KLQntCS0KvQmSDQo9CU0J7QodCi0J7QktCV0KDQr9Cu0KnQ
             mNCZINCm0JXQndCi0KA=">
         ........
    
    В шаблоне ищем Issuer:
          .....
          <Issuer>
          <DistinguishedName>
             
             <RelativeDistinguishedName>
             
                <AttributeTypeAndValue>
          .......
          </Issuer>
    
    Удаляем всю информацию внутри тега Issuer - получим:
          .....
          <Issuer>
          </Issuer>
    
    Вставляем значение encoded из найденного ранее Subject'а:
          <Issuer encoded="
             MIH7MQswaQYDVQQGEwJSVTEMMAoGA1UECAwDTVNLMRUwEwYDVQQHDAzQnNCe0KHQ
             mtCS0JAxIzQhBgNVBAoMGtCe0J7QniDQndC+0LLRi9C5INCQ0LTQsNC8MV8wXQYD
             VQQLDFbQo9C0QL7RgdGC0L7QstC10YDRj9GO0YnQuNC5INCm0LXQvdGC0YAg0Lgg
             0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgdC10YDQstC40YHRizFBMD8G
             A1UEAww40KLQldCh0KLQntCS0KvQmSDQo9CU0J7QodCi0J7QktCV0KDQr9Cu0KnQ
             mNCZINCm0JXQndCi0KA=">
          </Issuer>
    
  3. Исправляем информацию о владельце нового сертификата. Subject в xml должен быть примерно таким:
    
          <Subject>
          <DistinguishedName>
             
             <RelativeDistinguishedName>
             
                <AttributeTypeAndValue>
                
                   <AttributeType>
                   2.5.4.6
                   </AttributeType>
                   <CountryName>
                   RU
                   </CountryName>
                </AttributeTypeAndValue>
             </RelativeDistinguishedName>
             <RelativeDistinguishedName>
             
                <AttributeTypeAndValue>
                
                   <AttributeType>
                   2.5.4.8
                   </AttributeType>
                   <StateOrProvinceName>
                   <UTF8String>
    Название Вашего региона
                      </UTF8String>
                   </StateOrProvinceName>
                </AttributeTypeAndValue>
             </RelativeDistinguishedName>
             <RelativeDistinguishedName>
             
                <AttributeTypeAndValue>
                
                   <AttributeType>
                   2.5.4.7
                   </AttributeType>
                   <LocalityName>
                   <UTF8String>
    Город
                      </UTF8String>
                   </LocalityName>
                </AttributeTypeAndValue>
             </RelativeDistinguishedName>
             <RelativeDistinguishedName>
             
                <AttributeTypeAndValue>
                
                   <AttributeType>
                   2.5.4.10
                   </AttributeType>
                   <OrganizationName>
                   <UTF8String>
    Организация
                      </UTF8String>
                   </OrganizationName>
                </AttributeTypeAndValue>
             </RelativeDistinguishedName>
             <RelativeDistinguishedName>
             
                <AttributeTypeAndValue>
                
                   <AttributeType>
                   2.5.4.11
                   </AttributeType>
                   <OrganizationalUnitName>
                   <UTF8String>
    Подразделение
                      </UTF8String>
                   </OrganizationalUnitName>
                </AttributeTypeAndValue>
             </RelativeDistinguishedName>
             <RelativeDistinguishedName>
             
                <AttributeTypeAndValue>
                
                   <AttributeType>
                   2.5.4.3
                   </AttributeType>
                   <CommonName>
                   <UTF8String>
    Фамилия Имя Отчество
                      </UTF8String>
                   </CommonName>
                </AttributeTypeAndValue>
             </RelativeDistinguishedName>
             </DistinguishedName>
          </Subject>
    
  4. Выполняем следующую комманду: request_tool.exe -pin -cmd cmc -in req.xml -req 1.req -pec pass.pem -passwd 123456 pass.pem - сертификат для шифрования пароля. -passwd 123456 - необходимо указать пароль для шифрования p12 сертификата. После выполнения этой комманды у Вас появится запрос в УЦ - 1.req
  5. Отправка запроса в центр регистрации: Выполняем следующую комманду: request_tool.exe -pin 123456 -cmd cmc -req 1.req -host my-ra.ru -tls -url /cgi-bin/ra_req_import2.adm.cgi -cmc 1.cmc -p12 1.p12 Необходимо правильно указать название Вашего центра регистрации и url для отправки запроса. После успешного завершения Вы на терминал будет выведено сообщение:
    [ OK ] [ cmc ] [ - ] [ Ok ]
    или
    [ OK ] [ cmc ] [ - ] [ Waiting ]
    
    Во втором случае необходимо повторно отправить запрос через некоторое время. Во время отправки запроса ошибки могут возникать в случаях:
    • Не указан какой-либо параметр.
    • Ошибка при соединении по TLS.
    • Текстовый ответ от сервера. В этом случае размер файла, указанного при ключе -cmc будет не равен 0 - в нем находится ответ от сервера.
    ВНИМАНИЕ: не устанавливайте пользовательских сертификатов в хранилище утилиты request_tool, так как это может к коллизиям при выборе сертификата для аутентификации клиентской стороны для протокола TLS.


REQUEST_TOOL
Клиентское программное обеспечение
на технологии инфраструктуры открытых ключей
© 2005-2012
LLC Top Cross
All Rights Reserved
 
 поиск
Google

 Цифровой Секретарь
клиентское программное обеспечение

на технологиях открытых ключей