Подключение к хранилищу конфигурации через HTTPS


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

Преамбула — в силу специфики организации пришлось создать несколько однотипных, не связанных между собой баз на разных серверах с одинаковой обновляемой конфигурацией, что было решено реализовать подключением к единому хранилищу по протоколу HTTPS

Фабула

Общеизвестные и много где описанные шаги тезисно:

1. Из конфигуратора на выбранном сервере создаём хранилище конфигурации, создаём пользователя Windows, даём ему необходимые (все) разрешения на каталог хранилища

2. создаём сервер "crserver.exe -instsrvc -d [каталог хранилища] -usr [пользователь Windows] -pwd [пароль]" и пробуем подключиться к нему из 1С по адресу

tcp://[имя или IP сервера]/[подкаталог если есть].

Утилита crserver лежит в каталоге x86: "C:Program files1cv8[номер версии конфигурации]in"

x64: "C:Program files1cv8 (x86)[номер версии конфигурации]in"

3. устанавливаем IIS

4. в корневом каталоге (по умолчанию C:inetpubwwwroot) создаём подкаталог (например REPO) и в нем создаём текстовый файл (например REPO.cr) следующего содержания

<?xml version="1.0" encoding="UTF-8"?>
<repository connectString="tcp://[имя сервера хранилища]"/> 

5.Заходим в IIS Manager находим созданный каталог и конвертируем его в приложение (правой кнопкой Convert to application) заходим в него и добавляем обработчик 1С в Handler mappings (правая кнопка — add script map. Path = *; Executable = "C:Program Files1cv8[номер версии конфигурации]inwsisapi.dll";name = "1C Web-service Extension"). Если сервер x64 а 1с используете x86 то соответственно изменится путь к dll и в advanced settings вашего application pool надо поставить разрешение использовать 32 битные приложения

6. проверяем что хранилище доступно по адресу  http://[имя веб сервера]/REPO/REPO.cr/[Имя подкаталога с хранилищем если есть]

7. далее если при подключении через https появляется ошибка про узел не прошедший проверку необходимо выполнить следующие шаги:

— Импортировать сертификат сервера в локальный компьютер — доверенные центры сертификации (local computer — central root certificate authoriities)

далее если система "не знает" центр сертификации выдавший этот сертификат, необходимо так же:

— импортировать сертификат удостоверяющего центра в хранилище сертификатов локального компьютера — доверенные центры сертификации

