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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline FedrBodr  
#1 Оставлено : 31 октября 2023 г. 13:45:58(UTC)
FedrBodr

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

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

Приветсвую,
Наш партнер (НБКИ) ожидает от нас некий подписанный xml с присоединенной усиленной электронной подписью PKCS7/DER
У нас есть от партнера сертификаты .cer и .pfx

В качстве примера они прислали команду cryptcp
cryptcp -sign -thumbprint 8a9257818d6439f41af3b2ecba5302b2364495ec -der -nochain -cert -norev "testXmlForSig.xml" "testXmlForSig.xml.sign"

И у меня локально получилось выполнить подписание и снятие подписи
/opt/cprocsp/bin/cryptcp -verify -thumbprint 8a9257818d6439f41af3b2ecba5302b2364495ec -nochain -norev testXmlForSigLast.xml.sign testXmlForSig39.xml

Но когда пробую закодить по одному из примеров с samples-sources (пробовал CMSSign.java) - подпись потом снять тулзой cryptcp не могу.

Чаще всего видел что подпись визуально отличается с самого начала, последний тест который делал, пробовал по примеру CAdESSignature (последнее что нагуглил в форуме)
Пробовал другие алгоритмы подписи и не добавлять цепочку подписанта

Ниже код:
Код:

    fun sign(dataToSign: ByteArray, key: PrivateKey, cert: X509Certificate): ByteArray {
        val cadesSignature = CAdESSignature(true)  // совмещенная подпись
        val signerCertificateChain: List<X509Certificate> = listOf(cert)
        //здесь возникает ошибка
        cadesSignature.addSigner(
            JCP.PROVIDER_NAME, // Имя провайдера, который будет использоваться для создания подписи.
            JCP.GOST_DIGEST_NAME, // Идентификатор алгоритма хэширования, который будет использоваться для вычисления дайджеста (хэша) подписываемых данных.
            JCP.GOST_EL_SIGN_NAME, //JCP.GOST_EL_SIGN_NAME, // Идентификатор алгоритма подписи, который будет использоваться для создания электронной подписи.
            key, // Приватный ключ подписанта.
            signerCertificateChain, // Цепочка сертификатов подписанта.
            CAdESType.CAdES_BES, // Тип CAdES подписи.
            null, // Адрес TSA службы.
            false, // Заверяющая ли подпись.
            null, // Таблица подписанных аттрибутов для добавления в подпись.
            null, // Таблица неподписанных аттрибутов для добавления в подпись.
            null, // CRL (списков отзыва сертификатов), связанных с подписью.
            true // Добавить ли цепочку подписанта в подпись.
        )

        val outSignatureStream = ByteArrayOutputStream()
        cadesSignature.open(outSignatureStream)

        // Передаем на подпись данные (запрос в формате PKCS10).
        cadesSignature.update(dataToSign) // тело запроса

        cadesSignature.close()
        cadesSignature.close()

        // Выводим полученную подпись.
        val signature = outSignatureStream.toByteArray()
        val encoder = Encoder()

        val encodedSignature = encoder.encode(signature)
        println("Attached CAdES-BES [BASE64]:\n$encodedSignature")

        File("/Users/fedrbodr/IdeaProjects/webBankir/crypto/.tmp/test-signed.xml2.sign").writeBytes(signature)
        File("/Users/fedrbodr/IdeaProjects/webBankir/crypto/.tmp/test-signed.xml3.sign").writeText(encodedSignature)

        return signature
    }




Подскажите пожалуйста как мне повторить на java вызов команды cryptcp -sign и может быть есть подходящий пример?(причем как я понял -nochain и -norev можно не использовать)
cryptcp -sign -thumbprint 8a9257818d6439f41af3b2ecba5302b2364495ec -der -nochain -cert -norev "testXmlForSig.xml" "testXmlForSig.xml.sign"


ЗЫ: Кстати я пока писал понял что может быть еще причина в старых версиях библиотек которые используются у нас в проекте - может такое быть? (если что JCP.jar Release-Version: 2.0.44122-A)
Offline Евгений Афанасьев  
#2 Оставлено : 1 ноября 2023 г. 16:28:23(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Приложите полученные подписи для сравнения.
Offline FedrBodr  
#3 Оставлено : 7 ноября 2023 г. 13:28:11(UTC)
FedrBodr

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

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

Приветсвую,

Результат с командной строки

Код:

