Добрый день.
Цитата:Его реализацию (если имеется) вроде можно зарегистрировать отдельно.
есть пример как можно зарегистрировать ? И возможно зарегистрировать без xades4j ?
Цитата:Попробуйте использовать xades4j более старой версии.
Установил минимально допустимую версию по xmlsec = xades4j 1.5.1, и теперь в момент создания xades подписи добавились теги:
Signature -> KeyInfo -> X509Data -> X509IssuerSerial и
Signature -> KeyInfo -> X509Data -> X509SubjectName
раньше был только
Signature -> KeyInfo -> X509Data -> X509Certificate
И теперь проверка не проходит, так как приоритет проверяемых тегов в KeyInfo сдвинулся на X509IssuerSerial (вместо X509Certificate), где в процессе сравнения issuer и cert.getIssuerX500Principal возникает ошибка Could not determine unique target subject.
Цитата:2022-06-27 11:12:18.538 WARN 7744 --- [nio-8888-exec-1] b.r.c.c.h.CustomRestExceptionHandler : The available certificate selector didn't match any certificates
xades4j.providers.CannotSelectCertificateException: The available certificate selector didn't match any certificates
at xades4j.providers.impl.PKIXCertificateValidationProvider.validate(PKIXCertificateValidationProvider.java:263) ~[xades4j-1.5.1.jar:?]
at xades4j.verification.XadesVerifierImpl.verify(XadesVerifierImpl.java:186) ~[xades4j-1.5.1.jar:?]
at bars.rtn.crypto.services.CryptoService.xmlVerify(CryptoService.java:462) ~[classes/:?]
Caused by: java.security.InvalidAlgorithmParameterException: Could not determine unique target subject
at sun.security.provider.certpath.PKIX$BuilderParams.getTargetSubject(PKIX.java:289) ~[?:?]
at sun.security.provider.certpath.PKIX$BuilderParams.checkParams(PKIX.java:236) ~[?:?]
at sun.security.provider.certpath.PKIX$BuilderParams.<init>(PKIX.java:224) ~[?:?]
at sun.security.provider.certpath.PKIX.checkBuilderParams(PKIX.java:70) ~[?:?]
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:125) ~[?:?]
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) ~[?:?]
at xades4j.providers.impl.PKIXCertificateValidationProvider.validate(PKIXCertificateValidationProvider.java:253) ~[xades4j-1.5.1.jar:?]
Ошибка возникает так как атрибуты в ИНН и ОГРН в сертификате указаны с типом NumericString (#12), а при получении атрибута из строки Signature -> KeyInfo -> X509Data -> X509IssuerSerial -> X509IssuerName (OID.1.2.643.100.1=1037700085444, OID.1.2.643.100.4=7717107991) используется тип PrintableString (#13)
Цитата:cn=тестовый подчиненный уц ооо \"крипто-про\" гост 2012 (уц 2.0),o=ооо \"крипто-про\",street=ул. сущёвский вал д. 18,l=москва,st=77 москва,c=ru,1.2.643.100.1=#130d31303337373030303835343434,1.2.840.113549.1.9.1=#1611696e666f4063727970746f70726f2e7275,1.2.643.100.4=#130a37373137313037393931
cn=тестовый подчиненный уц ооо \"крипто-про\" гост 2012 (уц 2.0),o=ооо \"крипто-про\",street=ул. сущёвский вал д. 18,l=москва,st=77 москва,c=ru,1.2.643.100.1=#120d31303337373030303835343434,1.2.840.113549.1.9.1=#1611696e666f4063727970746f70726f2e7275,1.2.643.100.4=#120a37373137313037393931
Указать NumericString для проверки у меня не получилось.
При создании можно добавить в профиль не включать эти теги new XadesBesSigningProfile(keyingProvider).withBasicSignatureOptions(new BasicSignatureOptions().includeIssuerSerial(false).includeSubjectName(false))
и тогда всё работает, но есть риск, что поступит подпись, которую не мы создали и там будут эти теги.
Возможно, я не первый, кто столкнулся с этой проблемой, просьба написать возможные варианты решения.
Отредактировано пользователем 28 июня 2022 г. 8:32:26(UTC)
| Причина: Не указана