Вы можете установить SSL с взаимной аутентификацией между вашими законными клиентами и вашим API. Создайте самозаверяющий сертификат клиента SSL и сохраните его в своем клиенте. Настройте сервер так, чтобы он требовал аутентификации на стороне клиента и принимал только те сертификаты, которые вы развернули на своих клиентах. Если кто-то / что-то пытается подключиться, не имеет этого сертификата клиента, он не сможет установить сеанс SSL, и соединение не будет установлено. Предполагая, что вы контролируете законных клиентов и серверы, вам не нужен сертификат, выданный CA здесь; просто используйте самозаверяющие сертификаты, поскольку вы управляете доверием сертификатов как на стороне клиента, так и на стороне сервера.
Теперь вы говорите, что действительно трудно помешать кому-либо выполнить реинжиниринг вашего клиента и восстановить ваши учетные данные (в данном случае закрытый ключ, принадлежащий сертификату клиента). И ты прав. Обычно вы храните этот ключ (и сертификат) в хранилище ключей некоторого типа (KeyStore
, если вы используете Android), и это хранилище ключей будет зашифровано. Это шифрование основано на пароле, поэтому вам нужно либо (1) сохранить этот пароль в вашем клиенте, либо (2) запросить пароль у пользователя при запуске вашего клиентского приложения. Что вам нужно сделать, зависит от вашего варианта использования. Если (2) приемлемо, то вы защитили свои учетные данные от обратного инжиниринга, поскольку он будет зашифрован, и пароль нигде не будет храниться (но пользователь должен будет вводить его каждый раз). Если вы сделаете (1), то кто-то сможет провести обратный инжиниринг вашего клиента, получить пароль, получить хранилище ключей, расшифровать закрытый ключ и сертификат, а также создать другого клиента, который сможет подключаться к серверу.
Вы ничего не можете сделать, чтобы предотвратить это; Вы можете сделать реверс-инжиниринг своего кода более сложным (путем обфускации и т. д.), но не можете сделать это невозможным. Вам необходимо определить, каков риск, который вы пытаетесь уменьшить с помощью этих подходов, и сколько работы стоит сделать, чтобы смягчить его.