Отсутствует тип CountersignedSignature в xades4j

Я заметил, что в моем документе, подписанном с помощью xades4j, нет Type="..CountersignedSignature" в ссылке на подписанную подпись. То же самое в модульном тесте xades4j в document.signed.bes.cs.xml.

С другой стороны, в xades4j.properties.CounterSignatureProperty я вижу следующее определенное свойство:

public String COUNTER_SIGNATURE_TYPE_URI = "http://uri.etsi.org/01903#CountersignedSignature";

Как я могу заставить xades использовать это свойство? Если атрибут type отсутствует, у меня возникают проблемы с проверкой документа в другом стороннем программном обеспечении.

Я использовал код, написанный в SignerBESTest.

Document doc = getTestDocument();
Element elemToSign = doc.getDocumentElement();

XadesBesSigningProfile profile = new XadesBesSigningProfile(keyingProviderMy);
final XadesSigner counterSigner = profile.newSigner();
profile.withSignaturePropertiesProvider(new SignaturePropertiesProvider() {
@Override
public void provideProperties(final SignaturePropertiesCollector signedPropsCol) {
    signedPropsCol.addCounterSignature(new CounterSignatureProperty(counterSigner));
    signedPropsCol.setSignerRole(new SignerRoleProperty("CounterSignature"));
}
});
final XadesSignatureFormatExtender extender = new XadesFormatExtenderProfile().getFormatExtender();

final List<UnsignedSignatureProperty> unsignedProps = new ArrayList<UnsignedSignatureProperty>();
unsignedProps.add(new CounterSignatureProperty(counterSigner));

org.apache.xml.security.Init.init();
final Element sigElem = (Element) documentSource.getElementsByTagName("ds:Signature").item(0);
final XMLSignature xmlSig = new XMLSignature(sigElem, documentSource.getBaseURI());
extender.enrichSignature(xmlSig, new UnsignedProperties(unsignedProps));

Заранее спасибо!


Edit1: я добавлю, что знаю решение, изменив исходники xades4j, но меня больше интересует решение, которое я могу применить только в своем исходном коде.


person Waldemar Masilunas    schedule 30.04.2014    source источник


Ответы (1)


Спецификация XAdES определяет два механизма управления подписями счетчиков:

  1. Используйте атрибут Type для произвольных подписей
  2. Используйте свойство CounterSignature, которое содержит встречную подпись, которая на самом деле является обернутой подписью (содержащейся в исходной).

XAdES4j использует второй подход, поэтому не включает атрибут Type. Кроме того, нет никакого способа обеспечить его присутствие в API. Тем не менее, я могу проверить, легко ли включить атрибут.

person lgoncalves    schedule 05.05.2014
comment
Если речь идет об изменении xades4j, вы можете добавить это, изменив src/main/java/xades4j/production/DataGenCounterSig.java: sigValueRef = sigValueRef.withType(CounterSignatureProperty.COUNTER_SIGNATURE_TYPE_URI); (speedyshare.com/Cgc2j/DataGenCounterSig.java). Я должен был сделать это в любом случае, но это жестко запрограммировано. С другой стороны, этот атрибут является необязательным, поэтому добавление Type всегда не должно ничего ломать. - person Waldemar Masilunas; 07.05.2014
comment
Да, это оно. Атрибут необязателен, потому что он избыточен, но это не должно быть проблемой. Я обновлю исходный код xades4j. - person lgoncalves; 07.05.2014