我有一系列证书(X509Certificate []
),但我的链中只有一个证书。我需要获得完整的链条。
我已经尝试过openssl命令,但这在这里没用。有人可以告诉我如何:
将此X509Certificate转换为可以保存在文件存储中的PEM或ASN.1 / DER?
使用此证书获取完整的链?
编辑: 因此,代码方面我想要实现的是:
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等,保存在设备上。
答案 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)无法运行的位置。