Отправка зашифрованных данных между серверами без SSL в Apache - PullRequest
1 голос
/ 29 ноября 2011

У меня есть несколько независимых приложений PHP, работающих на нескольких серверах. Ни на одном из серверов нет SSL, но я могу использовать PHP-обертку для SSL. Я хотел бы убедиться, что все данные, передаваемые между серверами, в безопасности и подписаны. Нужно ли создавать сертификат или достаточно создавать открытый / закрытый ключ при каждой отправке чего-либо? Это безопасный подход?

Ответы [ 3 ]

1 голос
/ 29 ноября 2011

В моем небольшом проекте я использую шифрование Blowfish для передачи некоторых данных, используя расширение mcrypt, доступное на большинстве серверов:

$encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, 'here goes a key', $data, MCRYPT_MODE_ECB, null);

Расшифровка происходит так же, просто используйте mcrypt_decrypt. Это общий ключ, а не система открытых / закрытых ключей.

1 голос
/ 29 ноября 2011

Нужно ли создавать сертификат или достаточно создавать открытый / закрытый ключ каждый раз, когда я отправляю что-то?

Не генерировать открытый / закрытый ключ каждый раз.Как вы сможете проверить, кто контролирует закрытый ключ?Суть сертификатов заключается в том, чтобы иметь возможность связать удостоверение с открытым ключом: проверка того, доверяете ли вы сертификату и готовы ли вы связываться с удостоверением, на которое он ссылается, является необходимым компонентом для обеспечения безопасности обмена данными.

Насколько я понимаю, связь между серверами не связана с самим взаимодействием с пользователем.Если вы контролируете все серверы, вы можете дать им сертификаты, либо самозаверяющие сертификаты X.509 (если вы можете установить их все для всех сторон: на практике применимо только для небольших количеств), либо свой собственный ЦС (если у вас есть OpenSSL,загляните в CA.pl, в котором есть man-страница).

Затем вы можете подписать зашифрованный контент, которым вы обмениваетесь, используя S / MIME (для этого в PHP есть функции).

(Вы также можете достичь той же цели, используя PGP, используя вместо этого ключи / сертификаты PGP.)

1 голос
/ 29 ноября 2011

Если на обеих машинах установлен mcrypt, то вы, вероятно, могли бы зашифровать текст, который вы хотите отправить по проводам, в PHP на одном конце и расшифровать его на другом, но, конечно, большая проблема, которая у вас возникнет, - это распределение ключей.Вам нужно либо предварительно настроить каждую машину с правильным ключом, и надеяться, что никто не заметит, что вы используете один и тот же ключ каждый раз (что плохо), либо вам придется придумать какой-то способ распространения вашего ключа.ключ к принимающему устройству, когда вы отправляете данные без отслеживания ключа.(что сложно).

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

Хотя теоретически можно было бы реализовать все это в PHP с использованием соответствующего расширения, такого как mcrypt, я искренне сомневаюсь, что это стоило бы усилий, чтобы сделать это правильно, что было бы значительно, вы такжепросто изобретай велосипед.

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

...