СертификатКриптографии.Из двоичных данных

Конструкторы

Создает сертификат из двоичных данных. В веб-клиенте, если не установлено расширение работы с криптографией или если недоступно использование синхронных вызовов, при вызове конструктора генерируется исключение.

Синтаксис

Новый СертификатКриптографии(<Данные>)
Полное описание, параметры и ограничения

СертификатКриптографии.Из двоичных данных

СертификатКриптографии (CryptoCertificate)

Из двоичных данных

Доступен, начиная с версии 8.2.

Синтаксис:
Новый СертификатКриптографии(<Данные>)
Параметры:

<Данные> (необязательный)
Тип: ДвоичныеДанные.
Данные, из которых будет построен сертификат.
Описание:

Создает сертификат из двоичных данных.
В веб-клиенте, если не установлено расширение работы с криптографией или если недоступно использование синхронных вызовов, при вызове конструктора генерируется исключение.

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Разобрать назначения ключа и ограничения УЦ

У образца заданы Basic Constraints, Key Usage и Extended Key Usage. Сравниваем разобранные значения с исходными DER-расширениями и не путаем назначение с наличием закрытого ключа.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

  2. Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.

  3. Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.

  4. В пример встроен отдельный публичный учебный X.509-сертификат Syntax Guide Training Only. Его закрытый ключ не сохранён, сертификат не установлен в хранилище ОС и не признан доверенным.

  5. Используйте Windows-клиент или Windows-сервер 1С 8.5.1.1343. Проверка других ОС, веб-клиента и расширений криптографии этим уроком не подтверждена.

  6. Не заменяйте учебный сертификат рабочим для первого запуска. Код ничего не подписывает, не импортирует в хранилища, не обращается к OCSP/CRL и не просит пароль.

ИсходныеДанные = Base64Значение("MIIC+jCCAeKgAwIBAgIBVTANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpTeW50YXggR3VpZGUgVHJhaW5pbmcgT25seTAeFw0yMDAxMDEwMDAwMDBaFw0zNTEyMzEwMDAwMDBaMCUxIzAhBgNVBAMMGlN5bnRheCBHdWlkZSBUcmFpbmluZyBPbmx5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkraGtF6mSMHQWI0lIdDxzNjLTB0VHmtLUYEIxXFFJepQtyMGWZ9rfpbTglFp8wpsw+Wc09FQyDFuKsNz3cBcBBx7fTmJVuYzfrXjhDECNqEoKMEf+Qrim3WsVKA/Qr8IMnzq1qdnA1pLgaaKyscfCJkw9W1yoTlLV3PmGs6h6gP1/KXwe+zKN5r3Jl0IVk8RXTLAeyqN01lCuyzaeSYm/v2YS88LdaJ/nkdFqy5QjRXfm7EOCW7eCZlCBwW0EvGhUarZxWlq04lPs9qu3aC3/6gY/scE2vY1jeZV2VpV0lLQpU5gVdjVGI4YQmfgkb8jYtV5U7FQ1KQ6Poji/ort6wIDAQABozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEARoo1FJJKKkaZXyFl1tlYj8K7xvryXwhb+tCaFvdXuON27YC3/YIHLUT9sCF9o76VIT8dsVMpK0Qo+VV0FIvqRcB+u6SmyJ+Y7590mzd5P1CSt8Y/4BNV2LosYxhcdVczs26PWHL5GXyBMWRxtBjNsnTeMKh4/WIMrplAr0IOJCmjIeKhv0JbQacsNqhmpe7JdgtBYC4Rrn3ajdD99HZREmyLR/iJrh6W4IGqSN0MGT0xL/mLI0GsTp9JhHDF3o8bmC1yMDlLOoAZp7M072bzfDsKFPg4ATQp/hhbtsTdS/LXrd9cLehZ7ThH6ljL8y2JbALD+6HPnT6Sv+Mg0Wq0MA==");
Сертификат = Новый СертификатКриптографии(ИсходныеДанные);
Дополнения = Сертификат.ДополненияСертификата;
ОграниченияУЦ = Дополнения.Получить("2.5.29.19");
Если ТипЗнч(ОграниченияУЦ) <> Тип("Булево") Тогда
    ВызватьИсключение "У учебного образца не разобрано Basic Constraints";
КонецЕсли;
Сообщить(ОграниченияУЦ = Ложь);
Назначения = Дополнения.Получить("2.5.29.37");
Если Назначения = Неопределено Тогда
    ВызватьИсключение "В учебном образце нет Extended Key Usage";
КонецЕсли;
Сообщить(Назначения.Найти("1.3.6.1.5.5.7.3.2") <> Неопределено);
СырыеДополнения = Сертификат.ДополненияСертификатаКакИсходныеДанные;
СыройBasic = СырыеДополнения.Получить("2.5.29.19");
Если СыройBasic = Неопределено Тогда
    ВызватьИсключение "Нет исходных байтов учебного ограничения УЦ";
КонецЕсли;
Сообщить(ТипЗнч(СыройBasic) = Тип("ДвоичныеДанные"));
Сообщить(СыройBasic.Размер() > 0);
ДополнительныйEKU = Неопределено;
Если Сертификат.РасширенныеСвойства.Свойство("EKU", ДополнительныйEKU) Тогда
    Сообщить("EKU в расширенных свойствах: " + Строка(ДополнительныйEKU.Количество()));
Иначе
    Сообщить("EKU в расширенных свойствах не предоставлен");
КонецЕсли;
Сообщить("Назначение для подписи: " + Строка(Сертификат.ИспользоватьДляПодписи));
Сообщить("Назначение для шифрования: " + Строка(Сертификат.ИспользоватьДляШифрования));

