簡體   English   中英

OpenSSL始終無法驗證從Java中的Bouncy Castle生成的簽名

[英]OpenSSL always fails verifying signature generated from Bouncy Castle in Java

我試圖從文件生成簽名,以便客戶端使用OpenSSL驗證它們,所以使用Bouncy Castle在Java中實現相應的openSSL命令:

openssl.exe dgst -sha256 -sign privateKey.pem -out \data.txt.sig \data.txt

使用bouncy castle 1.57和java,我們從文件中獲取字節數組簽名,我可以在代碼中驗證它。 私有,公共和證書是從openSSL生成的。

所以要生成證書:

從pem私鑰文件中讀取私鑰:

PEMParser pemParser = new PEMParser(new FileReader(PRIVATE_FILE_PATH));
                    PKCS8EncryptedPrivateKeyInfo encryptedPrivateKeyInfo = (PKCS8EncryptedPrivateKeyInfo) pemParser.readObject();
JceOpenSSLPKCS8DecryptorProviderBuilder jce = new JceOpenSSLPKCS8DecryptorProviderBuilder();
jce.setProvider("BC");
InputDecryptorProvider decProv = jce.build(password.toCharArray());
PrivateKeyInfo info = encryptedPrivateKeyInfo.decryptPrivateKeyInfo(decProv);
JcaPEMKeyConverter pemKeyConverter = new JcaPEMKeyConverter();
PrivateKey pk = pemKeyConverter.getPrivateKey(info);

並生成RSA SHA 256簽名並將結果寫入簽名文件:

byte[] data = Files.readAllBytes(Paths.get(txtFileToSignPath));
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initSign(pk);
sig.update(data);
byte[] signature = sig.sign();
FileOutputStream dfis = new FileOutputStream(SignaturefilePath);
dfis.write(bytesToWrite);
dfis.close();

以編程方式我可以驗證從上面的代碼以及從開放的SSL生成的簽名:

Signature verifySignature = Signature.getInstance("SHA256withRSA"); 
byte[] signatureBytes =  
Files.readAllBytes(Paths.get(SignaturefilePath);
verifySignature.initVerify(getPublicKeyFromCertFile(CERT_PEM));
verifySignature.update(data);
verifySignature.verify(signatureBytes);

另一方面,openSSL通過驗證代碼生成的簽名,總是“驗證失敗”。

是OpenSSL能夠直接驗證字節數組簽名,還是我遺漏了什么?

上面的代碼工作正常,正在驗證另一個文件的簽名。 為學習目的而提出的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM