我有一个 SSL 客户端证书 .pem 文件。当通过 X509_load_cert_file() 方法从我的 C++ 客户端加载时,此文件工作正常。
现在,我尝试使用以下代码加载此文件:
InputStream caInput = ctx.getResources().openRawResource(R.raw.cacerts);
java.security.cert.Certificate ca;
try {
ca = cf.generateCertificate(caInput);
} finally {
caInput.close();
}
...
keyStore.setCertificateEntry("ca", ca);
但是,generateCertificate() 会抛出输入文件没有 ASN.1 序列标识符的异常。
.pem 文件包含一堆证书。我编辑了文件,删除了开头的注释,只留下了第一个 ---BEGIN CERTIFICATION---/---END CERTIFICATE--- 对。通过此更改,generateCertificate() 不会给出任何错误。但是,我随后对 SSLSession.IsValid() 的调用返回 false。
有人可以建议我可能缺少什么吗?也许其余的证书也需要加载到 keystore 中。问候。
最佳答案
是的,它们确实需要加载。您应该生成证书链。您使用了错误的 API。
如果您询问的是 SSLSession.IsValid()
,您应该展示一些调用它的代码。
关于android - 如何调试为什么 SSLSession.IsValid 在 Android 中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27050414/