Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Владимир Карсанов  
#1 Оставлено : 18 октября 2021 г. 14:45:20(UTC)
Владимир Карсанов

Статус: Новичок

Группы: Участники
Зарегистрирован: 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.

Но, что с этим делать, я вообще сообразить не могу. Буду благодарен за подсказку, куда копать, что читать, что вообще происходит))
Offline Евгений Афанасьев  
#2 Оставлено : 18 октября 2021 г. 15:13:55(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,540
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Здравствуйте.
Приложите сертификат и приведите кусок кода создания подписи с именами алгоритмов.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Владимир Карсанов оставлено 18.10.2021(UTC)
Offline Владимир Карсанов  
#3 Оставлено : 18 октября 2021 г. 15:48:51(UTC)
Владимир Карсанов

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: удалил ссыль на сертификат, потому что так сказало руководство))

Offline Владимир Карсанов  
#4 Оставлено : 18 октября 2021 г. 18:33:16(UTC)
Владимир Карсанов

Статус: Новичок

Группы: Участники
Зарегистрирован: 18.10.2021(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Тему можно закрывать. Спасибо всем, кто уделил ей внимание. Оказалось, что есть такой замечательный джарник как samples-sources.jar. И, как следствие, не было необходимости изобретать велосипед. Немного адаптировав код из XMLSignDoc я таки получил подписанный xml.

Хотя задачу я ещё не допилил, но конкретно этой проблемы больше нет. Ещё раз всем спасибо и хорошего вечера!
Offline Евгений Афанасьев  
#5 Оставлено : 18 октября 2021 г. 18:41:35(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,540
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Добавлю, что указанная ошибка может возникнуть при подписи/проверке_подписи, если алгоритм закрытого/открытого ключа не соответствует алгоритму подписи, например, ключ с алгоритмом ГОСТ 2012 (256) не может быть использован для создания подписи с алгоритмом ГОСТ 2001 (или с его представлением в xml).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.