Мобильная платформа "1С:Предприятие" версий 8.3.7 и 8.3.8
19.02.2016

Использование самоподписанных сертификатов в мобильной платформе

Характер изложения материала в данной статье предполагает, что читатель имеет навыки работы с криптографическим пакетом OpenSSL.

Установка соединения с внешним сайтом и работа с различными веб-сервисами по протоколу HTTPS сводятся к использованию объекта ЗащищенноеСоединениеOpenSSL(<СертификатКлиента>, <СертификатыУдостоверяющихЦентров>) и его особенностям.

Одним из параметров конструктора объекта ЗащищенноеСоединениеOpenSSL является параметр СертификатыУдостоверяющихЦентров, который содержит сертификаты удостоверяющих центров OpenSSL. Если параметр не указан, то проверка сертификата сервера будет осуществляться.

В мобильной платформе "1С:Предприятие" версии 8.3.7 значение второго параметра игнорируется. Проверка сертификата сервера всегда осуществляется с помощью сертификатов удостоверяющих центров, установленных на устройстве.

1. Создание самоподписанного сертификата удостоверяющего центра с помощью пакета OpensSSL

Для создания сертификатов в нашем примере была использована библиотека 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

2. Создание сертификата сервера с помощью openssl

Создаем в нашем рабочем каталоге файл 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

 

3. Импорт server.pfx в веб-сервер

В нашем случае в качестве веб-сервера используется IIS 8.

Настроим привязки сайта отдельно по DNS и по IP (если используется) с нашим сертификатом.

Не забудьте перезапустить веб-сервер.

4.  Установка сертификата удостоверяющего центра

Для проверки работоспособности сайта на ПК необходимо установить TestRootCA.crt в доверенные корневые центры сертификации.

Работоспособность можно проверить в браузере Google Chrome. Браузер Internet Explorer при соединении по ip выдает ошибку.

Устанавливаем TestRootCAder.crt на устройство. На Android для этого подключаем устройство как USB-накопитель, копируем сертификат в корень и устанавливаем из настроек безопасности устройства. На iOS-устройство можно послать сертификат почтой или другими способами, но устанавливать сертификат следует из программ Apple, в противном случае, он не будет установлен.

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

Примечание. Помните, что при соединении  iOS-устройство запоминает результат аутентификации. И смена сертификатов на сервере и устройстве может не повлиять на результат следующего соединения. Возможно, придется подождать, когда обновится кеш аутентификации.

 

5. Создание соединения из мобильного приложения

Создаем в конфигурации защищенное соединение (в качестве адреса указываем один из адресов раздела alternate_names файла SigningCA.cfg):

Копировать в буфер обмена
Вывод = "Тест HTTPS с без параметров" + Символы.ПС;
Защита = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Адрес,,,,,,Защита);
Запрос = Новый HTTPЗапрос();
Ответ = Соединение.Получить(запрос);

Если Ответ <> Неопределено Тогда
	Вывод = Вывод + Ответ.ПолучитьТелоКакСтроку();
Иначе
	Вывод = Вывод + "Ничего не вернулось!"
КонецЕсли;

ЭтаФорма.ОбновитьОтображениеДанных();

Устанавливаем конфигурацию в мобильную платформу и запускаем.

Файлы, используемые в примерах, находятся в каталоге \Its\EXE\mobileOpenSSL\

Скопировать архив приложенных файлов