Подключение к хранилищу конфигурации через 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 не будет опубликован. Обязательные поля помечены *