0�	*�H��
��0�10
*�0�	*�H��
��$���<?xml version="1.0" encoding="windows-1251"?>
<product>
    <prequest>
        <req>
            <PersonReq>
                <first>�������</first>
                <birthDt>1973-04-24</birthDt>
                <placeOfBirth>���. ������ ����������� ����</placeOfBirth>
                <UserID>X101LL000007</UserID>
            </PersonReq>
            <RefReq>
                <product>CHIP</product>
            </RefReq>
            <IOType>B2B</IOType>
        </req>
    </prequest>
</product>���������0��0�-�o�e�<�8�CE�1���0
*�0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
230711060109Z
280711061109Z0��10	*�H��
	support@nbki.ru10	URU10UРегион10U
Город1 0U
ПАО Тестбанк10
U0101BB1)0'U Тестовый НБКИ - 20230f0*�0*�$�*�C�@�H**��Ŷb>jQ<�-"D.�c^d�g���9a<:�@��P�w|mu���j�����q�تט`wv���	0�0U��0Ul	ZO~W�?�R�KC�Z�S^04	+�7'0%*�2	���j���F�������1���0%U%0++*�
0��+��0��06+0�*http://ocsp.cryptopro.ru/ocsp2012/ocsp.srf0W+0�Khttp://cpca20.cryptopro.ru/aia/1d5c58c03feb4407cf888dafae5382bb778ed464.crt0+U$0"�20230711060108Z�20240711060108Z0��U��0��0N�L�J�Hhttp://cdp.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0Q�O�M�Khttp://cpca20.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0��U#��0��\X�?�Dψ���S��w��d������0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)��3���H�F���oM0
*�����<h)�
�TT���T��K��9��	��׃�Ph,����9uW�Z������?CÖ�L��b�7��K6<�J��ns��<͢AY��ñkء�UJq����fk�w	:"�1��m�����# ����1��0��0��0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*����0	*�H��
	1	*�H��
0	*�H��
	1
231107100903Z0/	*�H��
	1" |���Y��x�c�?�3X�g�	�z9����wp0�!*�H��
	/1�0�0�0�0
*� ��ׇ�!um��&�bw�/�k= 8�m��p��0��0�����0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*�@'̽��"���^�ހ�fXU`s�Cq<�K%�7i�h0��i�ÿ�-�/���Z�av��~��J�������



Результат с кода - вот тут - первые строки подписи похожи думаю корректное направление) с другими примерами была совсем подпись непохожа.
При этом не вижу контента исходного

Код:

0�	*�H��
��0�10*��0�	*�H��
����0��0�-�o�e�<�8�CE�1���0
*�0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
230711060109Z
280711061109Z0��10	*�H��
	support@nbki.ru10	URU10UРегион10U
Город1 0U
ПАО Тестбанк10
U0101BB1)0'U Тестовый НБКИ - 20230f0*�0*�$�*�C�@�H**��Ŷb>jQ<�-"D.�c^d�g���9a<:�@��P�w|mu���j�����q�تט`wv���	0�0U��0Ul	ZO~W�?�R�KC�Z�S^04	+�7'0%*�2	���j���F�������1���0%U%0++*�
0��+��0��06+0�*http://ocsp.cryptopro.ru/ocsp2012/ocsp.srf0W+0�Khttp://cpca20.cryptopro.ru/aia/1d5c58c03feb4407cf888dafae5382bb778ed464.crt0+U$0"�20230711060108Z�20240711060108Z0��U��0��0N�L�J�Hhttp://cdp.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0Q�O�M�Khttp://cpca20.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0��U#��0��\X�?�Dψ���S��w��d������0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)��3���H�F���oM0
*�����<h)�
�TT���T��K��9��	��׃�Ph,����9uW�Z������?CÖ�L��b�7��K6<�J��ns��<͢AY��ñkء�UJq����fk�w	:"�1��m�����# ����0��0�$��3���H�F���oM0
*�0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
210131183028Z
360131183028Z0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0��0!*�0	*�*��������.5\4�jUʷ$I�a*��'P���>~�p9��0�xI�#�
7�2]�td:��Z������������
n��.�r,�*)%u��H�
v*J�T@P�fX�<fQ7B:�K`0��&Z�~�>�꼣������0��0U��0U\X�?�Dψ���S��w��d0U�0�0/U (0&0*�dq0*�dq0*�dq0U �0	+�7CA0	+�7�0	+�70*�.���0
*�����D���m�5(�6���@� �����#�aZ�:��j2y@&��}@���a�_&c=���fPn�_��z%�<�{?�L�yt۞�Rl��f/&��q�Ŗ��y�Dxw���s��ez-��&�������1��0��0��0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0*�����0	*�H��
	1	*�H��
0)	*�H��
	4100*���
*�0/	*�H��
	1" �E���I��>!�Xna�f���M�eF'0�!*�H��
	/1�0�0�0�0
*� ��ׇ�!um��&�bw�/�k= 8�m��p��0��0�����0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*�@`a#��ZǓ����%d
9qm�qRv5��~��'֪b9Sg�@S*@�-'t4/��3G��N�p���������
Offline a.shirokov  
#4 Оставлено : 8 ноября 2023 г. 12:15:40(UTC)
a.shirokov

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

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

Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Приложите полученные подписи для сравнения.


