使用Java签名和验证数据不会有效

时间:2016-04-22 03:00:32

标签: java rsa digital-signature pki

我使用以下命令使用openssl创建了一个rsa密钥对(以及一个自签名证书):

openssl req -x509 -newkey rsa:2048 -keyout privado-ssl.pem -out certificado-ssl.pem -days 365 -nodes

生成的文件及其内容的名称为:

privado-ssl.pem中:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA45TtNcik6ToMf6pgfcZhnYx8XlQKWuYLF0KyVNJIHn+H1Wp9
Tyhbjw9xSsZOPw4RiwgUdidmdH0GlTvm0AxieYjT2gZDFoYH+O9Zd2+KMpOFWhFU
(etc, etc...)
-----END RSA PRIVATE KEY-----

CERTIFICADO-ssl.pem中:

-----BEGIN CERTIFICATE-----
MIIEmDCCA4CgAwIBAgIJAOMPP5KhPi+WMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYD
VQQGEwJQRTENMAsGA1UECBMETGltYTENMAsGA1UEBxMETGltYTETMBEGA1UEChMK
Tm92YXRyb25pYzEMMAoGA1UECxMDQ0FUMRgwFgYDVQQDEw9EYW5pZWwgQ2FsZGVy
(etc, etc ...)
-----END CERTIFICATE-----

由于我使用java.security。*类来签名和验证签名,我将privado-ssl.pem(我的私钥)转换为PKSC8格式,使用以下方法将DER enconding:

openssl pkcs8 -topk8 -outform DER -in privado-ssl.pem -out privado-ssl-pkcs8-der.pem -nocrypt

但是,当使用所述类来验证签名时,我在验证签名时会得到错误(但没有例外)。

这是我从私钥文件中获取私钥的方式(作为字节数组):

KeyFactory keyFactory = KeyFactory.getInstance("RSA");
KeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
return keyFactory.generatePrivate(privateKeySpec);

证书:

InputStream certificateInputStream = new ByteArrayInputStream(certificateBytes);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
return certificateFactory.generateCertificates(certificateInputStream).get(0);

对于签名和验证,我使用的是SHA1withRSA算法而没有提供商。

我可能做错了什么?如果您需要更多信息,请告诉我。绝望在这里:)

0 个答案:

没有答案