2 回答

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
要從 PKCS#7 文件中讀取證書(shū),您可以使用以下代碼片段:
public static final Certificate[] readCertificatesFromPKCS7(byte[] binaryPKCS7Store) throws Exception
{
try (ByteArrayInputStream bais = new ByteArrayInputStream(binaryPKCS7Store);)
{
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Collection<?> c = cf.generateCertificates(bais);
List<Certificate> certList = new ArrayList<Certificate>();
if (c.isEmpty())
{
// If there are now certificates found, the p7b file is probably not in binary format.
// It may be in base64 format.
// The generateCertificates method only understands raw data.
}
else
{
Iterator<?> i = c.iterator();
while (i.hasNext())
{
certList.add((Certificate) i.next());
}
}
java.security.cert.Certificate[] certArr = new java.security.cert.Certificate[certList.size()];
return certList.toArray(certArr);
}
}

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
您關(guān)閉了輸入流。之后您將無(wú)法讀取它。
您不應(yīng)該使用 DataInputStream。您不應(yīng)該使用緩沖區(qū)。只需打開(kāi)文件并讓CertificateFactory 從中讀?。?/p>
X509Certificate cert = null;
File file = new File("C:\\Users\\Certs\\cert.p7b");
try (InputStream in = new BufferedInputStream(new FileInputStream(file))) {
CertificateFactory certificatefactory = CertificateFactory.getInstance("X.509");
cert = certificatefactory.generateCertificate(in);
} catch (CertificateException e) {
e.printStackTrace();
}
始終打印或記錄捕獲的異常的完整堆棧跟蹤。畢竟,您想知道出了什么問(wèn)題。隱藏它對(duì)你的程序沒(méi)有幫助,對(duì)你沒(méi)有幫助,對(duì)我們也沒(méi)有幫助。
將來(lái),請(qǐng)發(fā)布您的實(shí)際代碼。如果我們看不到它們,就很難知道哪些線路引起了問(wèn)題。
添加回答
舉報(bào)