Связь между двумя серверами через curl и mcrypt - PullRequest
3 голосов
/ 12 марта 2012

У меня есть два сервера в двух местах.Сервер 1 вычитает информацию о клиенте (например, адреса, адреса электронной почты и номера телефонов) сервера 2 через сеанс php CURL с пользовательским агентом пользователя, который проверяет сервер 2.Сервер 2 обслуживает строку JSON.

Я хочу убедиться в двух вещах:

  1. Если кто-то прослушивает мои пакеты, он не увидит фактические данные;
  2. Если кто-то пытается вызвать php-страницу на сервере 2 (с соответствующим агентом пользователя), когда ему что-то доставляют, это не имеет для них смысла (например, электронная почта или номер телефона клиента).

Изучив различные методы, я подумал зашифровать текстовую строку JSON на сервере 2;получить его с помощью curl с сервера 1;и расшифровать его с помощью общего ключа.

Вещи, которые я хотел бы знать:

  1. Какой шифр мне следует использовать?
  2. Это перебор?
  3. Или есть лучший способ добиться этого?

Кстати: объединение двух серверов не вариант!

Ответы [ 2 ]

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

Вместо того, чтобы реализовывать собственную процедуру шифрования, я бы порекомендовал передавать ваши данные json с сервера 2 по протоколу https, который позаботится о шифровании.

Обратите внимание, что вам не нужно приобретать сертификат, вы можете самостоятельно подписать сервер2 и установить curl на сервере server1, чтобы разрешить "небезопасное" соединение https (незащищенный означает, что сертификат не является доверенным, но данные по-прежнему зашифрованы).

Для белого списка, которому разрешено запрашивать данные с сервера 2, белый список по ip, если вы можете. Другим способом (или в дополнение) может быть простая система подписи с общим секретом.

В качестве иллюстрации, установите настраиваемый заголовок http, когда сервер 1 делает запрос (скажем, «Моя подпись»), и используйте «алгоритм» настройки вашей подписи (простой пример в php ниже):

$sig = sha1($user_agent
            . $date_header_value
            . $http_request_path
            . $http_query_string
            . $http_raw_post_payload
            . $shared_secret);

Затем вы можете настроить заголовок запроса:

My-Signature: $sig

Вы можете сделать свою систему подписи настолько сложной, насколько захотите. Идея состоит в том, что server2 знает один и тот же сигнатурный «рецепт», может извлекать все необходимые поля из заголовков запроса, строки запроса и полезной нагрузки post и использовать общий секрет для вычисления подписи на своей стороне.

Сравните вычисленную подпись с подписью, переданной в заголовке My-Signature, и обработайте запрос, если они совпадают. Если нет, откройте страницу ответа 403.

0 голосов
/ 12 марта 2012
  1. Нет, это не перебор. Хорошей практикой является шифрование данных при передаче между серверами.
  2. Наряду с вашим пользовательским агентом, конечно же, ваши серверы также имеют статические IP-адреса? Проверь проверку IP. Если IP-адрес не соответствует ожидаемому, просто отобразите запрещенный по умолчанию экран 403, чтобы заставить просматривающего пользователя думать, что он заблокирован Apache, а не вашим скриптом.

Что касается шифра, я не могу помочь. Есть гугл.

...