Имя: Пароль:
1C
1С v8
Веб-сервис (soap) через обратный прокси с SSL
0 Asmody
 
07.03.19
10:11
Вопрос из раздела с двумя звездочками.
На внутреннем IIS опубликована база с веб-сервисами, (конкретно - Документооборот). Внутри работает без SSL, чтобы не заморачиваться с выпуском сертификатов для интранета.
Захотели попользовать мобильное приложение. Для этого нужно выставить "хвост" во внешний мир.
Во внешний мир смотрит apache с настроенным SSL, сертификатами, всё как надо.
Прописали на нём обратный прокси на внутренний сервер как-то так:

ProxyPass /docum http://192.168.1.120/docum
ProxyPassReverse /docum http://192.168.1.120/docum

Веб-клиент в такой схеме работает прекрасно.
Мобильное приложение не работает.
Стал разбираться - всё дело в том, что 1Ска генерит в wsdl <soapbind:address location > с http. Естественно, мобильное приложение пытается обратиться по этой ссылке и обламывается.
При этом остальной URL вполне корректный, т.е. подставляется внешнее имя+порт.

Где бы чего бы колдануть, чтобы 1Ска генерила правильный wsdl?
1 Cyberhawk
 
07.03.19
10:24
1C, выступая в роли потребителя сервиса, сделали начиная с 8.3.7 необязательный параметр "Местоположение", которым можно переопределять то, что засасывается при создании ВС-прокси по ВСДЛ-файлу.
Чую, что и твоему внешнему потребителю придется делать то же самое.
2 Asmody
 
07.03.19
10:31
(1) Внешний потребитель - это приложение "1С:Документооборот" из стора. Там никаких таких галочек нет.
3 Cyberhawk
 
07.03.19
10:33
Хз о чем ты. Я о платформе и ее методах.
4 Nyoko
 
07.03.19
10:35
(0) Попробуй настроить ssl на nginx, во фрешах так работает
5 Cyberhawk
 
07.03.19
10:37
(4) От использования нгинска 1С не начнет выдавать хттпс в местоположении, когда к ней будут обращаться по хттп
6 Nyoko
 
07.03.19
10:40
(5) ну это как настроишь, можно настроить только 443, можно и редирект запилить с 80, все можно этож NGINX ))
7 Nyoko
 
07.03.19
10:45
когда я настраивал, просто, давал серверу глобальный IP, он все равно же стоит в конторе. одно название, один сертификат... а все эти пробросы маршрутизации и прочее, не нужная трата времени ИМХО.
8 Asmody
 
07.03.19
10:52
(7) Можно и голую ж.пу на улицу выставить и надеяться, что не вые.ут.
9 Cyberhawk
 
07.03.19
10:55
(6) Не поможет, говорю же. Проблема в ложных ожиданиях на клиенте. Связка прокси и поставщика незащищенного веб-сервиса отрабатывает корректно.
10 Nyoko
 
07.03.19
10:56
(8) Файр вол, обновление системы, только 443 открытый порт. Какая нахрен голая жопа!
p.s. Вот всегда кстати, все программисты не настраивают firewall, а отключают его со словами он же в сетке, а когда все шифрует шифровальшик плачат.
11 Cyberhawk
 
07.03.19
10:56
А клиент ломится на веб-сервис по хттпс, прокси редиректит это на хттп, поставщик и отдает всдл-описание с хттп, оно и приходит на клиент. И вот тут на клиенте есть возможность переопределять "Местоположение")
Кстати, чо за ошибку-то выдает клиент, написал бы хоть. В 1С:Заказы кажись это ребятки из 1С побороли, а до ДО руки не дошли.
12 Cyberhawk
 
07.03.19
10:57
(10) Файрвол пусть работает, но не том же хосте и железе, что и сервер приложений 1С. Типа такая задумка.
13 Nyoko
 
07.03.19
11:00
(9) ок понял, лады... тут "незащищенного веб-сервиса отрабатывает корректно" нужно смотреть логи / снифить http, наверняка в каком-то месте каконить Allow-origin не стоит.
14 Garykom
 
гуру
07.03.19
11:01
(0) Вся проблема что вместо "https" стоит просто "http" ?
15 Garykom
 
гуру
07.03.19
11:03
Ну блин что IIS на  httpS://192.168.1.120/docum переставить не судьба?
16 Cyberhawk
 
07.03.19
11:06
(15) Не хотят они с SSL заморачиваться для типа внутренних веб-сервисов. Хотя стоит единожды взять этот барьер и куча гемора снимается)
17 Asmody
 
07.03.19
11:16
Вод ведь еще что:
Apache висит на 443м порту, но на шлюзе он прокинут на нестандартный порт 4443 на внешнем адресе. При этом внешний адрес имеет несколько DNS-имен.

