gpt4 book ai didi

java - 无法将从字符串生成的证书添加到我的自定义 TrustManagers

转载 作者:行者123 更新时间:2023-11-30 01:23:27 25 4
gpt4 key购买 nike

我正在尝试创建一个 TrustManagers 数组,其中填充了从 Base64 编码的 PEM 字符串解码的 CA 证书,以便在 SSLSocketFactory 中传递它。这是我的代码:

public static TrustManager[] getCustomTrustManagers(List<CertObject> certObjects)
{
TrustManagerFactory tmf;
try
{
tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

if (AndroidBuild.getSdkVersion() >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH)
{
KeyStore trustStore;
try
{
trustStore = KeyStore.getInstance("BKS", "BC");
trustStore.load (null, null);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
for (CertObject certObject : certObjects)
{
byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(certObject.getData().getBytes());
Certificate cert = cf.generateCertificate(new ByteArrayInputStream(decoded));
trustStore.setCertificateEntry(certObject.getName(), cert);
}
}
catch (KeyStoreException | NoSuchAlgorithmException | IOException e)
{
trustStore = null;
}
tmf.init(trustStore);
}
else
{
tmf.init((KeyStore) null);
}
}
catch (NoSuchAlgorithmException | KeyStoreException e)
{
Log.e(TAG, e.getMessage);
}

return tmf.getTrustManagers();
}

证书生成成功,我看到了有效的X509Certificate实例,但随后生成失败

trustStore.setCertificateEntry(certObject.getName(), cert);

我有以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference
at java.util.Collections.secondaryHash(Collections.java:3405)
at java.util.Hashtable.get(Hashtable.java:265)
at com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi.engineSetCertificateEntry(BcKeyStoreSpi.java:638)
at java.security.KeyStore.setCertificateEntry(KeyStore.java:393)
at com.xxx.app.core.Utils.getCustomTrustManagers(Utils.java:58)

有什么问题吗?我应该如何将证书添加到 keystore ? certObject.getName()certObject.getData() 都是非空字符串。 certObject.getData() 包含使用 Base64 编码的 PEM 证书数据,没有 -----BEGIN CERTIFICATE----- -----证书结束----- 行。

提前致谢!

最佳答案

尝试使用不同的别名,例如 certObject.getName() 为 null。

trustStore.setCertificateEntry("MyAlias", cert);

MyAlias 你必须用一些动态字符串替换。我只是举个例子。

关于java - 无法将从字符串生成的证书添加到我的自定义 TrustManagers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36753651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com