使用Java won'对数据进行签名和验证;行不通

使用Java won'对数据进行签名和验证;行不通,java,rsa,digital-signature,pki,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----- MIIEpAIBAAKCAQEA45TtNcik6ToMf6pgfcZhnYx8XlQKWuYL

我使用以下命令使用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-----
-----BEGIN CERTIFICATE-----
MIIEmDCCA4CgAwIBAgIJAOMPP5KhPi+WMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYD
VQQGEwJQRTENMAsGA1UECBMETGltYTENMAsGA1UEBxMETGltYTETMBEGA1UEChMK
Tm92YXRyb25pYzEMMAoGA1UECxMDQ0FUMRgwFgYDVQQDEw9EYW5pZWwgQ2FsZGVy
(etc, etc ...)
-----END CERTIFICATE-----
certificado-ssl.pem:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA45TtNcik6ToMf6pgfcZhnYx8XlQKWuYLF0KyVNJIHn+H1Wp9
Tyhbjw9xSsZOPw4RiwgUdidmdH0GlTvm0AxieYjT2gZDFoYH+O9Zd2+KMpOFWhFU
(etc, etc...)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIEmDCCA4CgAwIBAgIJAOMPP5KhPi+WMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYD
VQQGEwJQRTENMAsGA1UECBMETGltYTENMAsGA1UEBxMETGltYTETMBEGA1UEChMK
Tm92YXRyb25pYzEMMAoGA1UECxMDQ0FUMRgwFgYDVQQDEw9EYW5pZWwgQ2FsZGVy
(etc, etc ...)
-----END CERTIFICATE-----
由于我使用java.security.*类来签名和验证签名,因此我将privado-ssl.pem(我的私钥)转换为PKSC8格式,并使用以下命令进行加密:

openssl pkcs8 -topk8 -outform DER -in privado-ssl.pem -out privado-ssl-pkcs8-der.pem -nocrypt
但是,当使用上述类验证签名时,我在验证签名时得到false(但没有例外)

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

证书:

InputStream certificateInputStream = new ByteArrayInputStream(certificateBytes);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
return certificateFactory.generateCertificates(certificateInputStream).get(0);
对于签名和验证,我使用SHA1withRSA算法,没有提供程序


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

对于签名和验证,我使用的是SHA1withRSA算法,没有提供程序。-请详细说明。你发布的内容看起来不错,“无例外”更好。我唯一的直接想法是确认您
.update
用于验证的数据与签名时使用的数据完全相同,并且您尝试验证的签名与签名返回的签名完全相同。如果这没有帮助,将代码减少到显示问题的最小值(MCVE)并发布。PS:上次openssl写入旧式格式的
req-newkey
是0.9.8,现在至少是上游版本。如果您在任何重要的事情上依赖于此openssl,请在可以的时候考虑升级。PPS:可能您没有指定提供商;总是有一个提供者。你能提供你所有的Java代码吗?为了签名和验证,我使用的是没有提供者的SHA1 WithRSA算法。-请详细说明。你发布的内容看起来不错,“无例外”更好。我唯一的直接想法是确认您
.update
用于验证的数据与签名时使用的数据完全相同,并且您尝试验证的签名与签名返回的签名完全相同。如果这没有帮助,将代码减少到显示问题的最小值(MCVE)并发布。PS:上次openssl写入旧式格式的
req-newkey
是0.9.8,现在至少是上游版本。如果您在任何重要的事情上依赖于此openssl,请在可以的时候考虑升级。PPS:可能您没有指定提供商;总是有一个提供者。你能提供你所有的Java代码吗?