— конвертировать сертификат удостоверяющего центра в формат PEM с помощью утилит OpenSSL (для виндоуз брать например там http://slproweb.com/download/Win64OpenSSL_Light-1_1_0h.exe) 

для конвертации можно написать скрипт следующего содержания (прилагается)

C:OpenSSLinopenssl x509 -inform der -in %1.cer -text -outform PEM -out tmp_%1.pem
C:OpenSSLinopenssl x509 -in tmp_%1.pem -noout -fingerprint -md5 > %1.pem
Type tmp_%1.pem >> %1.pem
del tmp_%1.pem

Далее содержимое PEM файла добавляем к файлу 

C:Program Files1cv8[Номер версии конфигурации]incacert.pem

C:Program Files (x86)1cv8[Номер версии конфигурации]incacert.pem

И если всё правильно хранилище будет доступно извне по протоколу https

ps. так же крайне необходимо следить чтобы имя сервера IIS которое используется для подключения к хранилища точно совпадало с именем на которое выдан сертификат (в случае расхождений самый простой вариант — внести правки в файл hosts (C:WindowsSystem32driversetchosts) чтобы IP IIS соответствовало имя из сертификата.

14 Comments

  1. biformatus

    А есть способ сделать нормальный адрес, например субдомен.домен.ком/имя подкаталога хранилища?

    Reply
  2. ktb

    (1)Если адрес доступен «снаружи», то получаете и привязываете к нему dns-имя любым доступным способом. Если не нравится часть адреса «repo/repo.cr», то nginx поможет.

    Reply
  3. KonS

    (1) согласен с (2) — это если только средствами веб-сервера.

    Reply
  4. premierex

    Познавательно. Давно работаю с хранилищем конфигурации, а вот с сервером хранилища пока ещё не сталкивался. Добавлю себе в закладки.

    Reply
  5. KonS

    (4)в общем случае можно ограничиться первыми двумя шагами. дальше если есть необходимость дать доступ по слабому и/или защищенному каналу

    Reply
  6. premierex

    Было бы неплохо ещё и описать работу, например, с Apache (далеко не все используют IIS). Ещё познавательней было бы.

    Reply
  7. KonS

    (6)публикации на инфостарте по теме есть и достаточно подробные *например https://infostart.ru/public/646384/ поэтому смысла плодить не вижу. я свои заметки писал, потому как пришлось много источников перелопатить именно по теме https и сертификатов

    Reply
  8. premierex

    (7) Спасибо за ссылку. Поизучаю.

    Reply
  9. kernelio

    Уточните по расширению файла в каталоге веб-приложения? На ИТС пишут «1ccr» в статье вы указали — «cr». Или это не имеет значения?

    Reply
  10. KonS

    (9)Это влияет на то что вы будете писать в адресной строке. напишете 1ccr и в адресе будете соответственно указывать 1ccr. когда публикуете на веб сервере вы указываете обработчик wsisapi.dll из поставки 1с и говорите какие файлы им обрабатывать (правая кнопка — add script map. Path = *; Executable = «C:Program Files1cv8[номер версии конфигурации]inwsisapi.dll»;name = «1C Web-service Extension») в строчке path стоит * соответственно все файлы будут им обрабатываться, а для него уже важно именно содержимое а не расширение.

    Reply
  11. user634962_ismdmr

    Добрый день.

    Дошел до 7-го пункта, вышло сообщение «Удаленный узел не прошел проверку».

    Далее по рекомендациям решения данной проблемы, немного не понятно.

    «- Импортировать сертификат сервера в локальный компьютер — доверенные центры сертификации (local computer — central root certificate authoriities)» — это имеется ввиду сертификат IIS экспортировать и далее импортировать в локальный компьютер ?

    В IIS ранее настраивал связку https куда указал сгенерированный сертификат. Этого не нужно делать ?

    Если есть, дайте пожалуйста ссылку где можно прочитать предысторию вашей инструкции. Желательно с момента генерации ключей 🙂

    Спасибо.

    Reply
  12. KonS

    (11)Здравствуйте. В данном случае «Сертификат» это открытый сертификат который выдает узел при подключении по https (см картинку) ссылки на источники не сохранил, можете попробовать поискать по приведенным командам для конвертации

    Reply
  13. user758181

    (12)

    Спасибо за отклик.

    К сожалению, ошибка подключения до сих пор присутствует. Версия платформы 8.3.12.1529.

    Через браузер локального компьютера, стартовая страница IIS отображается, правда сертификат от COMODO. На самом же сервере, где установлен IIS, в браузере страница открывается под сертификатом что я ранее сам генерировал.

    Экспортировал сертификат из IE, и преобразовал в файл *.pem. Все содержимое, вместе с md5 скопировал/вставил в файл «cacert.pem».

    В итоге, ничего не помогло.

    Может дело в именовании сервера и сертификата, о том что Вы говорили в конце поста ? Правда, не совсем ясно, о каких именах идет речь, что с чем должно совпадать 🙂

    Спасибо.

    Reply
  14. user758181

    (12) KonS, скажите, вы какую версию платформы использовали для настройки хранилища на тот момент? Дело в том, что есть ли смысл настраивать файл cacert.pem, если версия платформы 8.3.12? Что по идее должно уметь просматривать сертификаты из хранилища операционной системы.

    P.S. Так и не получилось подключиться к хранилищу через https.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *