СертификатКлиентаОС.По умолчанию

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

Создает объект клиентского сертификата OpenSSL, загружаемого из системного хранилища сертификатов операционной системы. Сертификат подбирается автоматически.

Синтаксис

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

СертификатКлиентаОС.По умолчанию

СертификатКлиентаОС (OSClientCertificate)

По умолчанию

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

Синтаксис:
Новый СертификатКлиентаОС()
Описание:

Создает объект клиентского сертификата OpenSSL, загружаемого из системного хранилища сертификатов операционной системы. Сертификат подбирается автоматически.

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

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

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

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

Сравнить системные источники сертификатов и собрать три TLS-профиля без сетевого подключения

Учебный диагностический пульт показывает разницу между CA-доверием и клиентской идентификацией, между Авто и Выбирать, между платформенными источниками и переносимым контрактом TLS8.5.

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

Полный модуль основной управляемой формы внешней обработки УчебныеTLS85. Клиентские конструкторы не переносите на сервер. Результат — офлайн-паспорта, не сетевой тест.

Подготовка

  1. Создайте свою отдельную учебную VM и новую пустую базу8.5.1.1343 с именем конфигурации УчебныеTLSПрофили85. Русский встроенный язык, управляемый интерфейс Такси, совместимость Не использовать. Не копируйте рабочую конфигурацию, не добавляйте предметные объекты, расширения или фоновые задания: полный серверный guard их отвергает.

  2. Создайте внешнюю обработку УчебныеTLS85, основную управляемую форму, реквизит Статус85: Строка длиной0 и многострочное поле ТолькоПросмотр. Создайте команду СравнитьПрофили85, назначьте одноименное действие и кнопку, ИзменяетСохраняемыеДанные выключите. Назначьте обработчики ПриСозданииНаСервере и ПриОткрытии. Вставьте весь код в модуль этой формы, не внутрь уже созданной процедуры.

  3. Запускайте вручную только настольным тонким/толстым управляемым клиентом8.5.1.1343 внутри своей VM. Сертификаты читаются на стороне клиента под его учетной записью, не из серверного пользователя службы1С. Для каждой ОС нужна отдельная собственная VM с установленным клиентом8.5; Windows-успех не подтверждает Linux/macOS.

  4. Для чтения системных CA достаточно доступного стандартного хранилища данной VM. Не импортируйте сертификаты из production. На Linux системные CA — PEM в /etc/ssl/certs; при большом каталоге создание источника может быть медленным. Для клиентского источника Linux/macOS может понадобиться поддерживаемый CryptoPro CSP: если провайдер отсутствует, ошибка остается ошибкой, ее не скрывают пустым успешным профилем.

  5. Для этого офлайн-этапа не нужен сервер, URL, пароль или готовый личный сертификат: источники создаются конструкторами здесь. Источник с режимом Выбирать не равен уже выбранному сертификату. Не выполняйте сетевой handshake, не устанавливайте ключи и не меняйте доверие ОС. Сертификаты, закрытые ключи и содержимое системного хранилища не выводятся.

&НаКлиенте
Перем ЦентрыОС85;

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПроверитьСвойПустойСтенд();
    Статус85 = "Профили еще не созданы. Соединение не выполняется";
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ЦентрыОС85 = Неопределено;
КонецПроцедуры

