Проект Rutoken | 2008 (c) Компания "Актив" | www.rutoken.ru Графическая утилита импорта der-сертификата в соответствующий ему контейнер. (Certificate import to container utility, Cert2Cont.exe) Назначение При выписывании сертификата возможна ситуация, когда на ключевом носителе создается контейнер с ключевой парой, а сертификат выдается отдельно - в виде cer-файла или текстовом виде. Утилита импорта сертификата позволяет записать такой сертификат внутрь контейнера CSP, тем самым избавляя пользователя от необходимости носить с собой дополнительный носитель информации с файлом сертификата. Cert2Cont импортирует сертификаты формата X509 в ключевые контейнеры любых CSP в Microsoft Windows. Утилита Cert2Cont является FreeWare-продуктом и распространяется по принципу "как есть", без гарантий и обязательств, как явных, так и подразумеваемых. Особенности использования Cert2Cont является графической утилитой с возможностью выбора всех необходимых параметров: CSP, ключевого контейнера, файла сертификата. Если на компьютере установлен какой-либо CSP производства компании "Крипто-Про", то сразу после запуска будет выбран этот CSP. При выборе CSP производится автоматический перебор контейнеров без сертификата, или контейнеров - предположительно без сертификата. Далее пользователю предлагается выбрать файл сертфиката для записи в контейнер. Запись сертификата производится по нажатию на кнопку "Write Cert" ("Записать сертификат"). После успешного выполнения операции записи сертификата контейнер пропадает из списка доступных для выбора, так как в нем уже записан сертификат. При неуспешном выполнении операции пользователю будет выдано сообщение об ошибке. Cert2Cont позволяет импортировать в ключевой контейнер только тот сертификат, открытый ключ которого совпадает с открытым ключом ключевой пары из контейнера. Иначе, пользователь получит сообщение об ошибке. Дополнительные сведения Сертификат предварительно должен быть сохранен в файле в der-кодировке. При наличии файла сертификата в другом формате (PKCS#7 (*.p7b), Base64 (*.cer)), необходимо открыть этот сертификат средствами Microsoft Windows для просмотра и сохранить в der-кодировке с помощью мастера экспорта сертификатов (кнопка "Сохранить в файл"). В некоторых системах сертификаты распространяются в текстовом виде, например: -----BEGIN CERTIFICATE----- MIID2DCCA4WgAwIBAgIKEXBXbgAAAAAAcTAKBgYqhQMCAgMFADA8MQswCQYDVQQG EwJSVTEtMCsGA1UEAx4kAEMAQQBfAEMAcgB5AHAAdABvAFAAcgBvADUAXwBKAHUA bgBlMB4XDTA3MDcwNTE1NDA1NloXDTA4MDYwNTExMjQxM1owWzEQMA4GCSqGSIb3 DQEJARYBMTELMAkGA1UEBhMCUlUxCjAIBgNVBAgTATExCjAIBgNVBAcTATExCjAI BgNVBAoTATExCjAIBgNVBAsTATExCjAIBgNVBAMTATEwYzAcBgYqhQMCAhMwEgYH KoUDAgIkAAYHKoUDAgIeAQNDAARAK601R7V64H9kpEzrKfW42gg08pu+O4ukYjdG svrzJN9jIy3kFa7h6Iet16FivJpaBDDjLyXEBxIcKMMivdtR76OCAkQwggJAMA4G A1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEFBQcDBDAdBgNVHQ4EFgQUcg1Z wXP/buHfo7WnpXIOXKq14LUwcwYDVR0jBGwwaoAUNTcJ8zQ1drFofc3qEB55Lri3 x+ShQKQ+MDwxCzAJBgNVBAYTAlJVMS0wKwYDVQQDHiQAQwBBAF8AQwByAHkAcAB0 AG8AUAByAG8ANQBfAEoAdQBuAGWCEGEEalLEnr6JRG12BvlZxcgwgZ8GA1UdHwSB lzCBlDBHoEWgQ4ZBaHR0cDovL3RvZy1wYy5ha3Rpdi5ndWFyZGFudC5ydS9DZXJ0 RW5yb2xsL0NBX0NyeXB0b1BybzVfSnVuZS5jcmwwSaBHoEWGQ2ZpbGU6Ly9cXHRv Zy1wYy5ha3Rpdi5ndWFyZGFudC5ydVxDZXJ0RW5yb2xsXENBX0NyeXB0b1BybzVf SnVuZS5jcmwwgeIGCCsGAQUFBwEBBIHVMIHSMGYGCCsGAQUFBzAChlpodHRwOi8v dG9nLXBjLmFrdGl2Lmd1YXJkYW50LnJ1L0NlcnRFbnJvbGwvdG9nLXBjLmFrdGl2 Lmd1YXJkYW50LnJ1X0NBX0NyeXB0b1BybzVfSnVuZS5jcnQwaAYIKwYBBQUHMAKG XGZpbGU6Ly9cXHRvZy1wYy5ha3Rpdi5ndWFyZGFudC5ydVxDZXJ0RW5yb2xsXHRv Zy1wYy5ha3Rpdi5ndWFyZGFudC5ydV9DQV9DcnlwdG9Qcm81X0p1bmUuY3J0MAoG BiqFAwICAwUAA0EAE49u5+SPrsIwAgVSerJpHj6BQCU8yiUxE+23M4thUoZEEkLn S4ygTL/DIjf3h7/sSDKf3iFCrSYsMEG97tyrCA== -----END CERTIFICATE----- Это пример сертификата в Base64-кодировке. Для формирования cer-файла необходимо сохранить в пустом текстовом файле текст сертификата и переименовать его в cer-файл. После этого файл будет открываться стандартными средствами. Краткий алгоритм решения основной задачи: 1. Получить контекст контейнера без сертификата (CryptAcquireContext); 2. Прочитать файл с сертификатом; 3. Получить ключ (HCRYPTKEY) из контейнера (CryptGetUserKey); 4. Назначить ключу свойство KP_CERTIFICATE (CryptSetKeyParam). Дополнительно можно cделать проверку на соответствие открытого ключа из сертификата с открытым ключом из ключевого контейнера: 1. Получить контекст контейнера c ключевой парой; 2. Экспортировать открытый ключ (CryptExportPublicKeyInfo(... PCERT_PUBLIC_KEY_INFO...)) в буфер; 3. Прочитать сертификат из файла; 4. Сформировать контекст сертификата из буфера, полученного на шаге 3 (CertCreateCertificateContext(...)); 5. Сравнить открытый ключ из контекста сертификата и контейнера (CertComparePublicKeyInfo(...)); 6. Если открытые ключи совпадают, то сертификат соответствует ключевой паре в исходном контейнере. (c) Компания "Актив", 2008. Техподдержка: +7 (495) 925 77 90, hotline@rutoken.ru