Дешевая идентификация клиента против правильной аутентификации клиента SSL - PullRequest
2 голосов
/ 14 января 2012

У меня PHP-скрипт для подключения к серверу Node.js. Node.js должен отвечать только на запросы из скрипта PHP, поэтому мне нужно убедиться, что на сервере Node есть какой-то метод аутентификации.

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

Весь этот процесс будет выполнен по протоколу HTTPS, который имеет дополнительный бонус от сценария, способного подтвердить личность Node-сервера.

Достаточно ли это безопасно, или я должен выполнить надлежащую аутентификацию клиента на основе SSL? В конце концов, все закончилось HTTPS, поэтому секретный секрет не может быть легко обнаружен, верно?

Ответы [ 2 ]

3 голосов
/ 14 января 2012

HTTPS не воспроизводится (потому что сообщение ServerHello включает в себя случайное число, используемое для создания общего ключа для соединения), и, поскольку вы разговариваете по безопасному каналу, ваш общий секретный ключ не может быть обнаруженили.В качестве быстрого и не очень грязного решения ваша схема звучит хорошо для меня.

1 голос
/ 14 января 2012

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

Хорошо поделится секретом между вашим сервером и PHP-скриптом.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...