Веб сервис через HTTPS

1. maguga 19 26.06.16 19:29 Сейчас в теме
Добрый день, коллеги.
Я снова и снова возвращаюсь к вопросам использования HTTPS протокола в веб сервисах. Документации почти нет, примеров в стандартных конфигурациях тоже, спецов кто сталкивался с подобным среди моих знакомых нет.

Я создаю сервис для пользователей, сервис использует протокол https и собственно куплен официальный сертификат. Для пользователей я выпускаю обработку, которая должна использовать протокол https и собственно понимать сертификат.

Везде пишут что мол с сертификатом нужно проделать танцы с бубном, сохранить его в определенном формате и добавить в CACERT.PEM
Но хочу заметить что у сервиса не "кустарный" сертификат, а подписан удостоверяющим центром. Неужели в 1с все так плохо, что на клиентской стороне необходимо иметь доступ к файловой системе? И как быть через год, когда сертификат обновится? перепрописывать у сотен клиентов файлики?

Вообщем задача следующая. Как обеспечить работу с https без добавления сертификата в CACERT.PEM? Как не привязываться к данному конкретному сертификату. ведь через год сертификат поменяется? или как автоматически прописать сертификат у пользователя?

По http работало так.
	Пользователь="------@mail.ru";
	Пароль="********";
	Прокси=Неопределено;
	Попытка
		Определения = Новый WSОпределения("http://www.ean13.org/ws/trade.wsdl",Пользователь,Пароль,,SSL); 
		Прокси = Новый WSПрокси(Определения, "http://www.ean13.org/trade/","ServiceEAN13_Trade", "Trade"); 
		
		Прокси.Пользователь=Пользователь; 
		Прокси.Пароль=Пароль; 
		
	Исключение
	    Сообщить(ОписаниеОшибки());
		Сообщить("Не удалось подключится к сервису http://www.ean13.org/ws/trade.wsdl. Обратитесь к системному администратору");
	КонецПопытки;
	Возврат Прокси;
Показать


После включения сертификата пытаюсь
	Пользователь="------@mail.ru";
	Пароль="********";
	Прокси=Неопределено;
	Попытка
		SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),Новый СертификатыУдостоверяющихЦентровWindows());
		Определения = Новый WSОпределения("https://www.ean13.org/ws/trade.wsdl",Пользователь,Пароль,,SSL); 
		Прокси = Новый WSПрокси(Определения, "http://www.ean13.org/trade/","ServiceEAN13_Trade", "Trade"); 
		//Прокси = Новый WSПрокси(Определения, "https://www.ean13.org/trade/","ServiceEAN13_Trade", "Trade"); 
		
		Прокси.Пользователь=Пользователь; 
		Прокси.Пароль=Пароль; 
		
	Исключение
	    Сообщить(ОписаниеОшибки());
		//Сообщить("Не удалось подключится к сервису https://www.ean13.org/ws/trade.wsdl. Обратитесь к системному администратору");
		Сообщить("Не удалось подключится к сервису http://www.ean13.org/ws/trade.wsdl. Обратитесь к системному администратору");
	КонецПопытки;
	Возврат Прокси;
Показать


На строке
Определения = Новый WSОпределения("https://www.ean13.org/ws/trade.wsdl",Пользователь,Пароль,,SSL);

Валится с ошибкой

Ошибка при вызове конструктора (WSОпределения): При создании описания сервиса произошла ошибка. URL сервиса: https://www.ean13.org/ws/trade.wsdl: Ошибка работы с Интернет: Удаленный узел не прошел проверку


кому интересно потыкаться есть открытая регистрация в сервис https://ean13.org/index.php?register

Прошу помощи гуру.
adhocprog; +1 Ответить
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. ture 606 27.06.16 12:09 Сейчас в теме
(1) maguga, делай веб ссылку, чтоб не качать и не строить определения всякий раз.
10. maguga 19 27.06.16 14:55 Сейчас в теме
(8) ture, Не понял о чем тут речь. Сервис развивается, все изменения отражаются в WSDL. В данном случае у клиента всегда новый сервис.
24. ture 606 30.06.16 18:05 Сейчас в теме
(10) maguga,
Не понял о чем тут речь. Сервис развивается, все изменения отражаются в WSDL. В данном случае у клиента всегда новый сервис.

