Load single certificates directly from the KeyStore if we cannot get the read lock
This helps when running in the emulator as loading the certificates takes quite a while there. This way a configured CA certificates is loaded directly without having to wait for all certificates being cached.
This commit is contained in:
+26
-3
@@ -147,9 +147,32 @@ public class TrustedCertificateManager
|
|||||||
*/
|
*/
|
||||||
public X509Certificate getCACertificateFromAlias(String alias)
|
public X509Certificate getCACertificateFromAlias(String alias)
|
||||||
{
|
{
|
||||||
this.mLock.readLock().lock();
|
X509Certificate certificate = null;
|
||||||
X509Certificate certificate = this.mCACerts.get(alias);
|
|
||||||
this.mLock.readLock().unlock();
|
if (this.mLock.readLock().tryLock())
|
||||||
|
{
|
||||||
|
certificate = this.mCACerts.get(alias);
|
||||||
|
this.mLock.readLock().unlock();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ /* if we cannot get the lock load it directly from the KeyStore,
|
||||||
|
* should be fast for a single certificate */
|
||||||
|
try
|
||||||
|
{
|
||||||
|
KeyStore store = KeyStore.getInstance("AndroidCAStore");
|
||||||
|
store.load(null, null);
|
||||||
|
Certificate cert = store.getCertificate(alias);
|
||||||
|
if (cert != null && cert instanceof X509Certificate)
|
||||||
|
{
|
||||||
|
certificate = (X509Certificate)cert;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
return certificate;
|
return certificate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user