Добрый день.
ОС Ubuntu. CSP 5.0, JCP 2.0.42646.
С помощью КриптоАрм создана связка открытого и закрытого ключа и помещена в хранилище следующей командой:
Цитата:/opt/cprocsp/bin/amd64/certmgr -install -pfx -file file.pfx -pin ...
На Java реализован функционал подписи текста. Нужно через вызов cryptcp делать верификацию этой подписи.
Закрытый и открытый ключи беру из хранилища:
Цитата: KeyStore keyStore = KeyStore.getInstance("HDImageStore", "JCP");
KeyStore.ProtectionParameter protectedParam = new KeyStore.PasswordProtection(password.toCharArray());
JCPPrivateKeyEntry entry = (JCPPrivateKeyEntry) keyStore.getEntry(alias, protectedParam);
PrivateKey privateKey = entry.getPrivateKey();
PublicKey publicKeyStore = entry.getCertificate().getPublicKey();
Подпись осуществляется следующим набором команд:
Цитата: Signature sig = Signature.getInstance(JCP.CRYPTOPRO_SIGN_2012_512_NAME);
sig.initSign(privateKey);
sig.update(dataBytesToSign);
byte[] signedBytes = sig.sign();
Сохранение подписи в файл:
Цитата: File signFile = new File(signFileName);
try (FileOutputStream outputStream = new FileOutputStream(signFile)) {
outputStream.write(signedBytes);
}
Проверка подписи в Java для тестов осуществляется следующим набором команд:
Цитата: Signature publicSignature = Signature.getInstance(JCP.CRYPTOPRO_SIGN_2012_512_NAME);
publicSignature.initVerify(publicKeyStore);
publicSignature.update(signedBytes);
boolean isVerified = publicSignature.verify(dataBytesToSign);
Результат верификации - true.
Если эту подпись проверить следующей командой:
Цитата:/opt/cprocsp/bin/amd64/cryptcp -vsignf -norev -f public_key.cer file_to_sign.xml
(public_key.cer - открытый ключ, file_to_sign.xml - содержимое для подписи. Предварительно в директорию с данными файлами добавляется файл file_to_sign.xml.sgn , содержащий подпись, полученную в Java).
то выдается ошибка:
Цитата:Signature verifying... [ErrorCode: 0xffffffff]
Если сделать подпись командой:
Цитата:/opt/cprocsp/bin/amd64/cryptcp -sign -detach -der file_to_sign.xml file_to_sign.xml.sgn -nochain -norev
и повторно вызвать команду выше cryptcp -vsignf, то проверка проходит успешно.
Читал данный пост -
https://www.cryptopro.ru...spx?g=posts&t=16921. Пробовал предварительно хэшировать массив байт текста и затем подписывать и верифицировать. В java проверка проходит, через cryptcp - нет.
Объясните, пожалуйста, с чем связана проблема верификации подписи в cryptcp и как ее устранить?
Отредактировано пользователем 22 ноября 2023 г. 12:39:31(UTC)
| Причина: Не указана