Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана #104

Closed
dorohovrs opened this issue May 8, 2018 · 3 comments

Comments

@dorohovrs
Copy link

Здравствуйте, помогите решить проблему. Использую JRE 1.7 JCP 1.0.54.

Почитал подобные решения проблем, мне так и ни одно и не помогло. Изначально использовал JRE 1.8.0_131 JCP 2. Выдавал ошибку про GOST3410DH.

KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
keyStore.load(null, null);
PrivateKey privateKey = (PrivateKey)keyStore.getKey(ALIAS, PASSWORD);
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(ALIAS);
System.out.println(certificate);

Отрабатывает без проблем. Сертификат выводиться.
Запускаю Api.Authenticate(certificate); Выдает ошибку:

java.security.UnrecoverableKeyException: Need password
at ru.CryptoPro.JCP.KeyStore.t.f(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.t.e(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.t.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineGetKey(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(KeyStore.java:792)
at Diadoc.Api.CertificateHelper.getPrivateKey(CertificateHelper.java:139)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:344)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:296)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:191)
at program.main(program.java:47)
май 08, 2018 1:26:24 PM ru.CryptoPro.Crypto.Key.KeyAgreement engineInit
WARNING: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
java.security.InvalidKeyException: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
at ru.CryptoPro.Crypto.Key.KeyAgreement.engineInit(Unknown Source)
at javax.crypto.KeyAgreement.implInit(KeyAgreement.java:342)
at javax.crypto.KeyAgreement.chooseProvider(KeyAgreement.java:372)
at javax.crypto.KeyAgreement.init(KeyAgreement.java:524)
at javax.crypto.KeyAgreement.init(KeyAgreement.java:498)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:345)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:296)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:191)
at program.main(program.java:47)

Exception in thread "main" java.security.InvalidKeyException: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
at ru.CryptoPro.Crypto.Key.KeyAgreement.engineInit(Unknown Source)
at javax.crypto.KeyAgreement.implInit(KeyAgreement.java:342)
at javax.crypto.KeyAgreement.chooseProvider(KeyAgreement.java:372)
at javax.crypto.KeyAgreement.init(KeyAgreement.java:524)
at javax.crypto.KeyAgreement.init(KeyAgreement.java:498)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:345)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:296)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:191)
at program.main(program.java:47)

В какую сторону искать решение проблемы? И что за пароль он требует? (java.security.UnrecoverableKeyException: Need password)

Сертификат рабочий, авторизация через web в ДИАДОК проходит, файлы отправляются. Пишем решение для автоматизации данного процесса.

@dorohovrs
Copy link
Author

dorohovrs commented May 9, 2018

С паролем я более менее разобрался.
PrivateKey privateKey = CertificateHelper.getPrivateKey(currentCert, "Сюда надо ключ от закрытого ключа передать"); (Это в decryptToken)

Далее ошибка:

май 09, 2018 12:22:40 PM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 1.0.54 36641
май 09, 2018 12:22:40 PM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
Exception in thread "main" java.lang.UnsupportedOperationException
at javax.crypto.CipherSpi.engineGetKeySize(CipherSpi.java:926)
at javax.crypto.Cipher.passCryptoPermCheck(Cipher.java:1051)
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1009)
at javax.crypto.Cipher.implInit(Cipher.java:785)
at javax.crypto.Cipher.chooseProvider(Cipher.java:848)
at javax.crypto.Cipher.init(Cipher.java:1212)
at javax.crypto.Cipher.init(Cipher.java:1152)
at Diadoc.Api.DiadocApi.gostUnwrapKey(DiadocApi.java:321)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:349)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:296)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:191)
at program.main(program.java:48)

Process finished with exit code 1

@dorohovrs
Copy link
Author

Решение ошибки нашел.
https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/44

Все заработало.
Остается что то делать с паролем. Либо контейнер держать без пароля, либо как то его передавать.

@i82
Copy link

i82 commented Oct 4, 2018

Добрый день. Извиняемся за долгий ответ. Ваша проблема еще актуальна?

@i82 i82 closed this as completed Oct 22, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants