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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Данил Гончаров  
#1 Оставлено : 6 декабря 2024 г. 11:16:47(UTC)
Данил Гончаров

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

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

Написал валидатор PKCS7 ЭЦП с помощью java Bouncy Castle версии 1.70.
Данный код корректно валидирует подпись из .p7s файла если передать его в качестве массива байт.
Теперь решил прикрутить фронтенд, чтобы пользователь мог по нажатию кнопки подписать что-либо, но на бэкенде не получается сформировать CMSSignedData.
Код создания CMSSignedData:
Код:

cmsSignedData = new CMSSignedData(signedData);

где signedData - массив байт с подписью.

лог полученной ошибки:
Код:

2024-12-06T10:51:03.121+03:00 ERROR 23508 --- [cert-validation] [nio-8080-exec-5] c.s.c.controller.TestController          : Ed5804826899754576641 | GU01SP | Failed to create CMSSignedData: Malformed content. | cause: [Malformed content.]


Развернутый код ошибки:
Код:

org.bouncycastle.cms.CMSException: Malformed content.
	at org.bouncycastle.cms.CMSUtils.readContentInfo(Unknown Source)
	at org.bouncycastle.cms.CMSUtils.readContentInfo(Unknown Source)
	at org.bouncycastle.cms.CMSSignedData.<init>(Unknown Source)
	at com.smp.certvalidation.service.P7SVerifier.extractIssuerURLs(P7SVerifier.java:439)
	at com.smp.certvalidation.service.P7SVerifier.getIssuerCertificate(P7SVerifier.java:191)
	at com.smp.certvalidation.service.P7SVerifier.verify(P7SVerifier.java:115)
	at com.smp.certvalidation.controller.TestController.auth(TestController.java:123)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
	at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.lang.IllegalArgumentException: unknown object in getInstance: org.bouncycastle.asn1.DLApplicationSpecific
	at org.bouncycastle.asn1.ASN1Sequence.getInstance(ASN1Sequence.java:105)
	at org.bouncycastle.asn1.cms.ContentInfo.getInstance(Unknown Source)
	... 55 more


Если создать подпись с помощью Крипто Про CSP и передать напрямую в метод класса валидации ошибок нет.
На фронтенде использую API КриптоПро ЭЦП browser plug-in
Код:
    <script src="https://www.cryptopro.ru/sites/default/files/products/cades/cadesplugin_api.js"></script>

Вот сам код:
Код:
   
async function signWithCertificate(cert, challenge) {
        try {
            if (!cert) throw new Error("Certificate is required");
            if (!challenge) throw new Error("Challenge data is required");

            const signer = await cadesplugin.CreateObjectAsync('CAdESCOM.CPSigner');
            await signer.propset_Certificate(cert);
            await signer.propset_CheckCertificate(true); // Проверка сертификата
            signer.propset_Options = CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;

            const oSignedData = await cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
            try {
                await oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
            } catch (err) {
                e = cadesplugin.getLastError(err);
                alert("Не получилось задать encoding. Error: " + e);
                return args[1](e);
            }

            await oSignedData.propset_Content(challenge);

            return await oSignedData.SignCades(signer, cadesplugin.CADESCOM_PKCS7_TYPE, true); 
          } catch (err) {

        } catch (error) {
            console.error("Error during signing:", error);
            throw error;
        }
    }

Так же прикладываю создаваемую подпись в виде строки:
Код:

