Atom Лента - Форум КриптоПро - Тема:Создание подписи xmldsig в Java - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:SozdaniepodpisixmldsigvJava-10:1Copyright 2024 Форум КриптоПро2024-03-29T05:00:33Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений АфанасьевЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений АфанасьевВладимир Карсановhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=60540&name=Владимир КарсановВладимир Карсановhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=60540&name=Владимир КарсановЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений АфанасьевВладимир Карсановhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=60540&name=Владимир КарсановYetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid128109:1Создание подписи xmldsig в Java<table class="content postContainer_Alt" width="100%"><tr><td>Добавлю, что указанная ошибка может возникнуть при подписи/проверке_подписи, если алгоритм закрытого/открытого ключа не соответствует алгоритму подписи, например, ключ с алгоритмом ГОСТ 2012 (256) не может быть использован для создания подписи с алгоритмом ГОСТ 2001 (или с его представлением в xml). </td></tr></table>2021-10-18T18:41:35+03:002021-10-18T18:41:35+03:00Евгений Афанасьев<table class="content postContainer_Alt" width="100%"><tr><td>Добавлю, что указанная ошибка может возникнуть при подписи/проверке_подписи, если алгоритм закрытого/открытого ключа не соответствует алгоритму подписи, например, ключ с алгоритмом ГОСТ 2012 (256) не может быть использован для создания подписи с алгоритмом ГОСТ 2001 (или с его представлением в xml). </td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid128108:1Создание подписи xmldsig в Java<table class="content postContainer" width="100%"><tr><td>Тему можно закрывать. Спасибо всем, кто уделил ей внимание. Оказалось, что есть такой замечательный джарник как samples-sources.jar. И, как следствие, не было необходимости изобретать велосипед. Немного адаптировав код из XMLSignDoc я таки получил подписанный xml.<br /><br />Хотя задачу я ещё не допилил, но конкретно этой проблемы больше нет. Ещё раз всем спасибо и хорошего вечера!</td></tr></table>2021-10-18T18:33:16+03:002021-10-18T18:33:16+03:00Владимир Карсанов<table class="content postContainer" width="100%"><tr><td>Тему можно закрывать. Спасибо всем, кто уделил ей внимание. Оказалось, что есть такой замечательный джарник как samples-sources.jar. И, как следствие, не было необходимости изобретать велосипед. Немного адаптировав код из XMLSignDoc я таки получил подписанный xml.<br /><br />Хотя задачу я ещё не допилил, но конкретно этой проблемы больше нет. Ещё раз всем спасибо и хорошего вечера!</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid128098:1Создание подписи xmldsig в Java<table class="content postContainer_Alt" width="100%"><tr><td>Да, конечно. Сертификат в base64 приложил, расширение на txt поменял из-за ограничений на загрузку.<br /><br />Так мы эти штуки загружаем с диска:<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />HDImageStore.setDir("./imagestore/");<br />KeyStore hdImageStore = getKeyStore(null, null, JCP.HD_STORE_NAME, JCP.PROVIDER_NAME);<br />PrivateKey privateKey = (PrivateKey) hdImageStore.getKey("alias", "pwd".toCharArray());<br />X509Certificate certificate = getCertificate("cert.cer"); //certificateFactory.engineGenerateCertificate(FileInputStream)<br /></div></div><br /><br />Собственно сразу после загрузки можно посмотреть, что там в загруженных объектах с алгоритмами:<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />System.out.println(privateKey.getAlgorithm()); //GOST3410DH_2012_256<br />System.out.println(certificate.getSigAlgName()); //GOST3411_2012_256withGOST3410_2012_256<br /></div></div><br /><br />Код создания подписи:<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />public static final String XMLDSIG_SIGN_METHOD = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256";<br />private static final String XMLDSIG_DETACHED_TRANSFORM_METHOD = Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS;<br />...<br />XMLSignature xmlSignature = new XMLSignature(argDocument, "", XMLDSIG_SIGN_METHOD, XMLDSIG_DETACHED_TRANSFORM_METHOD);<br /></div></div><br /><br />Падаем на последней строке этого куска:<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br /> XMLSignature xmlSignature = new XMLSignature(argDocument, "", XMLDSIG_SIGN_METHOD, XMLDSIG_DETACHED_TRANSFORM_METHOD);<br /><br /> if (argSignatureId != null) {<br /> xmlSignature.setId(argSignatureId);<br /> }<br /><br /> //Transforms<br /> ...<br /><br /> // создание внутри узла подписи узла <ds:KeyInfo> информации об открытом ключе на основе сертификата<br /> xmlSignature.addKeyInfo(argCertificate);<br /><br /> // создание подписи XML-документа<br /> xmlSignature.sign(argPrivateKey);<br /></div></div><br /><br />Спасибо, что откликнулись!</td></tr></table>2021-10-18T18:34:07+03:002021-10-18T18:34:07+03:00Владимир Карсанов<table class="content postContainer_Alt" width="100%"><tr><td>Да, конечно. Сертификат в base64 приложил, расширение на txt поменял из-за ограничений на загрузку.<br /><br />Так мы эти штуки загружаем с диска:<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />HDImageStore.setDir("./imagestore/");<br />KeyStore hdImageStore = getKeyStore(null, null, JCP.HD_STORE_NAME, JCP.PROVIDER_NAME);<br />PrivateKey privateKey = (PrivateKey) hdImageStore.getKey("alias", "pwd".toCharArray());<br />X509Certificate certificate = getCertificate("cert.cer"); //certificateFactory.engineGenerateCertificate(FileInputStream)<br /></div></div><br /><br />Собственно сразу после загрузки можно посмотреть, что там в загруженных объектах с алгоритмами:<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />System.out.println(privateKey.getAlgorithm()); //GOST3410DH_2012_256<br />System.out.println(certificate.getSigAlgName()); //GOST3411_2012_256withGOST3410_2012_256<br /></div></div><br /><br />Код создания подписи:<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br />public static final String XMLDSIG_SIGN_METHOD = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256";<br />private static final String XMLDSIG_DETACHED_TRANSFORM_METHOD = Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS;<br />...<br />XMLSignature xmlSignature = new XMLSignature(argDocument, "", XMLDSIG_SIGN_METHOD, XMLDSIG_DETACHED_TRANSFORM_METHOD);<br /></div></div><br /><br />Падаем на последней строке этого куска:<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br /> XMLSignature xmlSignature = new XMLSignature(argDocument, "", XMLDSIG_SIGN_METHOD, XMLDSIG_DETACHED_TRANSFORM_METHOD);<br /><br /> if (argSignatureId != null) {<br /> xmlSignature.setId(argSignatureId);<br /> }<br /><br /> //Transforms<br /> ...<br /><br /> // создание внутри узла подписи узла <ds:KeyInfo> информации об открытом ключе на основе сертификата<br /> xmlSignature.addKeyInfo(argCertificate);<br /><br /> // создание подписи XML-документа<br /> xmlSignature.sign(argPrivateKey);<br /></div></div><br /><br />Спасибо, что откликнулись!</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid128097:1Создание подписи xmldsig в Java<table class="content postContainer" width="100%"><tr><td>Здравствуйте.<br />Приложите сертификат и приведите кусок кода создания подписи с именами алгоритмов.</td></tr></table>2021-10-18T15:13:55+03:002021-10-18T15:13:55+03:00Евгений Афанасьев<table class="content postContainer" width="100%"><tr><td>Здравствуйте.<br />Приложите сертификат и приведите кусок кода создания подписи с именами алгоритмов.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid128095:1Создание подписи xmldsig в Java<table class="content postContainer_Alt" width="100%"><tr><td>Всем добрый день!<br /><br />У меня, наверное, совсем ламерский вопрос, но чот я совсем подвис и не могу разобраться.<br /><br />У меня стоит задача подписать xml. Есть сертификат (*.cer-файл), есть 6 файлов, извлечённого из сертификата private key. Примеров в сети, как поженить эти штуки с xml, достаточно. Вроде всё запилил, но валюсь на ошибке:<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>org.apache.xml.security.signature.XMLSignatureException: Алгоритм ключа не соответствует алгоритму подписи.</div></div><br /><br />И действительно если посмотреть privateKey.getAlgorithm(), то там GOST3410DH_2012_256, а если посмотреть certificate.getSigAlgName(), то там GOST3411_2012_256withGOST3410_2012_256.<br /><br />Но, что с этим делать, я вообще сообразить не могу. Буду благодарен за подсказку, куда копать, что читать, что вообще происходит))</td></tr></table>2021-10-18T14:45:20+03:002021-10-18T14:45:20+03:00Владимир Карсанов<table class="content postContainer_Alt" width="100%"><tr><td>Всем добрый день!<br /><br />У меня, наверное, совсем ламерский вопрос, но чот я совсем подвис и не могу разобраться.<br /><br />У меня стоит задача подписать xml. Есть сертификат (*.cer-файл), есть 6 файлов, извлечённого из сертификата private key. Примеров в сети, как поженить эти штуки с xml, достаточно. Вроде всё запилил, но валюсь на ошибке:<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>org.apache.xml.security.signature.XMLSignatureException: Алгоритм ключа не соответствует алгоритму подписи.</div></div><br /><br />И действительно если посмотреть privateKey.getAlgorithm(), то там GOST3410DH_2012_256, а если посмотреть certificate.getSigAlgName(), то там GOST3411_2012_256withGOST3410_2012_256.<br /><br />Но, что с этим делать, я вообще сообразить не могу. Буду благодарен за подсказку, куда копать, что читать, что вообще происходит))</td></tr></table>