1С 8.2 HTTPS: добавление сертификатов в cacert.pem

В 1С 8.2, при попытке установить HTTPS соединение с сайтом, можно получить такую ошибку: "Peer certificate cannot be authenticated with known CA certificates". В то же время, при соединении с тем же адресом в 1С 8.3, всё работает. В чём дело, и как это исправить?

Дело в том, что 8.3 пользуется системным хранилищем сертификатов. А в 8.2 в качестве такого хранилища выступает файл cacert.pem, расположенный в каталоге 1С (например: C:\Program Files\1cv82t\8.2.17.169\bin\cacert.pem). И там есть не все современные корневые сертификаты. Надо добавить недостающее, и всё должно заработать.

План такой:
1. Получить сертификаты с сайта
2. Преобразовать сертификаты в текстовый вид
3. Добавить тексты сертификатов в cacert.pem

Поскольку я не знаю, каким веб-браузером вы пользуетесь, то рассмотрю разные варианты. Из-за этого первый пункт плана получился самым обширным. Полное содержание этой статьи выглядит так:

1. Получить сертификаты с сайта
1.1 Открыть адрес в браузере
1.2 Открыть окно просмотра сертификата
1.2.1 Internet Explorer 11
1.2.2 Google Chrome 68
1.2.3 Opera 54
1.2.4 Firefox 61
1.3 сохранить нужные сертификаты в файл
1.3.1 выбор нужных сертификатов
1.3.2  Экспорт сертификата в стандартном просмотрщике
1.3.3 экспорт сертификата в Firefox:
2. Подготовка текста сертификата
3. Добавление сертификата в cacert.pem

1. Получить сертификаты с сайта

Чтобы получить сертификаты, можно открыть нужный адрес в браузере, затем попросить браузер показать дополнительную информацию или свойства, среди них выбрать просмотр сертификата, и сохранить нужные сертификаты в файле.

1.1 Открыть адрес в браузере

