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). И там есть не все современные корневые сертификаты. Надо добавить недостающее, и всё должно заработать.
План такой:
- Получить сертификаты с сайта
- Преобразовать сертификаты в текстовый вид
- Добавить тексты сертификатов в 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. На вкладке "Путь сертификации" выбираем нужный сертификат, нажимаем "Просмотр сертификата". Это, если нужен какой-то из родительских сертификатов. Если сам конечный сертификат - этот шаг пропускаем, мы и так уже его просматриваем.
- Переходим на вкладку "Состав", и видим кнопку "Копировать в файл":

В браузере 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++.
Следующая статья: Подключение существующего интернет-магазина OpenCart к 1С
Предыдущая статья:
Sync1C - статьи