То, что вы хотите сделать, это использовать SSL с взаимной аутентификацией, чтобы ваш сервер принимал только входящие соединения от вашего приложения, а ваше приложение взаимодействовало только с вашим сервером.
Вот подход высокого уровня. Создайте самозаверяющий SSL-сертификат сервера и разверните его на своем веб-сервере. Если вы используете Android, вы можете использовать для этой цели keytool, включенный в Android SDK; если вы используете другую платформу приложений, для них также существуют аналогичные инструменты. Затем создайте самозаверяющий клиент и разверните его в своем приложении в пользовательском хранилище ключей, включенном в ваше приложение, в качестве ресурса (keytool также сгенерирует это). Настройте сервер так, чтобы он требовал SSL-аутентификацию на стороне клиента и принимал только сгенерированный вами сертификат клиента. Настройте клиент для использования этого сертификата на стороне клиента, чтобы идентифицировать себя и принять только один сертификат на стороне сервера, который вы установили на своем сервере для этой его части.
Если кто-то / что-то кроме вашего приложения пытается подключиться к вашему серверу, соединение SSL не будет создано, поскольку сервер отклонит входящие соединения SSL, которые не представляют сертификат клиента, который вы включили в ваше приложение.
Шаг за шагом это гораздо более длинный ответ, чем здесь оправдано. Я бы предложил сделать это поэтапно, так как в Интернете есть ресурсы о том, как работать с самозаверяющим SSL-сертификатом в Android (я не так хорошо знаю, как это делать на других мобильных платформах), как на стороне сервера, так и на стороне клиента. В моей книге Application Security для платформы Android , опубликованной О'Рейли, есть полный обзор.