Данные не возвращаются, когда SSL включен для сервера REST в сервисном модуле - PullRequest
4 голосов
/ 21 марта 2012

Я использую стек LAMP на CentOS с Drupal 6 и последним модулем Services. Через HTTP REST-сервер, который у меня работает, работает нормально и ведет себя как положено.

Когда я установил сертификат SSL, я перевел весь трафик с порта 80 на 443 (SSL). Это работало нормально для Drupal, но заставило сервер REST не возвращать данные. Естественно, я удалил принудительный SSL и на данный момент разрешил HTTP и HTTPS.

Я тестирую через Fiddler, который при использовании для доступа к конечной точке по HTTP возвращает ожидаемые данные. Тестирование по HTTPS Я не получаю данных. Нужно ли мне вносить изменения в конфигурацию REST-сервера (т. Е. Я что-то упустил в документации).

Заранее спасибо за любую поддержку!

EDIT

Чтобы ясно показать разницу, я сделал анонимный POST-запрос к конечной точке (это мог быть запрос GET, конечная точка не имеет реальных методов, но, таким образом, возвращает сообщение, сообщающее нам, что оно все еще там). Я получаю сообщение об успешном завершении работы через HTTP. HTTPS однако не возвращает данных вообще. Я показал это на изображениях ниже.

HTTP

enter image description here

HTTPS

Request via HTTPS

.conf SSL Rule Эти строки больше не используются, но здесь, чтобы проиллюстрировать, что я делал .

#RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^(.*)$  https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Edit2:

Я нашел что-то связанное в моем поиске на форумах Drupal http://drupal.org/node/704308

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

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

Если это так, то это не очень полезно и, скорее всего, даст вам ложное чувство безопасности .Если клиент настроен на использование HTTP, даже если сервер принудительно использует HTTPS через перенаправление, первоначальный запрос все еще выполняется по обычному HTTP (до перенаправления).

Если ваш клиент все еще настроен на использованиеURL-адрес http:// (и вы полагаетесь на перенаправление, чтобы заставить его использовать HTTPS), перенаправленные запросы POST потеряют свое тело (и, вероятно, на самом деле будут GET), см. этот ответ .В результате ваши запросы не будут работать вообще, как вы ожидаете.

Вы должны убедиться, что ваш клиент веб-службы использует https:// URL-адреса и что любые URL-адреса подпоследовательности вы получаете с веб-сайта.Служба для себя также использовать https:// (или что они являются относительными и что клиент может оставаться на HTTPS).

РЕДАКТИРОВАТЬ:

Один способ найтиЕсли у вас возникла проблема с перенаправлением, это полностью отключить обычный HTTP (даже без использования перенаправлений), например, закомментировав Listen 80 в конфигурации Apache Httpd.Если ситуация ухудшается (например, вы получаете сообщения о том, что не можете подключиться), это еще раз говорит о том, что проблема связана с неправильной настройкой перенаправления (как описано выше).

1 голос
/ 30 марта 2012

То, что вы описываете, звучит подозрительно, как одно из этих двух:

  1. Что-то не прослушивает порт, который он должен прослушивать.Если бы Apache перенаправил запрос на сломанный сокет, то я ожидал, что он вернет код ошибки 500, поэтому цель состоит в том, чтобы попытаться выяснить, куда отправляется сообщение, какой порт прослушивает ваше приложение, является ли ваше REST-приложениедаже поддерживает рукопожатие HTTPS и т. д.

  2. Apache не интерпретирует ваши запросы на порту 443 так, как он интерпретирует запросы на порту 80. Это звучит немного подозрительнее, потому что вы говоритечто Drupal работает над 443, и тем не менее материал, который вы написали, вообще не генерирует заголовки - если бы Apache направлял ваши запросы API в ваше приложение Drupal, вы бы ожидали, по крайней мере, видеть заголовки, 404 и т. д., когда это не удается.правильно интерпретировать запросы API.

Без дополнительной информации я не уверен, что мы можем помочь.

...