2015-01-02 5 views
1

Я хочу, чтобы обеспечить поддержку брандмауэра Java REST с двусторонним SSL, чтобы предотвратить несанкционированный доступ.Использовать сертификат APK для создания SSL-контекста

Антенна APK должна быть подписана для работы, возможно создать «доверие» между моей службой REST и этим APK, без использования жестко запрограммированного пароля из сертификата APK в коде клиента?

Основная идея состоит в том, чтобы сконфигурировать серверный двухсторонний протокол SSL, чтобы доверять соединениям только из сертификата APK.

ответ

0

Я думаю, вы можете попробовать с ответом от here и использовать алгоритм SHA вашего ключа, который вы использовали, чтобы подписать APK ..

Это говорит что-то вроде этого:

// Add code to print out the key hash 
    try { 
    PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES); 
    for (Signature signature : info.signatures) { 
    MessageDigest md = MessageDigest.getInstance("SHA"); 
    md.update(signature.toByteArray()); 
    Log.e("MY KEY HASH:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
     } 
    } catch (NameNotFoundException e) { 

    } catch (NoSuchAlgorithmException e) { 

    } 

и вы можете сохранить на стороне сервера этот ключ .. Я думаю, что это то, что делает Facebook или Google, например ..

1

Возможно создать «доверие» между моей службой REST и этим APK, без использования жестко запрограммированного пароля из Сертификат APK в клиентском коде?

Не совсем. Ваш открытый ключ в APK точно так же «жестко закодирован» как пароль. Любой пользователь может войти и использовать эту информацию для доступа к службе REST.

1

Для выполнения двухстороннего TLS/SSL вам необходимо иметь сертификат с закрытым ключом на клиентском устройстве. Сертификат, используемый для подписания APK, приведет к открытому ключу для сертификата на устройстве, но не к закрытому ключу. Вы бы хотели не размещать этот закрытый ключ на устройстве, так как это позволяло бы другим подписывать APK как вы.

Вместо использования сертификата подписи APK для двустороннего TLS/SSL вам следует рассмотреть возможность использования отдельного сертификата, который может быть сгенерирован на устройство во время первоначального процесса регистрации. Этот сертификат будет установлен в Android KeyStore, и открытый ключ из этого сертификата должен быть установлен на сервере, на котором размещена служба REST для бэкэнд. Затем этот сертификат будет действовать как учетные данные клиента аналогичным образом с паролем имени пользователя и пароля, назначенным устройству.

Пример использования клиентских сертификатов на Android: http://chariotsolutions.com/blog/post/https-with-client-certificates-on/

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