Если я захожу из-вне по https://NAME1.domain.ru:4443/docum/ws/mobileDMVersionService.1cws?wsdl, я вижу location="http://NAME1.domain.ru:4443/docum/ws/mobileDMVersionService.1cws";. Соответственно, для  https://NAME2.domain.ru:4443/docum/ws/mobileDMVersionService.1cws?wsdl отдает location="http://NAME2.domain.ru:4443/docum/ws/mobileDMVersionService.1cws";
Если захожу на apache по внутреннему адресу https://192.168.1.4/docum/ws/mobileDMVersionService.1cws?wsdl, то вижу location="http://192.168.1.4/docum/ws/mobileDMVersionService.1cws";

Т.е. 1Ска понимает, по какому имени я стучусь. Не понимает только протокол. Вот в этом вся боль.
18 Nyoko
 
07.03.19
11:19
(17) пропиши serverName в апаче.
19 Asmody
 
07.03.19
11:20
(18) он прописано, конечно.
20 Вафель
 
07.03.19
11:21
значит придется ссл подимать в интранете
21 Nyoko
 
07.03.19
11:21
<VirtualHost *:80>
    DocumentRoot "/www/example2"
    ServerName http://www.example.org

    # Other directives here
</VirtualHost> Прописан точно ?
22 Cyberhawk
 
07.03.19
11:25
(21) Зачем в Апаче прописывать что-то относящееся к 80 порту? На него туда не ломятся
23 sergeyspb13
 
07.03.19
11:27
попробуй реврайт сделать
mod_rewrite

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
24 Nyoko
 
07.03.19
11:29
(22) смотри у тебя есть 1 ip на нем 140 доменов, хоть ссл хоть без, дело вкуса.
Для обеспечения такой возможности используется VirtualHost
Если проброс порта и сертификат встроен в Юзергейт или еще какую программку для слабоумных
ничем больше не могу помочь...
25 Cyberhawk
 
07.03.19
11:33
(24) А, ясно Это понятно)
Автор в (17) вроде привел примеры, говорящие о том, что проблем с определением "виртуального" (внутреннего) хоста у него нет. Т.е. достучаться до веб-сервиса получается.
Поэтому Я и не понял, зачем тут виртуалхост трогать)
26 Asmody
 
07.03.19
11:40
(24) Сертификат установлен на apache, порты пробрасывает шлюз (железный Mikrotik, если что), <VirtualHost *:80> на apache занимается только тем, что перекидывает тех, кто случайно зашел на него по http, на https. Наружу 80 порт apache не смотрит.
27 Nyoko
 
07.03.19
11:44
(25) . "1Ска понимает, по какому имени я стучусь. Не понимает только протокол. Вот в этом вся боль."
1.VirtualHost, отделить один домен от другого по стандартному порту. (при условии что это будет 1 веб сервер на входе)
2. Вся эта солянка iss + apache накуя! я бы оставил что-то одно. (скорее всего после этого проблемы пропадут)
3. Все эти задачи с пробросами, простые, решаются за 30 минут.
28 Asmody
 
07.03.19
11:50
(27) Ты можешь делать как угодно. Пока ты предлагаешь всякую ерунду, не понимая сути проблемы.
29 Nyoko
 
07.03.19
12:00
(28) ок, тебе лично больше ничем не помогу )))
30 Garykom
 
гуру
07.03.19
12:18
(26) Может банально вместо IIS опубликовать 1С на имеющемся apache с ssl ?
31 Garykom
 
гуру
07.03.19
12:18
(30)+ веб-серверу не обязательно же быть на том же железе что и 1С
32 Asmody
 
07.03.19
12:21
(30) Зачем мне 1Ска на проксе? :)
33 Asmody
 
07.03.19
12:24
Заработало!
Добавил в IIS самоподписанный сертификат и отключил проверку SSLProxy в apache.
И всё завелось!
34 Cyberhawk
 
07.03.19
12:46
Это ты обошел, причем нарушив изначальные условия.
Но можно было и решить вопрос, написав разрабам ДО, чтоб добавили флажок в настройки )
35 Сияющий в темноте
 
07.03.19
15:02
А что,подправить выданное описание на лету нельзя?
1с отдает то,что знает и с чем работает,и что мешает на пробросе прочитать этот отданный файл и его исправить?
а вообще,наверное,есть режим WsProxy,который это делает автоматом.
36 Asmody
 
07.03.19
15:06
(35) В apache есть mod_proxy_html, который, вроде как, может менять отдаваемую страницу "на лету". Я даже попробовал, но что-то не срослось.
Как говорится, фиг с ним, пусть внутри живет на самоподписанном сертификате. Все равно внутри оно особо не мешает
37 Сияющий в темноте
 
07.03.19
15:14
(36)наверное,из-за того,что web-сервис,это не совсем простая html-страница,и для него нужен специальный модуль,ну или самому на php накатать.
38 Asmody
 
07.03.19
15:15
(37) там внутре обычный xml и ничего кроме