我使用第三方工具验证签名并从签名中获取证书详细信息(如序列号,CA等)。此实用程序的问题是它已获得许可,仅适用于某些计算机。
我可以使用简单的java或.net代码验证数据签名吗?(而不是使用付费应用程序)。我没有私钥从签名数据中提取证书信息。
如果我有pfx文件,或者有人可以在java或.net中建议示例代码以提取证书详细信息。来自签名数据。
使用非对称加密对数据进行签名。
答案 0 :(得分:5)
从证书中提取详细信息:
-----BEGIN CERTIFICATE-----
和最后-----END CERTIFICATE-----
。
InputStream inStream = new ByteArrayInputStream(certString.toString().getBytes("UTF-8"));
BufferedInputStream bis = new BufferedInputStream(inStream);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert = cf.generateCertificate(bis);
X509Certificate xCert = (X509Certificate)cert;
System.out.println("Certificate Type: "+cert.getType());
System.out.println("Public Key: \n"+cert.getPublicKey());
try{
System.out.println("Signature Algorithm"+xCert.getSigAlgName());
System.out.println("IssuerDN : "+xCert.getIssuerDN());
System.out.println("Serial Number : "+xCert.getSerialNumber());
System.out.println("SubjectDN : "+xCert.getSubjectDN());
}catch(Exception exp){
:
}
InputStream inStream = new ByteArrayInputStream(certString.toString().getBytes("UTF-8"));
BufferedInputStream bis = new BufferedInputStream(inStream);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert = cf.generateCertificate(bis);
X509Certificate xCert = (X509Certificate)cert;
System.out.println("Certificate Type: "+cert.getType());
System.out.println("Public Key: \n"+cert.getPublicKey());
try{
System.out.println("Signature Algorithm"+xCert.getSigAlgName());
System.out.println("IssuerDN : "+xCert.getIssuerDN());
System.out.println("Serial Number : "+xCert.getSerialNumber());
System.out.println("SubjectDN : "+xCert.getSubjectDN());
}catch(Exception exp){
:
}
答案 1 :(得分:1)
如果您有PFX文件,那么可能包含验证签名所需的公钥证书。
或者,如果您的签名是PKCS#7签名,则签名本身将保存数据,签名和证书。假设PKCS#7没有分离。
你需要问你的签名者,他如何转移他的证书进行验证。