Первый пункт (открыть нужный адрес) затруднений не вызывает: надо просто ввести нужный адрес (не забывая префикс https:// в начале) в адресную строку. Для примера я возьму свой сайт для демо-магазина https://demo.sync1c.ru:



Кстати, на момент написания статьи, я так и не привёл этот сайт в порядок в плане HTTPS... поэтому браузеры ругаются, что на странице присутствует небезопасное содержимое. Если посмотреть исходный код страницы, то видно, что адреса всех картинок, скриптов, и т.д. начинаются на "http://". Надо поменять на "https://" или "//", но пока руки не доходят. Впрочем, это сделает наш пример даже интереснее. Поскольку я точно знаю, что сайт безопасен, знаю, чем вызваны предупреждения, и не собираюсь вводить сюда данные кредитки, то могу не обращать внимание на опасения браузера.

1.2 Открыть окно просмотра сертификата

Итак, надо добраться до сертификата сайта. В разных браузерах это выглядит по-разному:

1.2.1 Internet Explorer 11

В главном меню выбрать Файл / Свойства. Либо нажать правой кнопкой на пустом месте страницы (где нет ничего: ни картинок, ни надписей, ни кнопок, и т.д.) и выбрать "Свойства" - обычно это самый нижний пункт меню. Откроется окно свойств страницы:



Нажмём кнопку "Сертификаты" - откроется окно "Сертификат":



1.2.2 Google Chrome 68


Слева от адреса кликнуть иконку "сведения о сайте". Она может выглядеть как буква "i" в кружочке, или надпись "Защищено", и т.д. Появится окошко сведений:




Нажмём "Сертификат" - откроется окно "Сертификат", практически такое же, как в IE:



1.2.3 Opera 54



Слева от адреса кликнуть иконку "сведения о сайте". Она может выглядеть как замочек, или земной шар, и т.д. Появится окошко сведений:



Нажмем "Подробнее" - появятся подробности:



Кликнем на сертификат - откроется стандартное окно "Сертификат", как в Google Chrome:



1.2.4 Firefox 61




Слева от адреса кликнуть иконку "Show site information". Появится окошко сведений:


Нажать уголок "Show connection details". Появится окошко "Site security":



Нажать "More Information". Появится "Page Info":



Нажать "View Certificate". И вот тут, наконец-то, появится "Certificate Viewer":



В отличие от остальных браузеров, Firefox использует свой собственный просмотрщик сертификатов.

1.3 сохранить нужные сертификаты в файл

1.3.1 выбор нужных сертификатов

Цепочка сертификатов для demo.sync1c.ru выглядит так:



Здесь мы видим, что сертификат для сайта "demo.sync1c.ru" выпущен издателем "cPanel, Inc. Certification Authority". В свою очередь, его сертификат выпущен издателем "COMODO SECURE (tm)". Т.е., грубо говоря, COMODO ручается за cPanel, а cPanel ручается за demo.sync1c.ru. У всех браузеров есть списки сертификатов, которым можно доверять, и этот сертификат COMODO туда входит. Поэтому браузеры доверяют COMODO, с его подачи они доверяют cPanel, и, уже с её подачи - сайту demo.sync1c.ru. Примерно так это работает, если грубо и упрощённо.

Чтобы 1С 8.2 стала работать с нашим сайтом по HTTPS, надо добавить соответствующие сертификаты в её список доверенных. Можно пойти двумя путями:
- добавить сертификаты COMODO и cPanel.
- добавить сразу сертификат demo.sync1c.ru

Я в своё время пошёл первым путём, т.е. добавил сертификаты COMODO и cPanel, после этого доступ к demo.sync1c.ru заработал. Затем ещё добавил сертификат для localhost, т.е. это я уже сделал вторым путём. Тоже работает. Сейчас я хотел поэкспериментировать, удаляя/добавляя сертификаты, и обнаружил, что старая версия cacert.pem почему-то стала позволять работать с demo.sync1c.ru. Вероятно, что-то как-то изменилось в родительских сертификатах цепочки. Мир сертификатов, он не является статичным: выпускаются новые, старые отзываются, либо прекращается срок действия, и т.д. Соответственно, не факт, что тот или иной рецепт однозначно сработает - возможно, вам придётся попробовать несколько вариантов.

1.3.2  Экспорт сертификата в стандартном просмотрщике


Напомню: IE, Chrome и Opera используют одинаковые окна для просмотра сертификата (видимо, это стандартное системное окно), а Firefox пользуется своим.

1. На вкладке "Путь сертификации" выбираем нужный сертификат, нажимаем "Просмотр сертификата". Это, если нужен какой-то из родительских сертификатов. Если сам конечный сертификат - этот шаг пропускаем, мы и так уже его просматриваем.

2. Переходим на вкладку "Состав", и видим кнопку "Копировать в файл":



В браузере Internet Explorer эта кнопка почему-то всегда неактивная, но в Chrome и Opera она работает. Для тех же самых сертификатов. Поэтому, если к вас Internet Explorer, и тоже кнопка неактивная - закройте браузер, и скачайте другой.

После нажатия "Копировать в файл" появляется окно "Мастер экспорта сертификатов":



Нажмём "Далее", попадаем на выбор формата:



Оставляем первый пункт (Файлы X.509 (.CER) в кодировке DER):

Далее выбираем папку и имя файла:



Ещё одно окно с подтверждением:



Готово:



1.3.3 экспорт сертификата в Firefox:


На вкладке Details выбираем нужный сертификат, нажимаем "Export...":



Для типа файла выбираем "X.509 Certificate (DER) (*.der)":



И нажимаем "Сохранить". Готово!

2. Подготовка текста сертификата


Теперь надо подготовить текст сертификата для вставки в файл cacert.pem. Он выглядит примерно так:

Название
========

MD5 Fingerprint=....
Certificate:
   ...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----


Название сертификата надо написать вручную, остальное можно получить с помощью консольного приложения openssl.

Проект OpenSSL - это бесплатный набор инструментов с открытым исходным кодом, он широко используется в криптографических задачах подобного рода. Но на официальном сайте можно скачать только исходные тексты. Однако официальная Wiki предлагает несколько ссылок на хранилища OpenSSL в откомпилированном (готовом к использованию) виде:
https://wiki.openssl.org/index.php/Binaries

Например, первая ссылка ведёт на этот сайт:
http://slproweb.com/products/Win32OpenSSL.html

Здесь предлагается скачать OpenSSL в виде программы-инсталлятора для Windows. Если вы владеете английским, то чтение раздела "System Requirements" наверняка вас развлечёт :) Не знаю, зачем нужен инсталлятор для консольной программы... хотя, возможно, он прописывает путь в системную переменную PATH - это как бы удобно. В общем, надеюсь, вы сумеете найти и скачать OpenSSL из надёжного источника, либо собрать её самостоятельно.

Чтобы получить текст сертификата для cacert.pem, выполните такую команду:

openssl.exe x509 -inform der -in <файл-сертификата> -fingerprint -md5 -text > text.txt


Вместо <файл-сертификата> подставьте имя файла, куда вы скачали/экспортировали сертификат. Обратите внимание, что выход (результат работы) программы перенаправляется в файл text.txt - после выполнения этой команды там будет готовая часть текста для cacert.pem (без названия). Если вы обрабатываете несколько сертификатов, то не забывайте менять имя выходного файла.

Надеюсь, вы сумеете справиться с запуском консольной программы и получением результатов. Иначе надо писать про это отдельную статью. Попробуйте погуглить "работа в командной строке Windows", например.

3. Добавление сертификата в cacert.pem


Добавьте название и текст сертификата, полученный на шаге 2, в конец cacert.pem с помощью любого хорошего текстового редактора (блокнот Windows не рекомендуется). Поскольку cacert.pem находится внутри каталога "Program Files", надо запускать редактор от имени администратора. Либо перенести cacert.pem в другое место, исправить, а потом перенести обратно - проводник Windows будет запрашивать разрешение администратора.

Если у вас нет хорошего текстового редактора - скачайте Notepad++.