Разбор по шагам

  1. OID 2.5.29.19 в разобранном Соответствие даёт Булево: у нашего образца Ложь, то есть это не сертификат УЦ.

  2. OID 2.5.29.37 даёт массив назначений; у образца есть назначение Client Authentication.

  3. В ДополненияСертификатаКакИсходныеДанные тот же OID даёт ДвоичныеДанные, а не готовое Булево.

  4. РасширенныеСвойства может содержать EKU; сначала проверяем наличие поля.

  5. ИспользоватьДляПодписи/Шифрования читаем как признаки назначения. Они не поставляют отсутствующий закрытый ключ и не устанавливают доверие.

Как проверить результат

  1. Четыре сравнения Истина; вывод признаков назначения и EKU диагностический.

  2. Проверьте в отладчике: Basic Constraints в двух соответствиях имеет разные типы значений.

Ожидаемый результат

Разобраны конкретные расширения публичного образца без обращения к хранилищам.

На что обратить внимание

  1. Двоичное DER-расширение нельзя напрямую использовать как логический признак.

  2. Назначение ключа не гарантирует, что можно подписать файл: закрытый ключ и права на него нужны отдельно.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Выгрузить публичный сертификат и прочитать повторно

Выгрузить без аргументов возвращает публичные двоичные данные сертификата. Сравниваем DER и заново получаем отпечаток из выгрузки.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

  2. Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.

  3. Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.

  4. В пример встроен отдельный публичный учебный X.509-сертификат Syntax Guide Training Only. Его закрытый ключ не сохранён, сертификат не установлен в хранилище ОС и не признан доверенным.

  5. Используйте Windows-клиент или Windows-сервер 1С 8.5.1.1343. Проверка других ОС, веб-клиента и расширений криптографии этим уроком не подтверждена.

  6. Не заменяйте учебный сертификат рабочим для первого запуска. Код ничего не подписывает, не импортирует в хранилища, не обращается к OCSP/CRL и не просит пароль.

ИсходныеДанные = Base64Значение("MIIC+jCCAeKgAwIBAgIBVTANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpTeW50YXggR3VpZGUgVHJhaW5pbmcgT25seTAeFw0yMDAxMDEwMDAwMDBaFw0zNTEyMzEwMDAwMDBaMCUxIzAhBgNVBAMMGlN5bnRheCBHdWlkZSBUcmFpbmluZyBPbmx5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkraGtF6mSMHQWI0lIdDxzNjLTB0VHmtLUYEIxXFFJepQtyMGWZ9rfpbTglFp8wpsw+Wc09FQyDFuKsNz3cBcBBx7fTmJVuYzfrXjhDECNqEoKMEf+Qrim3WsVKA/Qr8IMnzq1qdnA1pLgaaKyscfCJkw9W1yoTlLV3PmGs6h6gP1/KXwe+zKN5r3Jl0IVk8RXTLAeyqN01lCuyzaeSYm/v2YS88LdaJ/nkdFqy5QjRXfm7EOCW7eCZlCBwW0EvGhUarZxWlq04lPs9qu3aC3/6gY/scE2vY1jeZV2VpV0lLQpU5gVdjVGI4YQmfgkb8jYtV5U7FQ1KQ6Poji/ort6wIDAQABozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEARoo1FJJKKkaZXyFl1tlYj8K7xvryXwhb+tCaFvdXuON27YC3/YIHLUT9sCF9o76VIT8dsVMpK0Qo+VV0FIvqRcB+u6SmyJ+Y7590mzd5P1CSt8Y/4BNV2LosYxhcdVczs26PWHL5GXyBMWRxtBjNsnTeMKh4/WIMrplAr0IOJCmjIeKhv0JbQacsNqhmpe7JdgtBYC4Rrn3ajdD99HZREmyLR/iJrh6W4IGqSN0MGT0xL/mLI0GsTp9JhHDF3o8bmC1yMDlLOoAZp7M072bzfDsKFPg4ATQp/hhbtsTdS/LXrd9cLehZ7ThH6ljL8y2JbALD+6HPnT6Sv+Mg0Wq0MA==");
Сертификат = Новый СертификатКриптографии(ИсходныеДанные);
Выгруженные = Сертификат.Выгрузить();
Если ТипЗнч(Выгруженные) <> Тип("ДвоичныеДанные") Тогда
    ВызватьИсключение "Выгрузка не вернула публичные двоичные данные";
КонецЕсли;
Сообщить(Base64Строка(Выгруженные) = Base64Строка(ИсходныеДанные));
Повторный = Новый СертификатКриптографии(Выгруженные);
Сообщить(Base64Строка(Повторный.Отпечаток) = Base64Строка(Сертификат.Отпечаток));
Сообщить(Выгруженные.Размер() > 0);

Разбор по шагам

  1. Без файлового имени Выгрузить возвращает ДвоичныеДанные; тип результата явно проверяем.

  2. Base64 здесь удобна для побайтового сравнения собственных небольших DER-данных.

  3. Создаём новый объект из выгруженного сертификата и сравниваем отпечаток, а не равенство двух объектов.

  4. Публичная выгрузка не добавляет закрытый ключ и не является экспортом ключевого контейнера или PFX.

Как проверить результат

  1. Три сравнения Истина, выгрузка совпадает с собственным DER.

  2. Никаких файлов и записей хранилищ сертификатов не создано.

Ожидаемый результат

Выполнен публичный DER-roundtrip конкретного сертификата.

На что обратить внимание

  1. Успешная выгрузка не означает наличие права подписывать этим сертификатом.

  2. Не сравнивайте объекты СертификатКриптографии вместо сравнения их данных или идентификаторов.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.