Я пытаюсь подписать счет для администрации Испании sh, используя xades4j. Они предоставляют онлайновую проверку для подписанного xml, и только один шаг общей проверки завершается неудачей:
Step: Checks if the signature policy is correct Result: Unknown policy self:policy/general
Step: Checks if the signature policy is correct
Result: Unknown policy self:policy/general
Другие этапы, такие как целостность и статус сертификата, в порядке.
Мне кажется, что я сам: policy / general - это какой-то заполнитель в библиотеке xades4j, который я должен каким-то образом переопределить?
Сейчас я использую этот код для политики
SignaturePolicyInfoProvider policyInfoProvider = new SignaturePolicyInfoProvider() { String FACTURAE_URL = "http://www.facturae.es/politica_de_firma_formato_facturae/politica_de_firma_formato_facturae_v3_1.pdf"; public SignaturePolicyBase getSignaturePolicy() { InputStream is = null; try { URL url = new URL(FACTURAE_URL); URLConnection conn = url.openConnection(); is = conn.getInputStream(); } catch (IOException e) { e.printStackTrace(); } SignaturePolicyBase base = new SignaturePolicyIdentifierProperty(new ObjectIdentifier(FACTURAE_URL),is); return base; } };
Требования приведены в этом онлайн-документе (испанский sh) https://www.facturae.gob.es/politica_de_firma_formato_facturae/politica_de_firma_formato_facturae_v3_1.pdf
Мой xml вывод соответствует:
<xades:SignaturePolicyIdentifier> <xades:SignaturePolicyId> <xades:SigPolicyId> <xades:Identifier>http://www.facturae.es/politica_de_firma_formato_facturae/politica_de_firma_formato_facturae_v3_1.pdf</xades:Identifier> </xades:SigPolicyId> <xades:SigPolicyHash> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <ds:DigestValue>2jmj7l5rSw0yVb/vlWAYkK/YBwk=</ds:DigestValue> </xades:SigPolicyHash> </xades:SignaturePolicyId> </xades:SignaturePolicyIdentifier>
Я предполагаю, что сам: policy / general - это какой-то заполнитель в библиотеке xades4j, который я должен каким-то образом переопределить?
Нет такой вещи. Вероятно, это деталь проверяющего приложения.
Я заметил, что URL в тексте вопроса - HTTPS, а в коде - HTTP. Кажется, что позднее перенаправляет на HTTP, но кажется, что URLConnection не следует перенаправлениям, когда протоколы отличаются .
URLConnection
Попробуйте использовать окончательный HTTPS URL в вашем коде.