Подписи лучше всего анализировать с помощью специальных инструментов, погуглите ASN1 decoder online

Offline Евгений Афанасьев  
#5 Оставлено : 8 ноября 2023 г. 22:42:14(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Похоже, что подпись должна быть совмещенная.
1. У вас CAdESSignature(true) - это отделенная подпись.
2. cadesSignature.addSigner - лучше тут не задавать OID'ы, а оставить null либо использовать версию addSigner без OID'ов.
3. Вы пишете "//здесь возникает ошибка" - какая ошибка?

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

Offline FedrBodr  
#6 Оставлено : 10 ноября 2023 г. 15:41:31(UTC)
FedrBodr

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

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

ПРиветсвую

Цитата:
1. У вас CAdESSignature(true) - это отделенная подпись.

Поправил на CAdESSignature()

Цитата:
2. cadesSignature.addSigner - лучше тут не задавать OID'ы, а оставить null либо использовать версию addSigner без OID'ов.

Убрал в null

Цитата:
3. Вы пишете "//здесь возникает ошибка" - какая ошибка?

Прошу прощения за путанницу - это остаток копипаста - убрал)

В итоге подпись уже похожа, но таки отличается.

Вот код подписи котлин

Код:

fun sign(dataToSign: ByteArray, key: PrivateKey, cert: X509Certificate): ByteArray {
        val cadesSignature = CAdESSignature()  // совмещенная подпись
        val signerCertificateChain: List<X509Certificate> = listOf(cert)

        cadesSignature.addSigner(
            JCP.PROVIDER_NAME, // Имя провайдера, который будет использоваться для создания подписи.
            null, // JCP.GOST_DIGEST_NAME, // Идентификатор алгоритма хэширования, который будет использоваться для вычисления дайджеста (хэша) подписываемых данных.
            null, // JCP.GOST_EL_SIGN_NAME, //JCP.GOST_EL_SIGN_NAME, // Идентификатор алгоритма подписи, который будет использоваться для создания электронной подписи.
            key, // Приватный ключ подписанта.
            signerCertificateChain, // Цепочка сертификатов подписанта.
            CAdESType.CAdES_BES, // Тип CAdES подписи.
            null, // Адрес TSA службы.
            false, // Заверяющая ли подпись.
            null, // Таблица подписанных аттрибутов для добавления в подпись.
            null, // Таблица неподписанных аттрибутов для добавления в подпись.
            null, // CRL (списков отзыва сертификатов), связанных с подписью.
            true // Добавить ли цепочку подписанта в подпись.
        )

        val outSignatureStream = ByteArrayOutputStream()
        cadesSignature.open(outSignatureStream)

        // Передаем на подпись данные
        cadesSignature.update(dataToSign)
        cadesSignature.close()

        val signature = outSignatureStream.toByteArray()
        val encodedSignature = Encoder().encode(signature)

        File("/Users/fedrbodr/IdeaProjects/webBankir/crypto/.tmp/test-signed.xml2.sign").writeBytes(signature)
        File("/Users/fedrbodr/IdeaProjects/webBankir/crypto/.tmp/test-signed.xml3.sign").writeText(encodedSignature)

        return signature
    }


Вот результат подписи
Код:

0	*H
010*�0	*H
$<?xml version="1.0" encoding="windows-1251"?>
<product>
    <prequest>
        <req>
            <PersonReq>
                <first>Алексей</first>
                <birthDt>1973-04-24</birthDt>
                <placeOfBirth>Пос. Ванино Хабаровский край</placeOfBirth>
                <UserID>X101LL000007</UserID>
            </PersonReq>
            <RefReq>
                <product>CHIP</product>
            </RefReq>
            <IOType>B2B</IOType>
        </req>
    </prequest>
</product>������00-oe�<8CE10
*01 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
230711060109Z
280711061109Z010	*H
	support@nbki.ru10	URU10UРегион10U
Город1 0U
ПАО Тестбанк10
U0101BB1)0'U Тестовый НБКИ - 20230f0*0*$�*C�@H**Ŷb>jQ<-"D.c^dg9a<:@Pw|mujqتט`wv	00U0Ul	ZO~W?RKCZS^04	+7'0%*2	jF1�0%U%0++*
0+006+0*http://ocsp.cryptopro.ru/ocsp2012/ocsp.srf0W+0Khttp://cpca20.cryptopro.ru/aia/1d5c58c03feb4407cf888dafae5382bb778ed464.crt0+U$0"20230711060108Z20240711060108Z0U00NLJHhttp://cdp.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0QOMKhttp://cpca20.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0U#0\X?DψSwd01 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)3HFoM0
*�<h)
TTTK9	׃Ph,9uWZ?CÖLb7K6<Jns<͢AYñkءUJqfkw	:"1m# 00$3HFoM0
*01 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
210131183028Z
360131183028Z01 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)00!*0	**�.5\4jUʷ$Ia*'P>~p90xI#
72]td:Z�
n.r,*)%uH
v*JT@PfX<fQ7B:K`0&Z~>꼣00U0U\X?DψSwd0U00/U (0&0*dq0*dq0*dq0U �0	+7CA0	+7�0	+70*.���0
*�Dm5(6@ #aZ:j2y@&}@a_&c=fPn_z%<{?Lyt۞Rlf/&qŖyDxwsez-&��10001 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)oe�<8CE10*�0	*H
	1	*H
0)	*H
	4100*�
*0/	*H
	1" EI>!XnafMeF'0!*H
	/10000
* ׇ!um&bw/k= 8mp0001 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)oe�<8CE10
*@BGM6;<
j@8Pnz\NBqK")D'GW\
:������


И на всякий подпись которая была с командной стоки(эталонная)
Код:

0�	*�H��
��0�10
*�0�	*�H��
��$���<?xml version="1.0" encoding="windows-1251"?>
<product>
    <prequest>
        <req>
            <PersonReq>
                <first>�������</first>
                <birthDt>1973-04-24</birthDt>
                <placeOfBirth>���. ������ ����������� ����</placeOfBirth>
                <UserID>X101LL000007</UserID>
            </PersonReq>
            <RefReq>
                <product>CHIP</product>
            </RefReq>
            <IOType>B2B</IOType>
        </req>
    </prequest>
</product>���������0��0�-�o�e�<�8�CE�1���0
*�0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
230711060109Z
280711061109Z0��10	*�H��
	support@nbki.ru10	URU10UРегион10U
Город1 0U
ПАО Тестбанк10
U0101BB1)0'U Тестовый НБКИ - 20230f0*�0*�$�*�C�@�H**��Ŷb>jQ<�-"D.�c^d�g���9a<:�@��P�w|mu���j�����q�تט`wv���	0�0U��0Ul	ZO~W�?�R�KC�Z�S^04	+�7'0%*�2	���j���F�������1���0%U%0++*�
0��+��0��06+0�*http://ocsp.cryptopro.ru/ocsp2012/ocsp.srf0W+0�Khttp://cpca20.cryptopro.ru/aia/1d5c58c03feb4407cf888dafae5382bb778ed464.crt0+U$0"�20230711060108Z�20240711060108Z0��U��0��0N�L�J�Hhttp://cdp.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0Q�O�M�Khttp://cpca20.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0��U#��0��\X�?�Dψ���S��w��d������0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)��3���H�F���oM0
*�����<h)�
�TT���T��K��9��	��׃�Ph,����9uW�Z������?CÖ�L��b�7��K6<�J��ns��<͢AY��ñkء�UJq����fk�w	:"�1��m�����# ����1��0��0��0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*����0	*�H��
	1	*�H��
0	*�H��
	1
231110115450Z0/	*�H��
	1" |���Y��x�c�?�3X�g�	�z9����wp0�!*�H��
	/1�0�0�0�0
*� ��ׇ�!um��&�bw�/�k= 8�m��p��0��0�����0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*�@γQ��U�,1��"���̮��!�w 5gX3IV}�U�k���@U<6kD��o�6i��^������


ОНа уже более похожа на резултат тулзы командной строки, но таки отличатся - в конце такое ощущение что у меня в коде 2 серта добавилось
А с командной строки 1 - но может это не принципиально для проверки подписи кстати)


Есть идеи куда копать? Может с параметрами еще можно поиграться или алгоритм явно указать другой


