将X509Certificate转换为PEM或ASN.1 / DER

时间:2015-07-07 15:57:46

标签: java android ssl ssl-certificate x509certificate

我有一系列证书(X509Certificate []),但我的链中只有一个证书。我需要获得完整的链条。

我已经尝试过openssl命令,但这在这里没用。有人可以告诉我如何:

  1. 将此X509Certificate转换为可以保存在文件存储中的PEM或ASN.1 / DER?

  2. 使用此证书获取完整的链?

  3. 编辑: 因此,代码方面我想要实现的是:

    protected static String convertToPem(X509Certificate cert)  {
             Base64 encoder = new Base64(64);
             String cert_begin = "-----BEGIN CERTIFICATE-----\n";
             String end_cert = "-----END CERTIFICATE-----";
    
             byte[] derCert = cert.getEncoded();
             String pemCertPre = new    String(Base64.encodeBase64(derCert));
             String pemCert = cert_begin + pemCertPre + end_cert;
             return pemCert;
    }
    

    但是,这不起作用。基本上,我正在寻找一种方法,它接受X509Certificate对象,然后将其转换为.pem等,保存在设备上。

1 个答案:

答案 0 :(得分:1)

  

将此X509Certificate对象转换为可以保存在文件存储中的.cer / .per / .der吗?

例如,请参阅OpenSSL's rsautl cannot load public key created with PEM_write_RSAPublicKey的答案。它告诉您如何将密钥转换为PEM和ASN.1 / DER格式,并包含传统格式(a.k.a。 SubjectPublicKeyInfo )的处理。

如果您没有以编程方式执行此操作,那么您应该搜索答案。关于如何使用openssl命令在ASN.1 / DER和PEM之间进行转换有很多关于主题的问题。或者询问Super User,他们专注于命令及其使用。

  

使用此证书获取完整的链?

这是PKI中一个众所周知的问题,称为 Which Directory 问题。解决方案是让服务器或服务提供缺少的中间CA证书。如果由于缺少中间CA证书而无法验证Web服务器或服务的身份,则服务器配置错误。

获得中间CA证书后,您仍需要在某处获得root信任。您可以使用自签名CA或自签名CA签名的其中一个中介。

此答案有助于使用OpenSSL s_client SSL site and browser warning对错误配置的服务器进行故障排除。

相关:如果有像X.500中设想的ITU这样的全球证书目录,那么你就不会遇到第二个问题。依赖方或用户代理只需从目录中获取所需的证书。

但是我们缺少一个中央目录,因此依赖方和用户代理经常使用CA Zoo(例如,本地信任存储或cacerts.pem)。这有一系列问题,例如错误的CA证明站点或服务。

其中一个副总是CA Cartel,其中浏览器与CA/Browser Forum处的CA合作。浏览器具有包含的要求,但它们通常无法惩罚行为不端的CA,例如Trustwave

由于浏览器对CA签署的服务器证书的依赖性/要求,浏览器已设法将自己置于物联网(IoT)无法运行的位置。