Статус: Новичок
Группы: Участники
Зарегистрирован: 18.10.2021(UTC) Сообщений: 3 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Всем добрый день! У меня, наверное, совсем ламерский вопрос, но чот я совсем подвис и не могу разобраться. У меня стоит задача подписать xml. Есть сертификат (*.cer-файл), есть 6 файлов, извлечённого из сертификата private key. Примеров в сети, как поженить эти штуки с xml, достаточно. Вроде всё запилил, но валюсь на ошибке: Цитата:org.apache.xml.security.signature.XMLSignatureException: Алгоритм ключа не соответствует алгоритму подписи. И действительно если посмотреть privateKey.getAlgorithm(), то там GOST3410DH_2012_256, а если посмотреть certificate.getSigAlgName(), то там GOST3411_2012_256withGOST3410_2012_256. Но, что с этим делать, я вообще сообразить не могу. Буду благодарен за подсказку, куда копать, что читать, что вообще происходит))
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,925 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
Здравствуйте. Приложите сертификат и приведите кусок кода создания подписи с именами алгоритмов. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.10.2021(UTC) Сообщений: 3 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Да, конечно. Сертификат в base64 приложил, расширение на txt поменял из-за ограничений на загрузку. Так мы эти штуки загружаем с диска: Цитата: HDImageStore.setDir("./imagestore/"); KeyStore hdImageStore = getKeyStore(null, null, JCP.HD_STORE_NAME, JCP.PROVIDER_NAME); PrivateKey privateKey = (PrivateKey) hdImageStore.getKey("alias", "pwd".toCharArray()); X509Certificate certificate = getCertificate("cert.cer"); //certificateFactory.engineGenerateCertificate(FileInputStream)
Собственно сразу после загрузки можно посмотреть, что там в загруженных объектах с алгоритмами: Цитата: System.out.println(privateKey.getAlgorithm()); //GOST3410DH_2012_256 System.out.println(certificate.getSigAlgName()); //GOST3411_2012_256withGOST3410_2012_256
Код создания подписи: Цитата: public static final String XMLDSIG_SIGN_METHOD = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"; private static final String XMLDSIG_DETACHED_TRANSFORM_METHOD = Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS; ... XMLSignature xmlSignature = new XMLSignature(argDocument, "", XMLDSIG_SIGN_METHOD, XMLDSIG_DETACHED_TRANSFORM_METHOD);
Падаем на последней строке этого куска: Цитата: XMLSignature xmlSignature = new XMLSignature(argDocument, "", XMLDSIG_SIGN_METHOD, XMLDSIG_DETACHED_TRANSFORM_METHOD);
if (argSignatureId != null) { xmlSignature.setId(argSignatureId); }
//Transforms ...
// создание внутри узла подписи узла <ds:KeyInfo> информации об открытом ключе на основе сертификата xmlSignature.addKeyInfo(argCertificate);
// создание подписи XML-документа xmlSignature.sign(argPrivateKey);
Спасибо, что откликнулись! Отредактировано пользователем 18 октября 2021 г. 18:34:07(UTC)
| Причина: удалил ссыль на сертификат, потому что так сказало руководство))
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.10.2021(UTC) Сообщений: 3 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Тему можно закрывать. Спасибо всем, кто уделил ей внимание. Оказалось, что есть такой замечательный джарник как samples-sources.jar. И, как следствие, не было необходимости изобретать велосипед. Немного адаптировав код из XMLSignDoc я таки получил подписанный xml.
Хотя задачу я ещё не допилил, но конкретно этой проблемы больше нет. Ещё раз всем спасибо и хорошего вечера!
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,925 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
Добавлю, что указанная ошибка может возникнуть при подписи/проверке_подписи, если алгоритм закрытого/открытого ключа не соответствует алгоритму подписи, например, ключ с алгоритмом ГОСТ 2012 (256) не может быть использован для создания подписи с алгоритмом ГОСТ 2001 (или с его представлением в xml). |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close