Статус: Участник
Группы: Участники
Зарегистрирован: 21.02.2018(UTC) Сообщений: 10 Откуда: Казань Сказал(а) «Спасибо»: 1 раз
|
Добрый день. Пытаюсь зашифровать XML, тестовый пример из samples-sources/xmlSign/CryptXML.java отработал отлично - получилось и зашифровать и расшифровать. Но когда попытался изменить алгоритмы из примера Код:KeyTwix twix = CertGen.generateTwix1(JCP.GOST_EL_DH_EPH_NAME, "Crypto",
JCP.GOST_EL_SIGN_NAME, JCP.PROVIDER_NAME, "CN=cert")
на использование современных алгоритмов ГОСТ3410-2012 и ГОСТ3411 Код:KeyTwix twix = CertGen.generateTwix1(JCP.GOST_EL_2012_512_NAME, JCP.PROVIDER_NAME,
JCP.GOST_SIGN_2012_512_NAME, JCP.PROVIDER_NAME, "CN=cert");
возникли проблемы при расшифровке Код:фев 21, 2018 1:47:27 PM org.apache.xml.security.encryption.XMLCipher decryptToByteArray
SEVERE: XMLCipher::decryptElement called without a key and unable to resolve
Exception in thread "main" org.apache.xml.security.encryption.XMLEncryptionException: No Key Encryption Key loaded and cannot determine using key resolvers
at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1651)
at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
at ru.crypto.XmlDecryptor.decrypt(XmlDecryptor.java:34)
at ru.EntryPoint.main(EntryPoint.java:30)
На этапе шифрования проблем нет, только при дешифровке. Визуально сравнив зашифрованные XML не увидел разницы в узлах. ОС Ubuntu 16, Java 8, JCP 5.0.39267, библиотеки в $JAVA_HOME/jre/lib/ext положил. Прошу помочь с решением проблемы. Отредактировано пользователем 21 февраля 2018 г. 14:06:35(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Проверим примеры. Пока можно включить логирование для JCP (JCPLogger) и xmlsec (он использует commons.logging), т.к. xmlsec имеет свойство скрывать исключения: -Djava.util.logging.config.file=log.properties где log.properties содержит: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger handlers=java.util.logging.ConsoleHandler .level=ALL java.util.logging.ConsoleHandler.level = ALL java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter Отредактировано пользователем 21 февраля 2018 г. 14:28:39(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 21.02.2018(UTC) Сообщений: 10 Откуда: Казань Сказал(а) «Спасибо»: 1 раз
|
После включения логирования вывод такой(верхнюю часть не включаю) Код:фев 21, 2018 3:18:56 PM org.apache.xml.security.algorithms.JCEMapper getJCEKeyAlgorithmFromURI
FINE: Request for URI urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147
фев 21, 2018 3:18:56 PM org.apache.xml.security.encryption.XMLCipher decryptKey
FINE: JCE Key Algorithm: GOST28147
фев 21, 2018 3:18:56 PM org.apache.xml.security.algorithms.JCEMapper translateURItoJCEID
FINE: Request for URI urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001
фев 21, 2018 3:18:56 PM org.apache.xml.security.encryption.XMLCipher constructCipher
FINE: JCE Algorithm = GostTransport
фев 21, 2018 3:18:56 PM org.apache.xml.security.keys.keyresolver.implementations.EncryptedKeyResolver engineLookupAndResolveSecretKey
FINE: org.apache.xml.security.encryption.XMLEncryptionException: Ключ подписи нельзя использоваться для этой операции.
Original Exception was java.security.InvalidKeyException: Ключ подписи нельзя использоваться для этой операции.
фев 21, 2018 3:18:56 PM org.apache.xml.security.keys.KeyInfo getSecretKey
FINE: I couldn't find a secret key using the per-KeyInfo key resolvers
фев 21, 2018 3:18:56 PM org.apache.xml.security.keys.KeyInfo getSecretKey
FINE: I couldn't find a secret key using the system-wide key resolvers
фев 21, 2018 3:18:56 PM org.apache.xml.security.encryption.XMLCipher decryptToByteArray
SEVERE: XMLCipher::decryptElement called without a key and unable to resolve
Exception in thread "main" org.apache.xml.security.encryption.XMLEncryptionException: No Key Encryption Key loaded and cannot determine using key resolvers
at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1651)
at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
at ru.iteco.crypto.XmlDecryptor.decrypt(XmlDecryptor.java:34)
at ru.iteco.EntryPoint.main(EntryPoint.java:32)
Отредактировано пользователем 21 февраля 2018 г. 15:53:13(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Попробуйте сгенерировать JCP.GOST_DH_2012_512_NAME. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 21.02.2018(UTC) Сообщений: 10 Откуда: Казань Сказал(а) «Спасибо»: 1 раз
|
Заменил на JCP.GOST_DH_2012_512_NAME и изменил имя провайдера на Crypto(иначе выдает ошибку что у данного провайдера нет такого алгоритма) Код: KeyTwix twix = CertGen.generateTwix1(JCP.GOST_DH_2012_512_NAME, "Crypto",
JCP.GOST_SIGN_2012_512_NAME, JCP.PROVIDER_NAME, "CN=cert");
Вывод такой: Код:фев 21, 2018 5:25:44 PM org.apache.xml.security.algorithms.JCEMapper translateURItoJCEID
FINE: Request for URI urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147
фев 21, 2018 5:25:44 PM org.apache.xml.security.encryption.XMLCipher decryptToByteArray
FINE: JCE Algorithm = GostJCE/CBC/ISO10126Padding
фев 21, 2018 5:25:44 PM ru.CryptoPro.JCP.tools.SelfTester checkClass
FINE: [main] class: ru.CryptoPro.Crypto.Cipher.GostCoreCipher, URL: file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/JCryptoP.jar
фев 21, 2018 5:25:44 PM ru.CryptoPro.JCP.tools.SelfTester a
FINE: [main] check URL: file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/JCP.jar
фев 21, 2018 5:25:44 PM ru.CryptoPro.JCP.tools.SelfTester a
FINE: [main] check URL: file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/JCryptoP.jar
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineSetMode
FINER: ENTRY
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineSetMode
FINER: RETURN
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineSetMode
FINER: ENTRY
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineSetMode
FINER: RETURN
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineInit
FINER: ENTRY
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.GostCoreCipher engineInit
FINER: RETURN
фев 21, 2018 5:25:44 PM ru.CryptoPro.Crypto.Cipher.BaseGostCipher engineDoFinal
FINER: ENTRY
Exception in thread "main" org.apache.xml.security.encryption.XMLEncryptionException: Ошибка при выполнении операции шифрования данных.
Original Exception was javax.crypto.BadPaddingException: Ошибка при выполнении операции шифрования данных.
at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1715)
at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
at ru.iteco.crypto.XmlDecryptor.decrypt(XmlDecryptor.java:34)
at ru.iteco.EntryPoint.withTwix(EntryPoint.java:40)
at ru.iteco.EntryPoint.main(EntryPoint.java:28)
javax.crypto.BadPaddingException: Ошибка при выполнении операции шифрования данных.
at ru.CryptoPro.Crypto.Cipher.BaseGostCipher.a(Unknown Source)
at ru.CryptoPro.Crypto.Cipher.BaseGostCipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Cipher.java:2222)
at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1711)
at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
at ru.iteco.crypto.XmlDecryptor.decrypt(XmlDecryptor.java:34)
at ru.iteco.EntryPoint.withTwix(EntryPoint.java:40)
at ru.iteco.EntryPoint.main(EntryPoint.java:28)
также пробовал вместо JCP.GOST_SIGN_2012_512_NAME использовать JCP.GOST_SIGN_DH_2012_512_NAME. Вывод был аналогичным
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Проблема в том, что параметры шифрования по умолчанию у ГОСТ 2001 и ГОСТ 2012 ключей разные, а XMLCipher (xmlsec) ограничен в возможностях настройки шифратора. Поэтому нужно при использовании ГОСТ 2012 задать параметры секретного ключа перед его генерацией так, чтобы они совпали с параметрами ключа получателя: Код:
// ф. public static Document encrypt(Document doc, X509Certificate cert) в CryptXML:
// Вместо
KeyGenerator kg = KeyGenerator.getInstance("GOST28147");
kg.init(CryptParamsSpec.getInstance(CryptParamsSpec.Rosstandart_TC26_Z)); <-- для ГОСТ 2012
SecretKey sessionKey = kg.generateKey();
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 21.02.2018(UTC) Сообщений: 10 Откуда: Казань Сказал(а) «Спасибо»: 1 раз
|
Спасибо. Чуть продвинулся. Теперь другая ошибка Код:мар 01, 2018 5:47:09 PM org.apache.xml.security.encryption.XMLCipher decryptToByteArray
SEVERE: XMLCipher::decryptElement called without a key and unable to resolve
Exception in thread "main" org.apache.xml.security.encryption.XMLEncryptionException: No Key Encryption Key loaded and cannot determine using key resolvers
at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1651)
at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1560)
at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:876)
at ru.iteco.CryptXML.decrypt(CryptXML.java:202)
at ru.iteco.CryptXML.main(CryptXML.java:70)
CryptXML.java (11kb) загружен 23 раз(а).На всякий случай приложил файл CryptXML.java, который запускаю.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Включите, пожалуйста, логирование еще раз. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 21.02.2018(UTC) Сообщений: 10 Откуда: Казань Сказал(а) «Спасибо»: 1 раз
|
Ошибка та же самая, а не другая. Прошу прощения. Приложил файл с выводом программы output-java-csp-5.0.39267.txt (134kb) загружен 16 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Original Exception was java.security.InvalidKeyException: Ключ подписи нельзя использоваться для этой операции. Ключ обмена используете? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close