MIIIfAYJKoZIhvcNAQcCoIIIbTCCCGkCAQExDjAMBggqhQMHAQECAgUAMAsGCSqGSIb3DQEHAaCC
BMwwggTIMIIEdaADAgECAhN8ABd4V5PpGA4vJM1LAAoAF3hXMAoGCCqFAwcBAQMCMIIBCjEYMBYG
BSqFA2QBEg0xMjM0NTY3ODkwMTIzMRowGAYIKoUDA4EDAQESDDAwMTIzNDU2Nzg5MDEvMC0GA1UE
CQwm0YPQuy4g0KHRg9GJ0ZHQstGB0LrQuNC5INCy0LDQuyDQtC4gMTgxCzAJBgNVBAYTAlJVMRkw
FwYDVQQIDBDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxJTAjBgNVBAoM
HNCe0J7QniAi0JrQoNCY0J/QotCeLdCf0KDQniIxOzA5BgNVBAMMMtCi0LXRgdGC0L7QstGL0Lkg
0KPQpiDQntCe0J4gItCa0KDQmNCf0KLQni3Qn9Cg0J4iMB4XDTI0MTExMjA5MjMzOFoXDTI1MDEw
NDEyMzIwMlowGzEZMBcGA1UEAwwQVGVzdCBDZXJ0aWZpY2F0ZTBmMB8GCCqFAwcBAQEBMBMGByqF
AwICJAAGCCqFAwcBAQICA0MABEDbcyXSFFiszHyN3p2BItry3wZgkWSYTeEcbI41F2CEGfGrl5ci
Aj19NkYuHIKHZ18v01GuEuDowMMqkf6WxR9Mo4ICmDCCApQwDgYDVR0PAQH/BAQDAgTwMB0GA1Ud
DgQWBBTvlCtJoRmMPs6Pl6Giv5M2FWYS0jAfBgNVHSMEGDAWgBTkwICW5LR4NBI8Irl1zZYgQzCw
IzCCARIGA1UdHwSCAQkwggEFMIIBAaCB/qCB+4aBtmh0dHA6Ly90ZXN0Z29zdDIwMTIuY3J5cHRv
cHJvLnJ1L0NlcnRFbnJvbGwvITA0MjIhMDQzNSEwNDQxITA0NDIhMDQzZSEwNDMyITA0NGIhMDQz
OSUyMCEwNDIzITA0MjYlMjAhMDQxZSEwNDFlITA0MWUlMjAhMDAyMiEwNDFhITA0MjAhMDQxOCEw
NDFmITA0MjIhMDQxZS0hMDQxZiEwNDIwITA0MWUhMDAyMigxMCkuY3JshkBodHRwOi8vdGVzdGdv
c3QyMDEyLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL3Rlc3Rnb3N0MjAxMigxMCkuY3JsMIIBKgYI
KwYBBQUHAQEEggEcMIIBGDA/BggrBgEFBQcwAYYzaHR0cDovL3Rlc3Rnb3N0MjAxMi5jcnlwdG9w
cm8ucnUvb2NzcDIwMTJnL29jc3Auc3JmMEEGCCsGAQUFBzABhjVodHRwOi8vdGVzdGdvc3QyMDEy
LmNyeXB0b3Byby5ydS9vY3NwMjAxMmdzdC9vY3NwLnNyZjBMBggrBgEFBQcwAoZAaHR0cDovL3Rl
c3Rnb3N0MjAxMi5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC90ZXN0Z29zdDIwMTIoMTApLmNydDBE
BggrBgEFBQcwAoY4aHR0cDovL3Rlc3Rnb3N0MjAxMi5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC90
ZXN0cm9vdC5wN2IwCgYIKoUDBwEBAwIDQQBMuMIx4VhYd/FMBpz6YGubHeSGyORMFeb+p8gnf9x5
0DEPrhBnqJZ+82Car+PTkMMsBzGX+/chOYag0OT4YRLMMYIDdTCCA3ECAQEwggEjMIIBCjEYMBYG
BSqFA2QBEg0xMjM0NTY3ODkwMTIzMRowGAYIKoUDA4EDAQESDDAwMTIzNDU2Nzg5MDEvMC0GA1UE
CQwm0YPQuy4g0KHRg9GJ0ZHQstGB0LrQuNC5INCy0LDQuyDQtC4gMTgxCzAJBgNVBAYTAlJVMRkw
FwYDVQQIDBDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxJTAjBgNVBAoM
HNCe0J7QniAi0JrQoNCY0J/QotCeLdCf0KDQniIxOzA5BgNVBAMMMtCi0LXRgdGC0L7QstGL0Lkg
0KPQpiDQntCe0J4gItCa0KDQmNCf0KLQni3Qn9Cg0J4iAhN8ABd4V5PpGA4vJM1LAAoAF3hXMAwG
CCqFAwcBAQICBQCgggHnMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8X
DTI0MTIwNjA4MDYyOVowLwYJKoZIhvcNAQkEMSIEID+wcApBzm5BQTunZPmL8hNbpt7VFr6i+uhC
nMW91G1tMIIBegYLKoZIhvcNAQkQAi8xggFpMIIBZTCCAWEwggFdMAoGCCqFAwcBAQICBCCE89i/
yPgaOKcTrsxdk3e1ITNaI9rwCSYIJJ7+MZxM2DCCASswggESpIIBDjCCAQoxGDAWBgUqhQNkARIN
MTIzNDU2Nzg5MDEyMzEaMBgGCCqFAwOBAwEBEgwwMDEyMzQ1Njc4OTAxLzAtBgNVBAkMJtGD0Lsu
INCh0YPRidGR0LLRgdC60LjQuSDQstCw0Lsg0LQuIDE4MQswCQYDVQQGEwJSVTEZMBcGA1UECAwQ
0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMSUwIwYDVQQKDBzQntCe0J4g
ItCa0KDQmNCf0KLQni3Qn9Cg0J4iMTswOQYDVQQDDDLQotC10YHRgtC+0LLRi9C5INCj0KYg0J7Q
ntCeICLQmtCg0JjQn9Ci0J4t0J/QoNCeIgITfAAXeFeT6RgOLyTNSwAKABd4VzAKBggqhQMHAQEB
AQRAUz1PItX3cyiYY16L5bQ88Mb8NXYvlZomDdyGvbgP1GMn/KEuBMPYK0QtB10ZQZbpdT7jC+se
Qiv/99zFWaIf2w==

При проверке созданной подписи на сайте: https://dss.cryptopro.ru/verify/#/signature таких ошибок не получаю. Единственное что сайт ругается на то, что не удается построить цепочку сертификатов, но это нормально т.к. сертификат подписи тестовый.
Прошу подсказать в чем может быть проблема, подозреваю что как-то неправильно формирую подпись на фронтенде, пробовал разные способы но все тщетно.
Offline Андрей *  
#2 Оставлено : 6 декабря 2024 г. 12:40:31(UTC)
Андрей *

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

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

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
Здравствуйте.

Цитата:
Если создать подпись с помощью Крипто Про CSP и передать напрямую в метод класса валидации ошибок нет.
На фронтенде использую API КриптоПро ЭЦП browser plug-in


Во всех случаях подпись формирует криптопровайдер.

в p7s что? der (бинарные данные)?
Техническую поддержку оказываем тут
Наша база знаний
Offline Данил Гончаров  
#3 Оставлено : 10 декабря 2024 г. 10:36:55(UTC)
Данил Гончаров

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

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

В p7s данные в формате DER.

Отредактировано пользователем 10 декабря 2024 г. 10:37:44(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.