Ты ведь видел размер wsdl? Вот он большой, и должен отобразиться в типы (описание). Не, мне вообще нравятся твои речи. Надеюсь так мыслит большинство, потому что начинаю чувствовать к этому вкус.
25. maguga 19 01.07.16 09:40 Сейчас в теме
(24) ture, Ну что считать большим? Несколько кб это разве большой? Установка соединения и разбор WSDL происходит довольно быстро. Особенно учитывать то, что WSDL создавался руками в блокноте специально для 1с. Там вообще нет ничего лишнего.
2. babikov 27.06.16 10:27 Сейчас в теме
Как вариант поднять свой сервер сертификации (поэксперементировать с самоподписанным) или распростронять его через групповые политики домена.

Управление групповой политикой > Объекты групповой политики > создать - создаем контейнер

Конфигурация компьютера - Конфигурация Windows - Параметры безопасности - Политики открытого ключа - Доверенные корневые центры сертификации. В правой части окна в меню правой кнопкой мыши выбираем Импорт и импортируем сертификат.

Политика создана, теперь самое время проверить правильность ее применения. В оснастке Управление групповой политикой выберем Моделирование групповой политики и запустим по правому щелчку Мастер моделирования.

Выполнив моделирование можем убедиться, что политика успешно применяется к указанному компьютеру, в противном случае раскрываем пункт Отклоненные объекты и смотрим причину по которой политика оказалась неприменима к данному пользователю или компьютеру.

После чего проверим работу политики на клиентском ПК, для этого обновим политики вручную командой:

gpupdate

И проверяем в хранилище сертификаты.
3. TODD22 18 27.06.16 10:33 Сейчас в теме
Да то же интересует вопрос безопасности сервисов. И есть ли какие то способы обезопасить соединения без сертификатов?
Думаю поднять VPN у меня все клиенты это собственные магазины. Проблема только в том что их очень много.
Но вот можно ли как то защитить сервис без подключения к клиентским ПК и без vpn ?
Может сертификаты использовать... но погуглив понял что с ними проблем не меньше чем с vpn будет.
5. babikov 27.06.16 11:10 Сейчас в теме
(3) TODD22, Если использовать сертификаты то это веб-морда.

Если VPN то тут уже несколько решений, самое простое это терминальный сервер, люди подключаются и работаю.

Либо можно вообще не заморачиваться пробросить порт удаленного рабочего стола RDP (причем вешаем его на нестандартный порт, ради той же безопасности), придумываем сложнее пароль (это очень важно) и пользуемся, в России 70% так пользуются.
6. TODD22 18 27.06.16 11:21 Сейчас в теме
(5) babikov,
Если VPN то тут уже несколько решений, самое простое это терминальный сервер, люди подключаются и работаю.

Мне не надо что бы "подключались и работали". У меня для этого web сервис есть. По которому магазины периодически обмениваются информацией с центральной базой.
4. el-gamberro 56 27.06.16 10:57 Сейчас в теме
Как вариант написать свой веб-сервер работающий с SSL Сокетами на java

http://stackoverflow.com/questions/13874387/create-app-with-sslsocket-java
7. babikov 27.06.16 12:06 Сейчас в теме
Тогда как бюджетный вариант можно быстро поднять OpenVPN, все опять же зависит от того какое оборудование у вас торчит наружу. Если стоит железка Cisco, Kerio или Microtik VPN вы быстро поднимите и очень достойного качества.
9. maguga 19 27.06.16 14:54 Сейчас в теме
Ребят, веб сервис на PHP.

Мои клиенты это люди скачавшие обработку с моего сайта или инфостарта. Я не знаю что у них за система, я не знаю режим работы(фалйловый или серверный), я не знаю в домене они или нет. То есть у меня нет возможности физически ставить у них сертификаты. Нет возможности(вернее желания) консультировать бухгалтера как установить сертификат, а если есть возможность установить сертификат из обработки прописав ее у клиента, то я не понимаю сути безопасности.

Я хочу построить удобный, функциональный, правильный сервис. Ручное прописывание сертификата я считаю неправильным вариантом.
11. maguga 19 27.06.16 15:01 Сейчас в теме
И еще раз уточню вопрос.