&НаКлиенте
Процедура СравнитьПрофили85(Команда)
    Статус85 = "Проверка не завершена";
    ПроверитьСеанс85();
    #Если ТонкийКлиент Или ТолстыйКлиентУправляемоеПриложение Тогда
        Система = Новый СистемнаяИнформация;
        Платформа = Система.ТипПлатформы;
        Если Платформа = ТипПлатформы.Windows_x86 Или Платформа = ТипПлатформы.Windows_x86_64 Тогда
            СравнитьWindows85();
        ИначеЕсли Платформа = ТипПлатформы.MacOS_x86 Или Платформа = ТипПлатформы.MacOS_x86_64 Тогда
            СравнитьMacOS85();
        ИначеЕсли Платформа = ТипПлатформы.Linux_x86 Или Платформа = ТипПлатформы.Linux_x86_64
            Или Платформа = ТипПлатформы.Linux_ARM64 Или Платформа = ТипПлатформы.Linux_E2K Тогда
            СравнитьLinux85();
        Иначе
            ВызватьИсключение "Эта платформа не входит в проверенный список настольного урока";
        КонецЕсли;
        Если ЦентрыОС85 = Неопределено Тогда
            ЦентрыОС85 = Новый СертификатыУдостоверяющихЦентровОС;
        КонецЕсли;
        КлиентАвто = Новый СертификатКлиентаОС();
        КлиентВыбор = Новый СертификатКлиентаОС(СпособВыбораСертификатаОС.Выбирать);
        РежимАвто = КлиентАвто.СпособВыбораСертификатаОС;
        РежимВыбор = КлиентВыбор.СпособВыбораСертификатаОС;
        ЭтоLinux = Платформа = ТипПлатформы.Linux_x86 Или Платформа = ТипПлатформы.Linux_x86_64
            Или Платформа = ТипПлатформы.Linux_ARM64 Или Платформа = ТипПлатформы.Linux_E2K;
        Если Не ЭтоLinux И (РежимАвто <> СпособВыбораСертификатаОС.Авто
            Или РежимВыбор <> СпособВыбораСертификатаОС.Выбирать) Тогда
            ВызватьИсключение "Паспорт режима ОС не совпал";
        КонецЕсли;
        БезКлиента = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, ЦентрыОС85);
        АвтоTLS = Новый ЗащищенноеСоединениеOpenSSL(КлиентАвто, ЦентрыОС85);
        ВыборTLS = Новый ЗащищенноеСоединениеOpenSSL(КлиентВыбор, ЦентрыОС85);
        Если БезКлиента.СертификатКлиента <> Неопределено Тогда
            ВызватьИсключение "В профиле без клиентского сертификата неожиданно появился источник";
        КонецЕсли;
        Если ТипЗнч(БезКлиента.СертификатыУдостоверяющихЦентров) <> Тип("СертификатыУдостоверяющихЦентровОС")
            Или ТипЗнч(АвтоTLS.СертификатыУдостоверяющихЦентров) <> Тип("СертификатыУдостоверяющихЦентровОС")
            Или ТипЗнч(ВыборTLS.СертификатыУдостоверяющихЦентров) <> Тип("СертификатыУдостоверяющихЦентровОС") Тогда
            ВызватьИсключение "Один из профилей потерял системный источник доверия";
        КонецЕсли;
        Если ТипЗнч(АвтоTLS.СертификатКлиента) <> Тип("СертификатКлиентаОС")
            Или ТипЗнч(ВыборTLS.СертификатКлиента) <> Тип("СертификатКлиентаОС") Тогда
            ВызватьИсключение "TLS не сохранил тип источника клиентского сертификата";
        КонецЕсли;
        Если Не ЭтоLinux И (АвтоTLS.СертификатКлиента.СпособВыбораСертификатаОС <> РежимАвто
            Или ВыборTLS.СертификатКлиента.СпособВыбораСертификатаОС <> РежимВыбор) Тогда
            ВызватьИсключение "TLS не сохранил заявленную политику выбора";
        КонецЕсли;
        Статус85 = "Паспорта платформы и трех TLS-профилей совпали. Сеть, доверие сервера и наличие личного ключа не проверены";
        Сообщить(Статус85);
    #Иначе
        ВызватьИсключение "Нужен настольный тонкий или толстый управляемый клиент, не веб и не мобильный";
    #КонецЕсли
КонецПроцедуры

&НаКлиенте
Процедура СравнитьWindows85()
    ЦентрыWindows = Новый СертификатыУдостоверяющихЦентровWindows;
    КлиентWindowsАвто = Новый СертификатКлиентаWindows();
    КлиентWindowsВыбор = Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Выбирать);
    Если ТипЗнч(ЦентрыWindows) <> Тип("СертификатыУдостоверяющихЦентровWindows") Тогда
        ВызватьИсключение "Не создан системный источник Windows";
    КонецЕсли;
    Если КлиентWindowsАвто.СпособВыбораСертификатаWindows <> СпособВыбораСертификатаWindows.Авто
        Или КлиентWindowsВыбор.СпособВыбораСертификатаWindows <> СпособВыбораСертификатаWindows.Выбирать Тогда
        ВызватьИсключение "Режимы Windows не совпали";
    КонецЕсли;
    Сообщить("Windows: платформенные источники созданы; в TLS8.5 ниже передаются только источники ОС");
КонецПроцедуры

&НаКлиенте
Процедура СравнитьMacOS85()
    ЦентрыMacOS = Новый СертификатыУдостоверяющихЦентровMacOS();
    КлиентMacOSАвто = Новый СертификатКлиентаMacOS();
    КлиентMacOSВыбор = Новый СертификатКлиентаMacOS(СпособВыбораСертификатаMacOS.Выбирать);
    Если ТипЗнч(ЦентрыMacOS) <> Тип("СертификатыУдостоверяющихЦентровMacOS") Тогда
        ВызватьИсключение "Не создан системный источник macOS";
    КонецЕсли;
    Если КлиентMacOSАвто.СпособВыбораСертификатаMacOS <> СпособВыбораСертификатаMacOS.Авто
        Или КлиентMacOSВыбор.СпособВыбораСертификатаMacOS <> СпособВыбораСертификатаMacOS.Выбирать Тогда
        ВызватьИсключение "Режимы macOS не совпали";
    КонецЕсли;
    Сообщить("macOS: платформенные источники созданы; в TLS8.5 ниже передаются только источники ОС");
КонецПроцедуры

