我有一个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(),则应展示一些调用它的代码。

10-06 02:21