使用 Bouncy Castle 后 Android 上没有系统 TLS
No System TLS on Android after using Bouncy Castle
我正在为 encryption/decryption 使用 Bouncy Castle 安全提供程序。
我还确保在每次 Bouncy castle 调用后删除 BC 提供程序。
这是 BC 代码:
public static boolean pubVerifySign(
String pKey, String sSignature, String sChallenge) throws UnsupportedEncodingException{
BouncyCastleProvider bcp = initSecuritySubsystem();
boolean bOutput = false;
try{
ECPublicKey ecPublicKey =
getPublicKeyForBytes(Hex.decode(pKey));
bOutput =
pubVerifySign(ecPublicKey,
sSignature, sChallenge);
}finally{
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
}
return bOutput;
}
但是,就在代码之后。
但是,每当我尝试使用 URL.openConnection 或任何其他 Http 库时,
我收到以下错误:无系统 TLS:
cz.msebera.android.httpclient.ssl.SSLInitializationException: java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore BKS implementation not found
at cz.msebera.android.httpclient.ssl.SSLContexts.createDefault(SSLContexts.java:57)
at cz.msebera.android.httpclient.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:978)
at cz.msebera.android.httpclient.impl.client.HttpClients.createDefault(HttpClients.java:56)
at org.nebucoin.user.utils.URLUtils.getHttp(URLUtils.java:63)Caused by: java.security.KeyManagementException: java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore BKS implementation not found
at org.conscrypt.SSLParametersImpl.createDefaultX509KeyManager(SSLParametersImpl.java:534)
at org.conscrypt.SSLParametersImpl.getDefaultX509KeyManager(SSLParametersImpl.java:515)
at org.conscrypt.SSLParametersImpl.<init>(SSLParametersImpl.java:126)
at org.conscrypt.OpenSSLContextImpl.engineInit(OpenSSLContextImpl.java:104)
at javax.net.ssl.SSLContext.init(SSLContext.java:349)
at cz.msebera.android.httpclient.ssl.SSLContexts.createDefault(SSLContexts.java:52)
我已经尝试了无数其他 Http Android 库(OkHTTP、Apache HTTP 客户端等),仍然遇到相同的错误。
我什至在项目中添加了 conscypt 官方 Android 库,并将 Conscrypt 设置为第一个提供者,如下所示:
Security.insertProviderAt(Conscrypt.newProvider(), 1);
运气不好。
欢迎提出任何想法!
注意:当我在 BC/based pubVerifySign 之前使用 URL.openConnection 时,一切正常!
BouncyCastle 有两个提供程序,您可能需要同时删除它们。
Security.insertProviderAt(BouncyCastleProvider(), 1)
Security.insertProviderAt(BouncyCastleJsseProvider(), 2)
如果 JSSE 提供程序仍然存在,那么它将在找不到它期望的密钥库时失败。
我正在为 encryption/decryption 使用 Bouncy Castle 安全提供程序。 我还确保在每次 Bouncy castle 调用后删除 BC 提供程序。 这是 BC 代码:
public static boolean pubVerifySign(
String pKey, String sSignature, String sChallenge) throws UnsupportedEncodingException{
BouncyCastleProvider bcp = initSecuritySubsystem();
boolean bOutput = false;
try{
ECPublicKey ecPublicKey =
getPublicKeyForBytes(Hex.decode(pKey));
bOutput =
pubVerifySign(ecPublicKey,
sSignature, sChallenge);
}finally{
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
}
return bOutput;
}
但是,就在代码之后。 但是,每当我尝试使用 URL.openConnection 或任何其他 Http 库时, 我收到以下错误:无系统 TLS:
cz.msebera.android.httpclient.ssl.SSLInitializationException: java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore BKS implementation not found
at cz.msebera.android.httpclient.ssl.SSLContexts.createDefault(SSLContexts.java:57)
at cz.msebera.android.httpclient.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:978)
at cz.msebera.android.httpclient.impl.client.HttpClients.createDefault(HttpClients.java:56)
at org.nebucoin.user.utils.URLUtils.getHttp(URLUtils.java:63)Caused by: java.security.KeyManagementException: java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore BKS implementation not found
at org.conscrypt.SSLParametersImpl.createDefaultX509KeyManager(SSLParametersImpl.java:534)
at org.conscrypt.SSLParametersImpl.getDefaultX509KeyManager(SSLParametersImpl.java:515)
at org.conscrypt.SSLParametersImpl.<init>(SSLParametersImpl.java:126)
at org.conscrypt.OpenSSLContextImpl.engineInit(OpenSSLContextImpl.java:104)
at javax.net.ssl.SSLContext.init(SSLContext.java:349)
at cz.msebera.android.httpclient.ssl.SSLContexts.createDefault(SSLContexts.java:52)
我已经尝试了无数其他 Http Android 库(OkHTTP、Apache HTTP 客户端等),仍然遇到相同的错误。 我什至在项目中添加了 conscypt 官方 Android 库,并将 Conscrypt 设置为第一个提供者,如下所示:
Security.insertProviderAt(Conscrypt.newProvider(), 1);
运气不好。
欢迎提出任何想法!
注意:当我在 BC/based pubVerifySign 之前使用 URL.openConnection 时,一切正常!
BouncyCastle 有两个提供程序,您可能需要同时删除它们。
Security.insertProviderAt(BouncyCastleProvider(), 1)
Security.insertProviderAt(BouncyCastleJsseProvider(), 2)
如果 JSSE 提供程序仍然存在,那么它将在找不到它期望的密钥库时失败。