&НаКлиенте
Процедура СравнитьLinux85()
    ЦентрыLinux = Новый СертификатыУдостоверяющихЦентровLinux;
    КлиентLinux = Новый СертификатКлиентаLinux();
    Если ТипЗнч(ЦентрыLinux) <> Тип("СертификатыУдостоверяющихЦентровLinux")
        Или ТипЗнч(КлиентLinux) <> Тип("СертификатКлиентаLinux") Тогда
        ВызватьИсключение "Не созданы системные источники Linux";
    КонецЕсли;
    Сообщить("Linux: сертификаты CA читаются в PEM, клиентские ключи зависят от CryptoPro CSP. Режим выбора ОС игнорируется Linux");
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьСеанс85()
    ПроверитьСвойПустойСтенд();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. При открытии пульт проверяет свою пустую конфигурацию. Перед каждой командой guard повторяется на сервере, а версия и ТипПлатформы проверяются отдельно на клиенте. Windows, macOS и Linux выбираются по точным настольным значениям8.5, а не по строке имени компьютера.

  2. Windows-ветвь создает CA-источник Windows и два клиентских источника: конструктор без параметра использует Авто, второй принимает именно СпособВыбораСертификатаWindows.Выбирать. Readonly-свойство проверяет сохраненную политику. Аналогичный разбор macOS использует собственный тип перечисления; смешивать перечисления нельзя.

  3. Linux-ветвь создает реальные CA- и клиентский источники Linux и проверяет их типы. У СертификатКлиентаLinux нет придуманного свойства способа выбора. Оба источника являются описаниями источника данных, не списком найденных сертификатов и не доказательством доступного личного ключа.

  4. Переносимый СертификатКлиентаОС() задает Авто, а явный конструктор задает Выбирать. Свойство СпособВыбораСертификатаОС только читается. В Linux параметр игнорируется: пульт намеренно не требует конкретного значения readonly-паспорта и не обещает диалог. Проверка сохраненного режима выполняется только на Windows/macOS.

  5. СертификатыУдостоверяющихЦентровОС создается один раз для жизни открытой формы и повторно используется во всех трех современных профилях. Платформенные CA выше создаются для отдельной сравнительной диагностики, не для TLS-аргумента. Повторная диагностическая команда повторит эти платформенные конструкторы, что на Linux может быть дорогим: для рабочего кода оставляйте только общий кэшированный источник ОС.

  6. Первый TLS-профиль получает Неопределено как клиентский источник, но всегда получает системные CA. Второй и третий получают собственные реальные СертификатКлиентаОС с разными политиками. По контракту установленной8.5 конструктор OpenSSL принимает клиентские источники ОС/Файл/Криптографии и CA ОС/Файл; платформенные Windows/macOS/Linux-объекты в эти позиции здесь не подставляются.

  7. Проверяем readonly-паспорта всех трех TLS-профилей: CA не потеряны, профиль без идентификации не содержит клиента, два остальных сохранили тип ОС и правильные режимы. Установка CA не равна проверке удаленного сервера. Создание клиентского источника не равняется mTLS-аутентификации. Финальное сообщение строго ограничено паспортами, сетевых методов в модуле нет.

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

  1. В собственной WindowsVM вручную нажмите команду: при успешном создании объектов сообщения показывают Windows и совпадение трех паспортов. В отладчике проверьте тип БезКлиента.СертификатКлиента=Неопределено, у АвтоTLS/ВыборTLS источник ОС и разные политики. Никакого URL или передачи данных быть не должно.

  2. Отдельно повторите в своих Linux/macOSVM. При недоступном провайдере/хранилище получите исключение, Статус85 остается Проверка не завершена. Это неподтвержденный опыт, не успешное отсутствие сертификатов. Текущий урок статически проверен; эти ручные результаты не заявляются заранее.

  3. Повторное нажатие в той же форме не должно повторно создавать ЦентрыОС85: поставьте точку останова на его конструкторе и убедитесь, что переменная уже заполнена. Закройте форму: при следующем открытии новый клиентский источник создается заново, глобального серверного кэша нет.

  4. Для отрицательной проверки в своей копии измените имя учебной конфигурации или добавьте расширение: guard должен остановить команду до клиентских конструкторов. Веб/мобильный контекст и неизвестный ТипПлатформы отказывают, не выбирают случайно Windows.

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

В собственной форме подготовлены и проверены паспорта трех TLS-профилей: без клиентского источника, Авто и Выбирать, каждый с системными CA. Никакого подключения, проверки цепочки сервера, отзыва или входа по личному сертификату этот этап не подтверждает.

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

  1. Не запускайте этот сравнительный пульт в рабочей базе или под рабочей учетной записью: системные источники могут обращаться к реальным хранилищам пользователя. Здесь нет их изменения, импорта, удаления, обхода содержимого или вывода ключей.

  2. CA-доверие и личный сертификат решают разные задачи. Неопределено во втором параметре OpenSSL отключает проверку сертификата сервера — это не допустимое исправление ошибки доверия. Во всех наших профилях CA явно указаны.

  3. Политика Выбирать не обещает диалог при конструкторе, наличие подходящего сертификата, доступ к ключу или успешную авторизацию. На Linux значение режима игнорируется. Не пытайтесь присвоить readonly-свойствам новое перечисление после создания.

  4. Третий параметр проверки отзыва здесь оставлен по умолчанию. Проверка отзыва, имя сервера, время действия, цепочка, права к личному ключу и сетевой handshake требуют отдельного собственного стенда и не считаются проверенными чтением паспортов.

  5. В установленной справке macOS-гейт использует только объявленные MacOS_x86/MacOS_x86_64. Если ваш клиент возвращает иное значение, сначала сверяйте его native-справку, не придумывайте enum и не снимайте отказ. Серверные директивы для конструкторов выбора Windows/macOS не подходят: конкретный конструктор доступен в толстом/тонком клиенте.

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

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

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

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

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