Сейчас 1с работает с сертификатами прописаными в их файле. Там я так понимаю присутствуют только глобальные центры сертификации. Если мой сертификат подписан одним из центров, которые в свою очередь подписаны тем кому 1с доверяет, то как заставить 1с доверять и этому сертификату.

Можно ли это прописать кодом обработки. Что мол есть соединение. Он защищено, есть сертификат(какой то). Ты его возьми, проверь его подлинность и продолжи с ним работать.

И я не знаток безопасности, и возможно пишу какой то бред. тога скажите как это вообще должно работать?
12. babikov 28.06.16 05:47 Сейчас в теме
(11) maguga, доверие к сертификату должно быть на уровне системы, сомневаюсь что получится с обработкой.
15. maguga 19 28.06.16 10:42 Сейчас в теме
(12) babikov, Ок,доверие системы это понятно.

Я просто не догоняю логики сертификации. Вот давайте рассмотрим пример на уровне браузера.

//я не эксперт в области сертификации, извините за терминалогию
1) Есть глобальный сертификационный центр, которому изначально доверяют все браузеры.
2) Глобальный центр выпускает сертификат 1-го уровня, и он заверяется ГЦ
3) Центр подписанный сертификатом 1-го уровня выпускает сертификат 2-го уровня, и заверяется подписью первого.
4) Сертификат 2 уровня устанавливается на сайт.
Получается ГЦ->1уровень->2уровень

И так. Сайт на котором установлен сертификат 2го уровня открывается в браузере с заголовком https. Что происходит далее? Я так понимаю браузер смотрит на сертификат и

Браузер говорит: "я тебя не знаю, кто ты"?
Сайт отвечает: "я сертификат 2уровня, мой папа сертификат 1-го уровня"
Браузер смотрит на папу и говорит:"А ты кто такой?"
Сертификат 1 уровня отвечает: "Я сертификат 1 уровня, мой папа сертификат ГЦ".
Браузер такой: "Так с этого и надо было начинать, твоего деда то я знаю. Все заходи дорогой".


Либо, в случае если сертификат самопальный.

Браузер: "Вообщем сайт, я не знаю кто ты, не знаю твоих родителей и дальних родствеников. Я с тобой знакомится не хочу!!!"
Браузер задает вопрос пользователю: "Тут это, непонятный какой то товарищ. Я его пробил, он какой то мутный тип. Че мне с ним делать? Запретить или добавить в знакомые."
Пользователь жмет кнопку "Добавить сертификат в друзья".


Я надеюсь я правильно понимаю суть происходящего?

Теперь то же самое применимо к 1с, причем для любого типа сертификатов.


1с: "Удаленный узел не прошел проверку "
Пользователь: "Что это значит?"
1с: "Удаленный узел не прошел проверку "
Пользователь: "Ну как сделать чтоб ты прошел эту проверку? Куда нажать чтоб ты стал ему доверять?"
1с: "Оформите подписку на ИТС, зайдите на сайт, прочитайте документ, зайдите на сайт сервиса, сохраните сертификат в таком то формате, расчитайте хеш, зайдите к админам, попросите права доступа на изменения файла CACERT.PEM, объясните зачем вам это нужно, напишите служебку на имя ген директора...."
Пользователь "Да на@#й такой сервис, я без него переживу...".


Я пытаюсь сделать сервис для обычных людей, чтоб они не обладали какими то познаниями в сертификатах и их установках, не у всех есть админы. Пользователь в худшем случае должен нажать кнопку установить сертификат... Но учитывая что "дедушку" сертификата знает 1с, и дедушка прописан уже в файле CACERT.PEM то мне не особо понятны вот эти танцы с бубном.
adhocprog; Spacer; zebr; r24al; config; aka Любитель XML; +6 Ответить
16. aka Любитель XML 28.06.16 16:47 Сейчас в теме
(15) maguga, по теме не скажу ничего, но поржал от души
17. maguga 19 28.06.16 17:56 Сейчас в теме
(16) aka Любитель XML, Я старался.

Ребят, а по теме кто то есть? Я даже монетки на данное мероприятии выделил.
20. el-gamberro 56 29.06.16 06:02 Сейчас в теме
(15) maguga, Это достаточно обобщенное описание решения задачи безопасности.
Зачем вам нужно именно SSL для вашей задачи не совсем понимаю.
В любом случае по мне так проще поднять джава веб-сервер, а из 1С послать нужные REST-запросы

Описание авторизации https://docs.oracle.com/javase/8/docs/technotes/guides/security/jaas/JAASRefGuid­e.html
По безопасности на Ява для начинающих лучше всего тут:
https://www.ozon.ru/context/detail/id/25151190/
13. ToTMoM 28.06.16 09:58 Сейчас в теме
(11) Т.е. ты в итоге хочешь получить некий механизм лицензирования своих обработок/доп. частей для 1С?
14. maguga 19 28.06.16 10:17 Сейчас в теме
(13) ToTMoM, У меня обработка стучится к сервису и передает данные. Ничего секретного в данных нет, они по сути общедоступны, но при конекте пользователь указывает логин и пароль. Https нужен для того, чтоб не перехватили как раз логин и пароль при авторизации. Очень не хочется чтоб от имени одной компании, некорректную информацию в систему кидал злоумышленник
18. Serginio 938 28.06.16 21:10 Сейчас в теме
19. asved.ru 36 29.06.16 05:22 Сейчас в теме
Сертификат клиента у Вас работать не будет - его просто нет на клиенте, Вы же купили только сертификат сервера. Не указывайте его в конструкторе.

Выпиливание cacert.pem из платформы продолжается уже достаточно давно и "по частям", работайте с актуальными версиями платформы - там должно работать нормально.
22. maguga 19 30.06.16 13:13 Сейчас в теме
(19) asved.ru,
Не совсем понял о чем написали. На новых платформах, это так же не работает.

Можно пример кода как это должно заработать?
23. PetroP 30.06.16 13:54 Сейчас в теме
(22) maguga, а так:
    Пользователь="------@mail.ru";
    Пароль="********";
    Прокси=Неопределено;
    Попытка
        SSL = Новый ЗащищенноеСоединениеOpenSSL();
        Определения = Новый WSОпределения("https://www.ean13.org/ws/trade.wsdl",Пользователь,Пароль,,SSL); 
        Прокси = Новый WSПрокси(Определения, "http://www.ean13.org/trade/","ServiceEAN13_Trade", "Trade"); 
        //Прокси = Новый WSПрокси(Определения, "https://www.ean13.org/trade/","ServiceEAN13_Trade", "Trade"); 
        
        Прокси.Пользователь=Пользователь; 
        Прокси.Пароль=Пароль; 
        
    Исключение
        Сообщить(ОписаниеОшибки());
        //Сообщить("Не удалось подключится к сервису https://www.ean13.org/ws/trade.wsdl. Обратитесь к системному администратору");
        Сообщить("Не удалось подключится к сервису http://www.ean13.org/ws/trade.wsdl. Обратитесь к системному администратору");
    КонецПопытки;
    Возврат Прокси;
Показать
fixin; kab_krk; alexovik; +3 Ответить
26. babikov 03.07.16 13:38 Сейчас в теме
(23) PetroP, спасибо большое как раз недавно нужно было, проверку работоспособности прокси сделать.
27. fixin 4253 26.03.24 12:47 Сейчас в теме
(23) спасибо, хоть понял, как динамически создавать соединения:
	СертификатКлиента = Новый СертификатКлиентаФайл("my.pem");
	СертификатыУдостоверяющихЦентров = Новый СертификатыУдостоверяющихЦентровWindows();
	//SSL = Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, СертификатыУдостоверяющихЦентров);
	SSL = Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента);
    Определения = Новый WSОпределения("https://mysite.ru/soap/scard.wsdl",,,,SSL); 
	
	//Создаем прокси для обращения к внешнему веб-сервису,
	// передаем в функцию URI пространства имен, имя сервиса, имя порта.
	Прокси = Новый WSПрокси(Определения, "urn:Scard", "ScardSchoolService", "ScardSchoolPort");
	
	//Вызываем метод веб-сервиса, записываем результат в переменную КурсыВалют.
	Школы = Прокси.getSchool(0);

Показать

Правда последняя строка не работает, не проходит проверку удаленный сайт, но уже шаг вперед
21. maguga 19 30.06.16 13:10 Сейчас в теме
В любом случае по мне так проще поднять джава веб-сервер, а из 1С послать нужные REST-запросы

Кто будет шифровать эти запросы?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот