2011-06-13 41 views
1

我正在开发基于Java的许可项目。我有一个数字证书文件和生成签名的数据。是否有一些API或手段从这些信息中获取公钥?基本上来自数据和数字证书信息的公钥。从数字签名获取公钥

回答

0

你的问题是非常模糊恕我直言。

我有一个数字证书文件, 为其签名是 产生

如果证书文件用来验证签名的公钥的数据,那么你可以使用标准的java加载它apis(假设X509证书)。

FileInputStream fin = new FileInputStream("PathToCertificate"); 
CertificateFactory f = CertificateFactory.getInstance("X.509"); 
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin); 
PublicKey pk = certificate.getPublicKey(); 

一旦你有公钥,你可以用它来验证签名。
这是你想要的吗?

+0

对不起,听起来含糊不清。让我澄清一下。我有一个数字签名和生成签名的数据。现在我想验证这个签名。我正在关注此教程 - – user496934 2011-06-13 12:59:08

+0

http://download.oracle.com/javase/tutorial/security/apisign/versig.html。但是,我没有所需的公钥。有什么办法可以解决这个问题吗? – user496934 2011-06-13 12:59:57

+0

签名不存储签名证书的信息。您还需要拥有该证书。这不是问题,但由于签名证书是公共文档,因此您应该拥有该证书 – Cratylus 2011-06-13 13:09:57

0

证书必须包含对用于验证数据的密钥ID的引用。从这个密钥中,应该能够通过提供它的id来联系相应的证书颁发机构并获得公钥。它也可以从公共存储库中获得。

证书颁发机构的ID也应出现在此证书上。

确实有API可用,但问题是,您使用哪种框架进行数字签名?你有它的名字吗?你知道证书类型吗?

2

如果数字签名的格式为PKCS#7 - 而非已分离,则发件人可能已将该证书作为数字签名的一部分包含在内。

您将被要求解析签名以获取证书。