Почему Android KeyStore не может установитьKeyEntry в режим глубокого сна? (Надувной замок)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Почему Android KeyStore не может установитьKeyEntry в режим глубокого сна? (Надувной замок)

Сообщение Anonymous »

У меня есть служба Android для чтения сообщений, которая всегда включена в моем приложении. Иногда соединение с брокером сообщений теряется и вызывается специальное событие для повторного подключения.

Код: Выделить всё

Log.d(TAG, "< ----- Loading KeyStore ----- >");
KeyStore androidKeyStore = KeyStore.getInstance(SystemVariables.ANDROID_KEYSTORE);
androidKeyStore.load(null);

Log.d(TAG, "< ----- Getting Private Key ----- >");
PrivateKey clientPrivateKey = (PrivateKey) androidKeyStore.getKey(SystemVariables.KEY_ALIAS, null);

Log.d(TAG, "< ----- Loading Certificates ----- >");

Certificate clientCertificate = CertificateReader.loadX509Certificate(ECertificateType.CLIENT);
Certificate distribCertificate = CertificateReader.loadX509Certificate(ECertificateType.DISTRIBUTOR);

Log.d(TAG, "< ----- Init KeyStore ----- >");
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(null, null);

Log.d(TAG, "< ----- Init Certificate ----- >");
Certificate[] certChain = new Certificate[2];
certChain[1] = distribCertificate;
certChain[0] = clientCertificate;

if(clientPrivateKey == null){
Log.d(TAG, "< ----- Private Key Is NULL ----- >");
}

Log.d(TAG, "< ----- Set KeyStore ----- >");
keyStore.setKeyEntry("client", clientPrivateKey, null, certChain);

...
В целом я выделил четыре состояния, в которых срабатывает этот код.
  • Первое состояние — когда приложение только запустилось; код
    работает отлично.
  • Второе состояние возникает, когда телефон заблокирован; приложение
    может потерять соединение через несколько часов, но успешно восстановит соединение.
  • Третье состояние обычно возникает после длительного сна. В среднем
    телефон не используется сутки (иногда нужно два дня,
    иногда достаточно одной ночи). Переподключения не происходит, и
    появляется циклическая ошибка.
  • Четвертое состояние — когда приложение разблокировано из состояния
    три; приложению по-прежнему не удается повторно подключиться.
Источник исключения:

Код: Выделить всё

keyStore.setKeyEntry("client", clientPrivateKey, null, certChain);
Трассировка журнала:

Код: Выделить всё

BouncyCastleProvider    com.example.cable                    D  < ----- Loading KeyStore ----- >
BouncyCastleProvider    com.example.cable                    D  < ----- Getting Private Key ----- >
BouncyCastleProvider    com.example.cable                    D  < ----- Loading Certificates ----- >
BouncyCastleProvider    com.example.cable                    D  < ----- Init KeyStore ----- >
BouncyCastleProvider    com.example.cable                    D  < ----- Init Certificate ----- >
BouncyCastleProvider    com.example.cable                    D  < ----- Set KeyStore ----- >
BouncyCastleProvider    com.example.cable                    D  < ----- B Connection to MQTT Client is failed: java.lang.NullPointerException ----- >
Трассировка исключений:

Код: Выделить всё

java.util.Hashtable.put(Hashtable.java:477),
org.spongycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi$IgnoresCaseHashtable.put(PKCS12KeyStoreSpi.java:1780),
org.spongycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.engineSetKeyEntry(PKCS12KeyStoreSpi.java:577),
java.security.KeyStore.setKeyEntry(KeyStore.java:1200),
com.example.cable.crypto.MqttSSL.trySSLConnect(MqttSSL.java:132)
Также я использую Bouncy Castle в качестве поставщика безопасности:

Код: Выделить всё

 static {
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}
Итак, мой вопрос: что может быть причиной этой проблемы? В настоящее время я не могу с уверенностью сказать, что проблема связана с переходом телефона в спящий режим, но подозреваю, что в этом режиме доступ к шифрованию процессора или чему-то подобному может быть отключен, что приведет к сбою всего.Стоит также отметить, что Android периодически воссоздает службу вместе со всеми связанными с ней объектами, такими как клиент брокера сообщений и т. д. Возможно, в предыдущей службе установлена ​​какая-то блокировка чтения, предотвращающая чтение данных в новом состоянии?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ncy-castle
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»