OpenSSL всегда терпит неудачу при проверке подписи, сгенерированной из Bouncy Castle в Java - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь сгенерировать подписи из файлов, чтобы проверить их клиентами, использующими OpenSSL, поэтому реализовать соответствующую команду openSSL в Java, используя Bouncy Castle:

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 проверить массив байтов подписей напрямую или я что-то упустил?

1 Ответ

0 голосов
/ 07 мая 2019

код выше работает нормально, проверял подпись против другого файла.Вопрос задан для учебной цели.

...