Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
no such algorithm: GOST3411-2012-256WITHECGOST3410-2012-256 for provider JCP
Статус: Активный участник
Группы: Участники
Зарегистрирован: 02.02.2011(UTC) Сообщений: 43 Откуда: Екатеринбург Сказал «Спасибо»: 14 раз Поблагодарили: 1 раз в 1 постах
|
Добрый день. Обновили в своем приложении версию JCP с 2.0.40502 до 2.0.41789 В приложении есть код, который делает проверку подписи, используя CAdES и bouncycastle. С версией 2.0.40502 все работало. Сначала обновили до 2.0.41789, оставив старые версии библиотек bouncycastle (1.50) - проверка подписи по прежнему работала. Потом заметили что в dependencies у версии 2.0.41789 лежат более новые версии библиотек bouncycastle (1.60) - обновили и их. И вот после этого проверка подписи сломалась, стала выдавать ошибку: Цитата:can't create content verifier: exception on setup: java.security.NoSuchAlgorithmException: no such algorithm: GOST3411-2012-256WITHECGOST3410-2012-256 for provider JCP Код, делающий проверку примерно такой (убрал несущественные детали): Код:
byte[] sign = new BASE64Decoder().decodeBuffer(sign_base64);
CMSSignedData signedData = new CMSSignedData(new CMSProcessableByteArray(signDate), sign);
Store<X509CertificateHolder> store = signedData.getCertificates();
SignerInformationStore signers = signedData.getSignerInfos();
Collection<SignerInformation> c = signers.getSigners();
Iterator<SignerInformation> it = c.iterator();
while (it.hasNext())
{
SignerInformation signer = it.next();
Collection<X509CertificateHolder> certCollection = store.getMatches(signer.getSID());
Iterator<X509CertificateHolder> certIt = certCollection.iterator();
X509CertificateHolder certHolder = certIt.next();
X509Certificate cert = new JcaX509CertificateConverter().getCertificate(certHolder);
JcaSignerInfoVerifierBuilder verifierBuilder =
new JcaSignerInfoVerifierBuilder(new JcaDigestCalculatorProviderBuilder().build());
verifierBuilder.setSignatureAlgorithmNameGenerator(new GostCMSSignatureAlgorithmNameGenerator());
verifierBuilder.setSignatureAlgorithmFinder(new GostSignatureAlgorithmIdentifierFinder());
SignerInformationVerifier signerInfoVerifier = verifierBuilder.setProvider(
CAdESConfig.getDefaultDigestSignatureProvider()).build(cert.getPublicKey());
signer.verify(signerInfoVerifier);
}
Вопросы: 1. Какую все-таки версию библиотек bouncycastle правильно использовать с JCP 2.0.41789? В инсталляторе указано 1.50, в dependencies лежит 1.60. Подозреваю что в инсталляторе просто забыли поменять и нужна все-таки 1.60. 2. Почему тогда с этими библиотеками перестала работать проверка подписи, которая раньше работала, и что надо сделать чтобы она снова заработала?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Спасибо, что заметили неточности с номером версии в установщике, исправим на 1.60. 1. Нужна версия BC 1.60, как в dependencies. 2. В BC этой версии появилась поддержка ГОСТ 2012, поэтому возник конфликт. Попробуйте поправить пример так, если проверять подпись с помощью JCP: Код:
String provider = CAdESConfig.getDefaultDigestSignatureProvider(); // <-- !
byte[] sign = new BASE64Decoder().decodeBuffer(sign_base64);
CMSSignedData signedData = new CMSSignedData(new CMSProcessableByteArray(signDate), sign);
Store<X509CertificateHolder> store = signedData.getCertificates();
SignerInformationStore signers = signedData.getSignerInfos();
Collection<SignerInformation> c = signers.getSigners();
Iterator<SignerInformation> it = c.iterator();
while (it.hasNext())
{
SignerInformation signer = it.next();
Collection<X509CertificateHolder> certCollection = store.getMatches(signer.getSID());
Iterator<X509CertificateHolder> certIt = certCollection.iterator();
X509CertificateHolder certHolder = certIt.next();
X509Certificate cert = new JcaX509CertificateConverter().getCertificate(certHolder);
SignerInformationVerifier signerInfoVerifier = new SignerInformationVerifier( // <-- !
new GostCMSSignatureAlgorithmNameGenerator(),
new GostSignatureAlgorithmIdentifierFinder(),
new GostContentVerifierProvider(cert, provider),
new GostDigestCalculatorProvider(cert.getPublicKey(), provider)
);
signer.verify(signerInfoVerifier);
}
|
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
dbubb оставлено 29.03.2021(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 02.02.2011(UTC) Сообщений: 43 Откуда: Екатеринбург Сказал «Спасибо»: 14 раз Поблагодарили: 1 раз в 1 постах
|
Цитата:Попробуйте поправить пример так, если проверять подпись с помощью JCP Да, в таком виде сработало без ошибок, спасибо!
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
no such algorithm: GOST3411-2012-256WITHECGOST3410-2012-256 for provider JCP
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close