我有一个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。
有人可以建议我可能会想念什么吗?也许其余的证书也需要加载到密钥库中。问候。
最佳答案
是的,它们确实需要加载。您应该生成一个证书链。您使用了错误的API。
如果您询问SSLSession.IsValid()
,则应展示一些调用它的代码。