Если модуль криптографии не найден, генерируется исключительная ситуация. На мобильной платформе игнорируются следующие параметры конструктора: <ИмяМодуляКриптографии>, <ПутьМодуляКриптографии>, <ТипМодуляКриптографии>. В веб-клиенте, если не установлено расширение работы с криптографией или если недоступно использование синхронных вызовов, при вызове конструктора генерируется исключение.
Синтаксис
Новый МенеджерКриптографии(<ИмяМодуляКриптографии>, <ПутьМодуляКриптографии>, <ТипМодуляКриптографии>, <ИспользованиеИнтерактивногоРежима>)Полное описание, параметры и ограничения
МенеджерКриптографии.С инициализацией модуля криптографии
МенеджерКриптографии (CryptoManager)
С инициализацией модуля криптографии
Доступен, начиная с версии 8.2.
Синтаксис:
Новый МенеджерКриптографии(<ИмяМодуляКриптографии>, <ПутьМодуляКриптографии>, <ТипМодуляКриптографии>, <ИспользованиеИнтерактивногоРежима>)
Параметры:
<ИмяМодуляКриптографии> (обязательный)
Тип: Строка.
Имя модуля криптографии. Написание без учета регистра.
Используется для операционной системы MS Windows.
<ПутьМодуляКриптографии> (обязательный)
Тип: Строка.
Путь к файлу-библиотеке, реализующей требуемый набор функций. В случае указания нескольких файлов-библиотек разделителем является символ двоеточия ":".
В списке библиотек допускается наличие несуществующих файлов.
Если задана пустая строка, то выполняется поиск файла-библиотеки в стандартных каталогах. Также в файле conf.cfg, в параметре CryptoAPILibraryLocation можно указать пути к файлу библиотеки или список путей, разделенных точками с запятой.
Используется в Linux и macOS.
<ТипМодуляКриптографии> (обязательный)
Тип: Число.
Определяет тип модуля криптографии.
<ИспользованиеИнтерактивногоРежима> (необязательный)
Определяет режим работы модуля криптографии.
Описание:
Если модуль криптографии не найден, генерируется исключительная ситуация.
На мобильной платформе игнорируются следующие параметры конструктора: <ИмяМодуляКриптографии>, <ПутьМодуляКриптографии>, <ТипМодуляКриптографии>.
В веб-клиенте, если не установлено расширение работы с криптографией или если недоступно использование синхронных вызовов, при вызове конструктора генерируется исключение.
Использование в версии:
Доступен, начиная с версии 8.2.
Описание изменено в версии 8.3.24.
Методическая информация
Практические примеры
Добавить и убрать только свой публичный учебный сертификат синхронно
Полный изолированный опыт с реальным DER: исходное отсутствие → импорт → точное присутствие → удаление найденного объекта → подтверждённое отсутствие. При ошибке не удаляем существовавший заранее сертификат и не объявляем неподтверждённую очистку успешной.
Где и как запускать
Полный клиентский модуль управляемой формы на отдельной собственной Windows-учётной записи и пустой учебной конфигурации 8.5.1.1343. Меняет только заранее отсутствовавший встроенный публичный DER в Личном; здесь не запускался, в ОС ничего не добавлялось/удалялось.
Подготовка
Создайте отдельную собственную учётную запись Windows только для обучения. Используйте новую пустую конфигурацию УчебнаяКонфигурацияСинтаксиса и Windows-клиент ровно 8.5.1.1343. В рабочей базе или рабочей Windows-учётной записи этот опыт запрещён.
Создайте обработку с управляемой формой: Занято — Булево, начально Ложь; ПодтверждаюОтдельныйСтенд — Булево, начально Ложь; Отчёт — Строка длиной 0, многострочное поле только для просмотра.
Команду ПроверитьУчебныйЦикл свяжите с одноимённым клиентским обработчиком. Вставьте весь модуль одного урока, не исключая функции проверки и обработчики ошибок.
Перед запуском вручную подтвердите свою отдельную учётную запись и единственного оператора: никто другой не должен добавлять или удалять этот учебный образец параллельно. ПодтверждаюОтдельныйСтенд — подтверждение оператора, не проверка личности пользователя ОС.
В коде встроен публичный сертификат Syntax Guide Training Only. Он не содержит закрытого ключа, не является доверенным и не предназначен для реальной подписи. Первый вызов проверяет, что его точных DER-данных в Личном ещё нет.
Если вы ранее вручную установили этот образец для урока поиска, данный опыт остановится до записи. Он не удаляет уже существовавший сертификат, даже если имя и отпечаток совпали.
Область выбрана явно: ПерсональныеСертификаты + ДанныеПользователяОС. Платформа обращается к системному хранилищу; это не временный массив в форме. Ни ДанныеКомпьютера, ни КорневыеСертификаты не открываются.
Проверьте на своём стенде наличие Microsoft Enhanced RSA and AES Cryptographic Provider с типом 24. Не используйте чужой DLL-путь и не угадывайте числовой тип. Для полного Windows-модуля разрешите режим синхронных вызовов: разбор/выгрузка публичных DER в памяти остаются синхронными и в уроке с Ждать.
Код сам добавляет только свой публичный образец, проверяет его присутствие, удаляет только найденный точный образец и проверяет отсутствие. Изменение хранилища не является транзакцией базы 1С.
Намерение импорта отмечается ДО вызова Добавить/НачатьДобавление: исключение не доказывает, что ОС ничего не записала. При ошибке выполняется одна ограниченная попытка отдельной очистки, только если до записи отсутствие образца было подтверждено.
При нескольких точных совпадениях, несовпадении DER или ошибке очистки автоматическое удаление прекращается. Отчёт явно требует ручной проверки только своего учебного образца в Личном своего отдельного Windows-пользователя; нельзя чистить всё хранилище.
Не закрывайте форму и клиент между стартом и итогом. При аварийном завершении процесса callback/обработка исключения не гарантированы: проверьте свой учебный сертификат вручную. Успех объявляется лишь после последнего чтения, которое подтвердило отсутствие.
Сертификаты, подписи, ключевые контейнеры, PIN, OCSP/CRL и сетевые серверы не используются. Удаление из Личного не отзывает сертификат и не удаляет чужой закрытый ключ.
Здесь уроки не запускались в 1С и сертификаты в ОС не добавлялись/удалялись. Проверены структура модулей и точные сигнатуры установленной справки. Эти проверки не подтверждают runtime-успех.
&НаКлиенте
Процедура ПроверитьУчебныйЦикл(Команда)
Если Занято Тогда
Возврат;
КонецЕсли;
Занято = Истина;
НужнаОчистка = Ложь;
Хранилище = Неопределено;
Образец = Неопределено;
Попытка
ПроверитьОтдельныйСтенд();
Образец = ПолучитьСвойПубличныйОбразец();
Менеджер = Новый МенеджерКриптографии("Microsoft Enhanced RSA and AES Cryptographic Provider", "", 24, ИспользованиеИнтерактивногоРежимаКриптографии.НеИспользовать);
Хранилище = Менеджер.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты, РасположениеХранилищаСертификатовКриптографии.ДанныеПользователяОС);
ПроверитьСвоёХранилище(Хранилище);
Кандидаты = Хранилище.ПолучитьВсе();
Если НайтиТочныйСвойОбразец(Кандидаты, Образец) <> Неопределено Тогда
ВызватьИсключение "Образец существовал заранее: импорт и удаление запрещены";
КонецЕсли;
НужнаОчистка = Истина;
Хранилище.Добавить(Образец);
Кандидаты = Хранилище.ПолучитьВсе();
СвойСертификат = НайтиТочныйСвойОбразец(Кандидаты, Образец);
Если СвойСертификат = Неопределено Тогда
ВызватьИсключение "Добавление не подтверждено повторным чтением";
КонецЕсли;
Хранилище.Удалить(СвойСертификат);
Кандидаты = Хранилище.ПолучитьВсе();
Если НайтиТочныйСвойОбразец(Кандидаты, Образец) <> Неопределено Тогда
ВызватьИсключение "Удаление собственного образца не подтверждено";
КонецЕсли;
НужнаОчистка = Ложь;
Отчёт = "Цикл подтверждён: до опыта собственного DER не было, добавление подтверждено, после удаления его снова нет. Доверие и закрытые ключи не менялись.";
Исключение
Отчёт = "Основной опыт не подтверждён.";
Если НужнаОчистка Тогда
Попытка
Кандидаты = Хранилище.ПолучитьВсе();
СвойСертификат = НайтиТочныйСвойОбразец(Кандидаты, Образец);
Если СвойСертификат <> Неопределено Тогда
Хранилище.Удалить(СвойСертификат);
КонецЕсли;
Кандидаты = Хранилище.ПолучитьВсе();
Если НайтиТочныйСвойОбразец(Кандидаты, Образец) <> Неопределено Тогда
ВызватьИсключение "Отсутствие после отдельной очистки не подтверждено";
КонецЕсли;
НужнаОчистка = Ложь;
Отчёт = Отчёт + " Отдельная очистка подтвердила отсутствие собственного образца.";
Исключение
Отчёт = Отчёт + " ОЧИСТКА НЕ ПОДТВЕРЖДЕНА. Проверьте только свой Syntax Guide Training Only в Личном своего отдельного учебного пользователя; не удаляйте чужие сертификаты.";
КонецПопытки;
Иначе
Отчёт = Отчёт + " Импорт не был начат; уже существовавшие сертификаты не удалялись.";
КонецЕсли;
КонецПопытки;
Занято = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьУчебнуюПлатформу()
Система = Новый СистемнаяИнформация;
Если Система.ТипПлатформы <> ТипПлатформы.Windows_x86
И Система.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда
ВызватьИсключение "Этот пример использует Windows CryptoAPI";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьОтдельныйСтенд()
ПроверитьУчебнуюПлатформу();
Если НЕ ПодтверждаюОтдельныйСтенд Тогда
ВызватьИсключение "Сначала подтвердите свою отдельную учебную учётную запись Windows";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСвоёХранилище(Хранилище)
Если ТипЗнч(Хранилище) <> Тип("ХранилищеСертификатовКриптографии") Тогда
ВызватьИсключение "Ожидалось собственное хранилище заданной области";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьСвойПубличныйОбразец()
Данные = 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Строка(Образец.Отпечаток) <> "tRDNiwoaiFssHhQqwyjWVlPLdns=" Тогда
ВызватьИсключение "Встроенный публичный образец не совпадает с ожидаемыми DER-данными";
КонецЕсли;
Возврат Образец;
КонецФункции
&НаКлиенте
Функция НайтиТочныйСвойОбразец(Кандидаты, Образец)
Если ТипЗнч(Кандидаты) <> Тип("Массив") Тогда
ВызватьИсключение "Ожидался массив сертификатов выбранной области";
КонецЕсли;
СвойСертификат = Неопределено;
Для Каждого Кандидат Из Кандидаты Цикл
Если ТипЗнч(Кандидат) <> Тип("СертификатКриптографии") Тогда
ВызватьИсключение "В массиве ожидался сертификат";
КонецЕсли;
Если Base64Строка(Кандидат.Отпечаток) <> Base64Строка(Образец.Отпечаток) Тогда
Продолжить;
КонецЕсли;
ДанныеКандидата = Кандидат.Выгрузить();
Если ТипЗнч(ДанныеКандидата) <> Тип("ДвоичныеДанные") Тогда
ВызватьИсключение "Публичная выгрузка должна вернуть DER-байты";
КонецЕсли;
Если 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==" Тогда
ВызватьИсключение "Совпадение отпечатка без совпадения собственного DER не разрешает удаление";
КонецЕсли;
Если СвойСертификат <> Неопределено Тогда
ВызватьИсключение "Несколько точных совпадений: автоматическое удаление запрещено";
КонецЕсли;
СвойСертификат = Кандидат;
КонецЦикла;
Возврат СвойСертификат;
КонецФункции
Разбор по шагам
Проверить собственную конфигурацию, Windows и подтверждение отдельного стенда; затем разобрать и проверить встроенный публичный DER.
Инициализировать своего менеджера по подтверждённым имени провайдера и типу 24; получить только Личное текущего пользователя ОС.
Прочитать выбранную область и подтвердить отсутствие точного DER-образца. Если он существовал заранее, остановиться без импорта и удаления.
Установить НужнаОчистка до попытки импорта, а не после её успеха. Добавить только свой публичный Образец.
Повторным чтением найти единственный точный публичный DER; отсутствие после добавления и несколько совпадений считать неподтверждённым результатом.
Удалить найденный объект сертификата, а не строку CN/отпечатка и не случайный первый элемент массива.
Новым чтением подтвердить отсутствие, только затем снять НужнаОчистка и вывести окончательный успех.
При ошибке после намерения импорта один раз отдельно проверить/убрать только собственный добавленный образец. Если очистка не подтверждена, сообщить об этом прямо; не выдавать основной опыт за успешный.
Один общий Попытка содержит проверки до/после изменения. В обработчике ошибки очистка находится в отдельном Попытка и не маскирует отсутствие подтверждения.
НужнаОчистка выставляется после подтверждения исходного отсутствия и перед Добавить; снимается только после повторного чтения, подтвердившего отсутствие.
Синхронные Добавить/Удалить вызываются как процедуры, не участвуют в Если. Их успех подтверждает чтение, не выдуманный результат Булево.
Как проверить результат
На чистом собственном стенде финальный отчёт подтверждает весь цикл только после последнего чтения. Личное не содержит учебный образец после окончания.
Если образец установили заранее вручную, импорт/удаление запрещены; сертификат остаётся на месте. Это обязательный отрицательный опыт, а не повод удалить его автоматически.
Отсутствие после добавления, несколько точных совпадений и неверный тип останавливают основной опыт; автоматическое удаление неоднозначных совпадений не выполняется.
При ошибке очистки видно ОЧИСТКА НЕ ПОДТВЕРЖДЕНА; основной опыт не объявлен успешным. Ручная проверка относится только к своему образцу на своём стенде.
Нет закрытого ключа/PIN, корневого доверия, подписи, сети и работы с хранилищем компьютера. Занято снят только после результата или окончательной ошибки.
Ожидаемый результат
Получен проверяемый полный цикл изменения только собственного публичного учебного образца в Личном своего изолированного Windows-пользователя; исходное и конечное состояния проверяются явно.
На что обратить внимание
Если собственный образец был в хранилище ДО опыта, импорт и удаление не выполняются. Подход «удалить по знакомому CN» может затронуть чужой сертификат.
SHA-1-отпечаток здесь идентификатор поиска, а не рекомендация алгоритма подписи. После совпадения отпечатка дополнительно сравниваются точные публичные DER-байты.
У синхронных Добавить/Удалить нет результата Булево. У обещаний результат Неопределено; у callback добавления/удаления только один аргумент Состояние. Подтверждение изменения получают новым чтением.
Ошибка метода добавления может оставить частичный результат. Нельзя снимать признак необходимости очистки сразу после вызова или только по отсутствию исключения удаления.
Очистка собственного образца — отдельная операция с ОС, не ОтменитьТранзакцию. Автоматически убрать результат после аварийного закрытия клиента этот модуль не обещает.
Если точный образец неожиданно встречается несколько раз, код не выбирает первый наугад и не удаляет все совпадения. Требуется разбор своего изолированного стенда.
Не переносите Windows-клиентский урок в веб-/мобильный клиент: там инициализация, расширения и ограничения удаления отличаются. Мобильное ограничение удаления истёкших персональных сертификатов не является правилом этого Windows-опыта.
Установка публичного самоподписанного сертификата в Личное не делает его доверенным, не создаёт закрытый ключ и не разрешает реальную подпись документов.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Создать своего инициализированного менеджера и отделить настройки от возможностей
Трёхаргументный провайдерный выбор плюс режим создаёт инициализированный менеджер. Выбранные алгоритмы, OID-соответствия и будущие параметры подписи не равны спискам возможностей провайдера.
Где и как запускать
Полный модуль управляемой формы своей пустой учебной конфигурации; Windows тонкий/толстый клиент 8.5.1.1343, только чтение сведений своего CryptoAPI-провайдера. Здесь в 1С не запускался.
Подготовка
Создайте отдельную пустую учебную конфигурацию УчебнаяКонфигурацияСинтаксиса. Запускайте пример в её Windows-клиенте 1С 8.5.1.1343, не в рабочей базе и не под сервисной учётной записью чужого сервера.
Создайте свою учебную обработку с управляемой формой. Реквизиты: Занято — Булево, начально Ложь; Отчёт — Строка длиной 0. Поле Отчёт многострочное, только для просмотра. Команду ПолучитьУчебнуюИнформацию свяжите с одноимённым клиентским обработчиком.
Вставьте весь модуль выбранного урока, включая ПроверитьУчебнуюПлатформу и СформироватьУчебныйОтчёт. Обработчики оповещений, если есть, должны оставаться экспортными клиентскими процедурами.
Используется стандартный Microsoft Enhanced RSA and AES Cryptographic Provider, тип 24. Его наличие и Type=24 подтверждены чтением конкретной записи Windows Defaults/Provider при подготовке справочника. Это не доказательство успешной загрузки провайдера платформой 1С на любой другой машине.
На своём Windows-стенде проверьте фактическое наличие этой записи и тип у своего администратора. Если провайдер отсутствует/не поддерживается, СредстваКриптографии возвращает Неопределено, а создание инициализированного менеджера может дать ошибку. Не подставляйте наугад число типа или чужой DLL-путь.
ПутьМодуляКриптографии здесь пуст: в Windows используется имя провайдера. Не переносите этот опыт на Linux/macOS, где библиотека и способ выбора отличаются.
В веб-клиенте поддержка зависит от расширения и синхронного/асинхронного режима. Этот набор намеренно ограничен Windows тонким/толстым клиентом и не обещает работу в браузере или мобильном приложении.
Включать пароль/PIN закрытого ключа не нужно. Сертификаты и ключевые контейнеры не открываются, хранилища ОС не меняются, криптографическая подпись и шифрование не выполняются.
Полученные названия алгоритмов — сведения провайдера, а не юридическая или техническая рекомендация применять конкретный алгоритм. Пустой список или незаполненный выбранный алгоритм показывается как фактическое состояние.
Все отчёты формируются в памяти своей формы. Нет файла, HTTP, OCSP/CRL, сервера меток времени или установки расширения.
Для синхронного урока в конфигурации разрешите соответствующий режим синхронных вызовов. Асинхронный урок с Ждать выполняется только в Асинх Процедура; оповещения нельзя считать завершившимися сразу после Начать… .
Здесь криптографические методы в 1С не запускались. Проверены исходники и точные сигнатуры установленной справки; наличие провайдера в реестре не является runtimeVerifiedScenarios.
&НаКлиенте
Процедура ПолучитьУчебнуюИнформацию(Команда)
Если Занято Тогда
Возврат;
КонецЕсли;
Занято = Истина;
Попытка
ПроверитьУчебнуюПлатформу();
Менеджер = Новый МенеджерКриптографии("Microsoft Enhanced RSA and AES Cryptographic Provider", "", 24, ИспользованиеИнтерактивногоРежимаКриптографии.НеИспользовать);
Информация = Менеджер.ПолучитьИнформациюМодуляКриптографии();
Отчёт = СформироватьУчебныйОтчёт(Информация) + Символы.ПС + ПоказатьПараметрыСвоегоМенеджера(Менеджер);
Исключение
Отчёт = "Информация не получена. Проверьте собственную Windows-платформу, установленный провайдер и допустимый режим вызова; это не успешная инициализация.";
КонецПопытки;
Занято = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьУчебнуюПлатформу()
Система = Новый СистемнаяИнформация;
Если Система.ТипПлатформы <> ТипПлатформы.Windows_x86
И Система.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда
ВызватьИсключение "Этот пример использует Windows CryptoAPI";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция СформироватьУчебныйОтчёт(Информация)
Если Информация = Неопределено Тогда
Возврат "Указанный провайдер не найден или не поддерживается. Это не успешная инициализация криптографии.";
КонецЕсли;
Если ТипЗнч(Информация) <> Тип("ИнформацияМодуляКриптографии") Тогда
ВызватьИсключение "Ожидалась информация модуля криптографии";
КонецЕсли;
Строки = Новый Массив;
Строки.Добавить("Фактическое имя: " + Информация.Имя);
Строки.Добавить("Фактический числовой тип: " + Строка(Информация.ТипМодуляКриптографии));
Строки.Добавить("Алгоритмы подписи: " + Строка(Информация.АлгоритмыПодписи.Количество()));
Для Каждого Алгоритм Из Информация.АлгоритмыПодписи Цикл
Строки.Добавить(" Подпись: " + Алгоритм);
КонецЦикла;
Строки.Добавить("Алгоритмы хеширования: " + Строка(Информация.АлгоритмыХеширования.Количество()));
Для Каждого Алгоритм Из Информация.АлгоритмыХеширования Цикл
Строки.Добавить(" Хеширование: " + Алгоритм);
КонецЦикла;
Строки.Добавить("Алгоритмы шифрования: " + Строка(Информация.АлгоритмыШифрования.Количество()));
Для Каждого Алгоритм Из Информация.АлгоритмыШифрования Цикл
Строки.Добавить(" Шифрование: " + Алгоритм);
КонецЦикла;
Возврат СтрСоединить(Строки, Символы.ПС);
КонецФункции
&НаКлиенте
Функция ПоказатьПараметрыСвоегоМенеджера(Менеджер)
Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда
ВызватьИсключение "Ожидался собственный инициализированный менеджер";
КонецЕсли;
Строки = Новый Массив;
Строки.Добавить("Выбранный алгоритм подписи: " + Менеджер.АлгоритмПодписи);
Строки.Добавить("Выбранный алгоритм хеширования: " + Менеджер.АлгоритмХеширования);
Строки.Добавить("Выбранный алгоритм шифрования: " + Менеджер.АлгоритмШифрования);
Строки.Добавить("Включать данные в будущую подпись: " + Строка(Менеджер.ВключениеДанныхВПодпись));
Строки.Добавить("Режим включения сертификатов: " + Строка(Менеджер.ВключениеСертификатовВПодпись));
Строки.Добавить("Интерактивный режим: " + Строка(Менеджер.ИспользованиеИнтерактивногоРежима));
Строки.Добавить("Адресов TSA в параметрах: " + Строка(Менеджер.АдресаСерверовМетокВремени.Количество()));
Для Каждого Адрес Из Менеджер.АдресаСерверовМетокВремени Цикл
Строки.Добавить(" Только текст адреса TSA: " + Адрес);
КонецЦикла;
Для Каждого Связь Из Менеджер.ОпределениеАлгоритмаХеширования Цикл
Строки.Добавить("Ключевой OID для хеширования: " + Связь.Ключ);
Для Каждого OID Из Связь.Значение Цикл
Строки.Добавить(" Приоритетный OID хеширования: " + OID);
КонецЦикла;
КонецЦикла;
Для Каждого Связь Из Менеджер.ОпределениеАлгоритмаШифрования Цикл
Строки.Добавить("Ключевой OID для шифрования: " + Связь.Ключ);
Для Каждого OID Из Связь.Значение Цикл
Строки.Добавить(" Приоритетный OID шифрования: " + OID);
КонецЦикла;
КонецЦикла;
Возврат СтрСоединить(Строки, Символы.ПС);
КонецФункции
Разбор по шагам
Проверить собственную конфигурацию, Windows-контекст до обращения к провайдеру.
Использовать действительные имя провайдера и тип 24; пустая строка пути относится к Windows-опыту, а не к отсутствующей Linux-библиотеке.
Отличить Неопределено от полученной ИнформацияМодуляКриптографии до доступа к её полям.
Показать фактическое имя и числовой тип отдельно от трёх неизменяемых массивов поддерживаемых алгоритмов.
Перечислить фактические строки алгоритмов без фиктивного SHA/GOST и без присваивания readonly-коллекциям.
Флаг Занято запрещает повторный запуск; после результата или ошибки он снимается. Ничего не сохранено на диск.
Создать именно инициализированный менеджер по имени/пути/типу. Режим НеИспользовать не запрашивает интерактивный PIN.
Получить информацию уже этого менеджера без дополнительных провайдерных аргументов.
Отдельно показать три фактически выбранных алгоритма и настройки включения данных/сертификатов в будущую подпись. Подпись не формируется.
Списки адресов TSA показать только как текст, не обращаться к ним.
Два соответствия связывают OID открытого ключа со списками OID алгоритмов в порядке приоритета. Порядок массивов не сортируется и не меняется.
Как проверить результат
При успешной инициализации видны сведения модуля и отдельные фактические параметры менеджера.
ReadOnly ИспользованиеИнтерактивногоРежима только читается; пароль закрытого ключа нигде не читается и не задаётся.
Пустые настройки/соответствия показываются как есть, алгоритмы и TSA не придумываются.
Ожидаемый результат
Собственный менеджер инициализирован по конкретному провайдеру в исходнике и подробно разобран без криптографической операции.
На что обратить внимание
Имя провайдера, путь библиотеки и числовой тип — разные параметры. Тип 24 выбран по фактической Windows-регистрации, не по порядковому номеру списка алгоритмов.
Сведения СредстваКриптографии не создают и не инициализируют МенеджерКриптографии автоматически.
Список поддерживаемых алгоритмов и три выбранных алгоритма менеджера — разные сведения. Нельзя считать пустое поле выбранным первым алгоритмом списка.
Разбор сведений не доказывает доступность закрытого ключа, доверие сертификату, пригодность для электронной подписи или соответствие требованиям организации.
Ни один пример здесь не вводит PIN/пароль, не подписывает, не шифрует и не обращается к серверу меток времени.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.