Статус: Новичок
Группы: Участники
Зарегистрирован: 05.07.2017(UTC) Сообщений: 3 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png)
|
Добрый день. Уже довольно долго бьюсь над проблемой интеграции с ГИС ЖКХ, и на данном этапе решил просто собрать предлагаемое решение "signature-demo-master", которое использует комбинацию JCP и Trusted Java (прошу прощения, но мой опыт разработки в среде Java крайне мал). Итак, собираю решение - без ошибок, однако, при запуске получаю ошибку: Цитата:xades4j.XAdES4jXMLSigException: com.digt.trusted.jce.provider.JDKGOST3410ELPrivateKey cannot be cast to ru.CryptoPro.JCP.Key.InternalGostPrivateKey полный код ошибки: Цитата:xades4j.XAdES4jXMLSigException: com.digt.trusted.jce.provider.JDKGOST3410ELPrivateKey cannot be cast to ru.CryptoPro.JCP.Key.InternalGostPrivateKey at xades4j.production.SignerBES.sign(SignerBES.java:263) at ru.gosuslugi.dom.signature.demo.commands.SignCommand.execute(SignCommand.java:130) at ru.gosuslugi.dom.signature.demo.Main.main(Main.java:56) Caused by: org.apache.xml.security.signature.XMLSignatureException: com.digt.trusted.jce.provider.JDKGOST3410ELPrivateKey cannot be cast to ru.CryptoP ro.JCP.Key.InternalGostPrivateKey Original Exception was java.security.InvalidKeyException: com.digt.trusted.jce.provider.JDKGOST3410ELPrivateKey cannot be cast to ru.CryptoPro.JCP.Key .InternalGostPrivateKey at com.digt.trusted.xmlsig.SignatureStraightGostR34102001GostR3411.engineInitSign(Unknown Source) at org.apache.xml.security.algorithms.SignatureAlgorithm.initSign(SignatureAlgorithm.java:239) at org.apache.xml.security.signature.XMLSignature.sign(XMLSignature.java:606) at xades4j.production.SignerBES.sign(SignerBES.java:259) ... 2 more Caused by: java.security.InvalidKeyException: com.digt.trusted.jce.provider.JDKGOST3410ELPrivateKey cannot be cast to ru.CryptoPro.JCP.Key.InternalGos tPrivateKey at ru.CryptoPro.JCP.Key.InternalGostPrivateKey.extractSpec(Unknown Source) at ru.CryptoPro.JCP.Sign.cl_0.engineInitSign(Unknown Source) at java.security.Signature.initSign(Signature.java:527) ... 6 more Caused by: java.lang.ClassCastException: com.digt.trusted.jce.provider.JDKGOST3410ELPrivateKey cannot be cast to ru.CryptoPro.JCP.Key.InternalGostPriv ateKey ... 9 more Работаю под Windows 10 x64, Java SE 8, установлен пакет крипто-про, jcp-2.0.39014, Trusted Java 2.0, ну и соответственно, необходимые зависимости. Помогите пожалуйста разобраться, т.к. полагаю, что в данном месте возникает конфликт версий JCP и Trusted Java.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Здравствуйте. Да, при нескольких провайдерах, реализующих схожий функционал и алгоритмы, могут быть проблемы. Как вы читаете ключ и используете? Может быть, вы читаете его с помощью, допустим, keyStore.getInstance("HDImageStore"), а передаете в какой-то сторонний провайдер (библиотеку)? Тогда и читать вы должны, по идее, с помощью этого стороннего провайдера, т.к. в коде есть проверки класса ключа. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 05.07.2017(UTC) Сообщений: 3 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png)
|
Да, ключ получается с помощью getInstance() Цитата:KeyStore keyStore = KeyStore.getInstance(parameters.getStoreType(), provider); А провайдеры используются эти: Цитата:// создаем провайдер, описывающий используемые алгоритмы CustomizableAlgorithmProvider algorithmsProvider = new CustomizableAlgorithmProvider(); algorithmsProvider.setSignatureAlgorithm(Consts.SIGNATURE_ALGORITHM); algorithmsProvider.setCanonicalizationAlgorithmForSignature(Consts.CANONICALIZATION_ALGORITHM_FOR_SIGNATURE); algorithmsProvider.setCanonicalizationAlgorithmForTimeStampProperties(Consts.CANONICALIZATION_ALGORITHM_FOR_TIMESTAMP_PROPERTIES); algorithmsProvider.setDigestAlgorithmForDataObjsReferences(Consts.DIGEST_ALGORITHM_URI); algorithmsProvider.setDigestAlgorithmForReferenceProperties(Consts.DIGEST_ALGORITHM_URI); algorithmsProvider.setDigestAlgorithmForTimeStampProperties(Consts.DIGEST_ALGORITHM_URI); Цитата:// создаем провайдер, ответственный за расчет хешей MessageDigestEngineProvider messageDigestEngineProvider = new CustomizableMessageDigestEngineProvider(Consts.DIGEST_ALGORITHM_NAME, provider); Цитата:// настраиваем профиль подписания XadesSigningProfile profile = new CustomizableXadesBesSigningProfileFactory() .withKeyingProvider(kp) .withAlgorithmsProvider(algorithmsProvider) .withMessageDigestEngineProvider(messageDigestEngineProvider) .create(); Цитата:// создаем объект, ответственный за создание подписи XadesSigner signer = profile.newSigner(); К сожалению, глубоко в этот код закопаться не могу. А есть более простой метод подписания, используя именно возможности JCP и удовлетворяющие требованиям ШИ ЖКХ? Или какой нибудь работающий пример? Да, еще вопрос - возможно ли поставить JCP 1.0.5 по Win 10, CryptoPro 4, Java SE 8? Заранее спасибо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Что находится в parameters.getStoreType() и provider и чьи классы CustomizableAlgorithmProvider, Consts, MessageDigestEngineProvider - неизвестно. Повторю, что вы используется 2 провайдера, реализующих работу с ключами и подписью: JCP и Trusted Java, при этом ключ, судя по всему, вы загружаете с помощью одного, а при подписи передаете его в класс (реализующий подпись) другого провайдера, где есть проверка ключа на принадлежность своему классу (instanseof). jcp 1.0 установить в java 8 не выйдет (только java 6-7), jcp 2.0 в java 8 установить можно. Есть некоторое количество примеров подписи в samples-sources.jar, в папках JCPxml и xmlSign (подпись XML документа), папке xades (XAdES подпись с помощью xades4j и XAdES.jar), папке wss4j (подпись с использованием библиотеки wss4j). Посмотрите их. Отредактировано пользователем 6 июля 2017 г. 9:32:38(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 05.07.2017(UTC) Сообщений: 3 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png)
|
Болшое спасибо! Будем разбираться )
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close