2014-10-31 3 views
0

В моей клиент-серверной программе OpenSSL используется обработка данных и работает, но я должен быть уверен, что сервер, на котором мой клиент подключается, является правильным сервером, а не поддельным.Безопасный способ установления соединения с сервером-клиентом

Проблема заключается в том, что моя программа генерирует самозаверяющий сертификат, и клиент не может подтвердить это. Если я внедряю сертификат, любой может его извлечь, создать поддельный клиент-сервер и попытаться украсть информацию. То же самое для ключей OpenPGP.

Итак, могу ли я реализовать какой-либо метод проверки сервера, даже если бинарный сервер доступен для всех, так как это клиент?

+0

«Если я внедряю сертификат, любой может его извлечь, создать поддельный клиент-сервер и попытаться украсть информацию». Это может произойти только в том случае, если вы встроили закрытый ключ. Простым решением, как всегда, является получение сертификата, подписанного центром сертификации. – EJP

+0

Но секретный ключ должен быть на сервере, не так ли? Клиент также выступает в качестве сервера, как P2P. – Fusgyus

ответ

0

В этой ситуации безопасная аутентификация не зависит от фактического сертификата, а от пары ключей.

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

Основная идея существующего процесса аутентификации работает либо клиентом аутентификации, отправляющим зашифрованное случайное число, которое может расшифровывать и возвращать только правильный сервер, либо иметь знак сервера, определенный клиентом. Реальный процесс, реализованный для аутентификации, немного сложнее, чтобы предотвратить атаки «человек-в-середине», но далеко за пределы этого ответа.

Итак, могу ли я реализовать какой-либо метод проверки сервера, даже если бинарный сервер доступен для всех, так как это клиент?

Положитесь на что-то уже там и не выполняйте криптографический код самостоятельно. Возможно, рассмотрите using TLS for encrypted communication в любом случае, если вы уже распространяете ключи, аутентификация будет выполнена во время фазы подтверждения.

+0

Программа уже использует TLS 1.2, но поддельный сервер может действовать как правильный сервер и проверять мое рукопожатие протокола (выполняется после установления соединения TLS), а затем начинает красть информацию. Я думаю, что любой метод (который не связан с тридцати сторонником) будет подвержен реверсивному проектированию, так как известен двоичный файл сервера. – Fusgyus

+0

Если вы подтвердите отпечаток сертификата сервера, этого не произойдет. Никто не может выполнить рукопожатие TLS без закрытого ключа, который вам не нужно публиковать (а может и нет). –

+0

Извините, я не понимаю. К моему серверу (то есть клиенту тоже, как P2P, но нет) выполнить TLS-рукопожатие, я должен вставить в него закрытый ключ (?). Итак, как это возможно для злоумышленника, у которого двоичный файл сервера не попадает в закрытый ключ с помощью обратной инженерии. – Fusgyus

Смежные вопросы