А вот подпись сама отличается на вид уже не сильно
[img=https://ibb.co/dm3Bj66]Сверху подпись командной строки, внизу подпись с kotlin кода[/img]

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

Offline Евгений Афанасьев  
#7 Оставлено : 10 ноября 2023 г. 17:53:39(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Вы бы подписи прикрепили в виде файлов.
Последним параметром в addSigner вы указали добавить цепочку, поэтому добавилась цепочка (2 сертификата). Если нужно только сертификат подписи, то нужно до подписи использовать setCertificateStore с передачей ему Store с одним X509CertificateHolder, в котором нужный сертификат.
Offline FedrBodr  
#8 Оставлено : 13 декабря 2023 г. 18:12:07(UTC)
FedrBodr

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

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

Приветствую, благодарю за помощь, отложил задау потом нашел на форуме про добавление сертификатов в траст и локально заработало, и работает у коллеги)

Но во докере на тестовом стенде ругается ошибкой:

Код:
Root certificate: serial 317be3301c1ac17a948cf46a8c4f46f4d, subject CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, issuer CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, not before Sun Jan 31 21:30:28 MSK 2021, not after Thu Jan 31 21:30:28 MSK 2036 is untrusted; error codes: [32] 'Root certificate is in the certificate chain but not in cacerts', 
	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
	at com.webbankir.crypto.main.verticles.VerticleSign$signPKCS7$2.invoke(VerticleSign.kt:253)
	at com.webbankir.crypto.main.verticles.VerticleSign$signPKCS7$2.invoke(VerticleSign.kt:209)
	at io.vertx.kotlin.coroutines.VertxCoroutineKt$awaitBlocking$2.invoke$lambda$0(VertxCoroutine.kt:113)
	at io.vertx.core.impl.ContextBase.lambda$null$0(ContextBase.java:137)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264)
	at io.vertx.core.impl.ContextBase.lambda$executeBlocking$1(ContextBase.java:135)
	at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: Root certificate: serial 317be3301c1ac17a948cf46a8c4f46f4d, subject CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, issuer CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, not before Sun Jan 31 21:30:28 MSK 2021, not after Thu Jan 31 21:30:28 MSK 2036 is untrusted; error codes: [32] 'Root certificate is in the certificate chain but not in cacerts', 
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.validateIfRootCertificateInTrustStoreAndAddToChain(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)



У меня есть .pfx и .cer. cer для подписи использую а вот с .pfx брал цепочку сертификатов чтоб положить в cacerts

ТАк как ошибка была про то что корневой сертификат не добавлен в cacerts
Я добавл все сертификаты которые есть в .pfx в доверенные keytool-ом

Код:

fun loadToTrustAllCertsFromPfx() {
        logger.info("Start extract certs from pfx")
        val cerFilePath = getResourcePath("/testbk2023.pfx")

        val keystorePassword = "111".toCharArray() // replace with actual password
        val fis = FileInputStream(cerFilePath)

        val keyStore = KeyStore.getInstance("PKCS12")
        keyStore.load(fis, keystorePassword)
        fis.close()

        val aliases = keyStore.aliases()
        val certNamesForTrusted = mutableListOf<String>()

        while (aliases.hasMoreElements()) {
            val alias = aliases.nextElement()

            // If the alias refers to a key pair, print the certificate
            if (keyStore.isKeyEntry(alias)) {
                // Get the certificate chain
                val chain = keyStore.getCertificateChain(alias)

                chain.forEachIndexed { index, certificate ->
                    val certName = "$alias-$index.crt"
                    // Write each certificate to a separate file
                    FileOutputStream("$alias-$index.crt").use { fos ->
                        fos.write(certificate.encoded)
                    }
                    certNamesForTrusted.add(certName)
                }
            }
        }

        var file = File("jssecacerts")
        if (!file.isFile()) {
            val SEP = File.separatorChar
            val dir = File(System.getProperty("java.home") + SEP + "lib" + SEP + "security")
            file = File(dir, "jssecacerts")
            if (!file.isFile()) {
                file = File(dir, "cacerts")
            }
        }
        val keystorePath = file.absolutePath

        for (certName in certNamesForTrusted) {
            val cerFilePath = File(certName).absolutePath
            val keytoolProcess = keytoolImport(keystorePath, cerFilePath, certName)

            keytoolProcess.waitFor()
        }
        logger.info("Success put nbki root into trusted")
    }

    private fun keytoolImport(keystorePath: String?, cerFilePath: String?, alias: String): Process {
        val keytoolProcess = ProcessBuilder(
            "keytool", "-import", "-trustcacerts", "-alias", alias,
            "-keystore", keystorePath,
            "-file", cerFilePath,
            "-storepass", "changeit"
        ).apply {
            inheritIO()
        }.start()
        return keytoolProcess
    }


+ добавил параметров (тоже по форуму видел рекомендации)
System.setProperty("com.sun.security.enableCRLDP", "true")
System.setProperty("com.ibm.security.enableCRLDP", "true")
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true");

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