Код: Выделить всё
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)
Код: Выделить всё
static {
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ncy-castle