Мобильная платформа "1С:Предприятие" версий 8.3.7 и 8.3.8
19.02.2016
Характер изложения материала в данной статье предполагает, что читатель имеет навыки работы с криптографическим пакетом OpenSSL.
Установка соединения с внешним сайтом и работа с различными веб-сервисами по протоколу HTTPS сводятся к использованию объекта ЗащищенноеСоединениеOpenSSL(<СертификатКлиента>, <СертификатыУдостоверяющихЦентров>) и его особенностям.
Одним из параметров конструктора объекта ЗащищенноеСоединениеOpenSSL является параметр СертификатыУдостоверяющихЦентров, который содержит сертификаты удостоверяющих центров OpenSSL. Если параметр не указан, то проверка сертификата сервера будет осуществляться.
В мобильной платформе "1С:Предприятие" версии 8.3.7 значение второго параметра игнорируется. Проверка сертификата сервера всегда осуществляется с помощью сертификатов удостоверяющих центров, установленных на устройстве.
Для создания сертификатов в нашем примере была использована библиотека OpenSSL 1.0.2a 19 Mar 2015 (подробнее на сайте http://openssl.org/).
Создаем рабочий каталог для создания в нем сертификатов. В нем каталог для базы данных, который будет использовать пакет openssl. В нем создаем два файла db.txt и db.crt.srl в кодировке ANSI. В оба файла записываем "01" без переводов строк и иных данных. Размер файлов должен быть строго 2 байта. Эти файлы будут использовать наши конфигурационные файлы для openssl. (в приложенном архиве файлы db уже созданы)
Для удобства в нашем рабочем каталоге создаем файл ca.bat (в приложенном архиве уже создан):
Копировать в буфер обменаmkdir TestRootCA
SET FILENAME=TestRootCA\TestRootCA
openssl.exe req -new -keyout %FILENAME%.key -out %FILENAME%.csr -config RootCA.cfg
openssl.exe ca -selfsign -in %FILENAME%.csr -out %FILENAME%.crt -config RootCA.cfg -extensions root_ca_ext
openssl.exe x509 -inform PEM -outform DER -in %FILENAME%.crt -out %FILENAME%der.crt
Исполняем ca.bat. Вводим пароли и подтверждаем подпись сертификата. В результате мы получим в каталоге TestRootCA следующие файлы, которые следует установить на устройстве:
TestRootCA.crt
TestRootCA.csr
TestRootCA.key
TestRootCAder.crt
Создаем в нашем рабочем каталоге файл server.bat, который нам поможет создать сертификат сервера на основе нашего CA-сертификата (в приложенном архиве уже создан).
Копировать в буфер обменаmkdir server
SETFILENAME=server\server
openssl.exe req -new -keyout %FILENAME%.key -out %FILENAME%.csr -sha256 -config SigningCA.cfg
openssl.exe ca -in %FILENAME%.csr -out %FILENAME%.crt -config SigningCA.cfg -extensions server_ext
openssl.exe pkcs12 -export -inkey %FILENAME%.key -in %FILENAME%.crt -out %FILENAME%.pfx
Обратите внимание на раздел [ alternate_names ] в файле SigningCA.cfg. В нем следует перечислить все требуемые адреса, по которым будет доступен ваш сервер.
[ alternate_names ]
IP.1 = 127.0.0.1
IP.2 = 127.0.0.2
DNS.1 = box.example.ru
DNS.2 = example.ru
Исполняем server.bat. Вводим пароль для нового сертификата. Далее вводим пароль от нашего CA-ключа TestRootCA.key. Подтверждаем подпись сертификата. Для экспорта вводим еще раз пароль от server.key и пароль для экспорта, который нужно будет ввести при импорте server.pfx в веб-сервис (он может быть пустым). В результате, в каталоге server будут получены файлы для импорта в веб-сервис:
server.crt
server.csr
server.key
server.pfx
В нашем случае в качестве веб-сервера используется IIS 8.
Настроим привязки сайта отдельно по DNS и по IP (если используется) с нашим сертификатом.
Не забудьте перезапустить веб-сервер.
Для проверки работоспособности сайта на ПК необходимо установить TestRootCA.crt в доверенные корневые центры сертификации.
Работоспособность можно проверить в браузере Google Chrome. Браузер Internet Explorer при соединении по ip выдает ошибку.
Устанавливаем TestRootCAder.crt на устройство. На Android для этого подключаем устройство как USB-накопитель, копируем сертификат в корень и устанавливаем из настроек безопасности устройства. На iOS-устройство можно послать сертификат почтой или другими способами, но устанавливать сертификат следует из программ Apple, в противном случае, он не будет установлен.
Проверяем, что наш сайт стал доступен из браузера на устройстве. Так как сертификат удостоверяющих центров сделали самостоятельно, то браузеры могут ему не доверять. В ответ на предупреждение браузера нажимаем "Доверять".
Примечание. Помните, что при соединении iOS-устройство запоминает результат аутентификации. И смена сертификатов на сервере и устройстве может не повлиять на результат следующего соединения. Возможно, придется подождать, когда обновится кеш аутентификации.
Создаем в конфигурации защищенное соединение (в качестве адреса указываем один из адресов раздела alternate_names файла SigningCA.cfg):
Копировать в буфер обменаВывод = "Тест HTTPS с без параметров" + Символы.ПС; Защита = Новый ЗащищенноеСоединениеOpenSSL(); Соединение = Новый HTTPСоединение(Адрес,,,,,,Защита); Запрос = Новый HTTPЗапрос(); Ответ = Соединение.Получить(запрос); Если Ответ <> Неопределено Тогда Вывод = Вывод + Ответ.ПолучитьТелоКакСтроку(); Иначе Вывод = Вывод + "Ничего не вернулось!" КонецЕсли; ЭтаФорма.ОбновитьОтображениеДанных();
Устанавливаем конфигурацию в мобильную платформу и запускаем.
Файлы, используемые в примерах, находятся в каталоге \Its\EXE\mobileOpenSSL\
Скопировать архив приложенных файлов