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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Илья Кузьмин  
#1 Оставлено : 15 сентября 2020 г. 15:09:39(UTC)
Илья Кузьмин

Статус: Участник

Группы: Участники
Зарегистрирован: 17.06.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 2 раз
Здравствуйте!
Возник вопрос по поводу сертификатов в CAdESSignature

для этой подписи можно задать сертификаты с помощью setCertificateStore и также добавить сертификат в addSigner
Как я понимаю с помощью двух этих параметров для подписанта создается цепочка. То есть в setCertificateStore нужно передавать корневые УЦ а для подписанта его личный? Если так, то откуда берутся сертификаты если не передавать их в setCertificateStore? Будут ли они браться с cacerts и из андроидного AndroidCACerts? или эти сертификаты в любом случае будут использоваться для проверки?
Offline Евгений Афанасьев  
#2 Оставлено : 16 сентября 2020 г. 11:22:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
Здравствуйте.
С помощью setCertificateStore можно добавить в подпись любые сертификаты. С помощью параметра addCertificateChain в addSigner можно добавить построенную цепочку сертификатов подписанта в подпись.
Нужные корневые сертификаты должны быть либо установлены в security/cacerts внутри приложения (файл создается при инициализации CSPConfig.init и содержит порядка 30 корневых сертификатов, cacerts - хранилище формата BKS с паролем changeit, в ACSPClientApp есть пример работы с ним), либо руками в хранилище доверенных сертификатов пользователя в устройстве: ориентировочно "Настройки->Безопасность->Доверенные сертификаты" (т.е. AndroidCAStore). CAdES/XAdES ищет корневые и в cacerts, и в AndroidCAStore.

Отредактировано пользователем 16 сентября 2020 г. 11:23:10(UTC)  | Причина: Не указана

Offline Илья Кузьмин  
#3 Оставлено : 16 сентября 2020 г. 11:54:25(UTC)
Илья Кузьмин

Статус: Участник

Группы: Участники
Зарегистрирован: 17.06.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
С помощью setCertificateStore можно добавить в подпись любые сертификаты. С помощью параметра addCertificateChain в addSigner можно добавить построенную цепочку сертификатов подписанта в подпись.
Нужные корневые сертификаты должны быть либо установлены в security/cacerts внутри приложения (файл создается при инициализации CSPConfig.init и содержит порядка 30 корневых сертификатов, cacerts - хранилище формата BKS с паролем changeit, в ACSPClientApp есть пример работы с ним), либо руками в хранилище доверенных сертификатов пользователя в устройстве: ориентировочно "Настройки->Безопасность->Доверенные сертификаты" (т.е. AndroidCAStore). CAdES/XAdES ищет корневые и в cacerts, и в AndroidCAStore.


То есть возможности поменять сторы для проверки подписи нет? Какая практическая ценность добавления любых сертификатов? Для подписанта я представляю а вот вообще любых не совсем
Offline Евгений Афанасьев  
#4 Оставлено : 16 сентября 2020 г. 13:44:56(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
Автор: Илья Кузьмин Перейти к цитате
То есть возможности поменять сторы для проверки подписи нет?

Да. Аналогично компоненты CSP CAdES-подписи используют фиксированные ROOT, CA, MY.


Автор: Илья Кузьмин Перейти к цитате
Какая практическая ценность добавления любых сертификатов?

Эта функция появилась раньше параметра для включения цепочки в подпись. Например, вам надо добавить промежуточные сертификаты, или сертификаты для службы штампов.

Отредактировано пользователем 16 сентября 2020 г. 13:46:17(UTC)  | Причина: Не указана

Offline Илья Кузьмин  
#5 Оставлено : 16 сентября 2020 г. 13:57:36(UTC)
Илья Кузьмин

Статус: Участник

Группы: Участники
Зарегистрирован: 17.06.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Автор: Илья Кузьмин Перейти к цитате
То есть возможности поменять сторы для проверки подписи нет?

Да. Аналогично компоненты CSP CAdES-подписи используют фиксированные ROOT, CA, MY.


Автор: Илья Кузьмин Перейти к цитате
Какая практическая ценность добавления любых сертификатов?

Эта функция появилась раньше параметра для включения цепочки в подпись. Например, вам надо добавить промежуточные сертификаты, или сертификаты для службы штампов.


А если не добавлять промежуточные сертификаты или сертификаты служб штампов то что будет использоваться для проверки?
Offline Евгений Афанасьев  
#6 Оставлено : 16 сентября 2020 г. 14:46:02(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
Вообще, для проверки подписи используются сертификаты:
* из подписи (если есть)
* из verify(<certs>) метода (если их туда передали)
* из хранилища доверенных корневых сертификатов (cacerts и AndroidCAStore) с разделением на корневые и другие.
Если подпись - X Long Type 1, то полный комплект сертификатов будет в атрибутах подписи.

Отредактировано пользователем 16 сентября 2020 г. 14:46:46(UTC)  | Причина: Не указана

Offline Илья Кузьмин  
#7 Оставлено : 25 сентября 2020 г. 14:26:10(UTC)
Илья Кузьмин

Статус: Участник

Группы: Участники
Зарегистрирован: 17.06.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 2 раз
Возникла проблема небольшая с CADES.Почему то при проверке подписи у подписанта пустой сертификат
Так мы создаем подпись
Цитата:
val cAdESSignature = CAdESSignature(true)
cAdESSignature.addSigner(JCSP.PROVIDER_NAME, null,
null, keys[0], certificates.toList(), CAdESType.CAdES_BES, null, false)
val signatureStream = ByteArrayOutputStream()
cAdESSignature.open(signatureStream)
cAdESSignature.update(data)
cAdESSignature.close()
signatureStream.close()
return signatureStream.toByteArray()


А так берем сертификаты

Цитата:
val cAdESSignature = CAdESSignature(cms, null, CAdESType.CAdES_BES)
return listOf(cAdESSignature.getCAdESSignerInfo(0).signerCertificate)


Я посмотрел ASN который создается при этом, вроде там сертификат есть внутри

Цитата:
SEQUENCE {
261 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4)
: (PKCS #9)
272 34: SET {
274 32: OCTET STRING
: 37 70 9E 7B 91 18 F4 63 96 14 F7 3B B9 A9 8E 6F
: 77 A7 DB 2F 0F B1 0D D3 FA C6 40 CF 26 AC 94 90
: }
: }
308 230: SEQUENCE {
311 11: OBJECT IDENTIFIER
: signingCertificateV2 (1 2 840 113549 1 9 16 2 47)
: (S/MIME Authenticated Attributes)
324 214: SET {
327 211: SEQUENCE {
330 208: SEQUENCE {
333 205: SEQUENCE {
336 10: SEQUENCE {
338 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 2'
: }
348 32: OCTET STRING
: 21 71 1B 3D AE 55 EE 56 45 AF C2 55 0C AD DE 41
: C5 72 A5 7E 95 F5 5A 4D 05 77 D5 03 AC 9C D2 1F
382 156: SEQUENCE {
385 132: SEQUENCE {
388 129: [4] {
391 127: SEQUENCE {
393 35: SET {
395 33: SEQUENCE {
397 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
: (PKCS #9. Deprecated, use an altName extension instead)
408 20: IA5String 'support@cryptopro.ru'
: }
: }
430 11: SET {
432 9: SEQUENCE {
434 3: OBJECT IDENTIFIER
: countryName (2 5 4 6)
: (X.520 DN component)
439 2: PrintableString 'RU'
: }
: }
443 15: SET {
445 13: SEQUENCE {
447 3: OBJECT IDENTIFIER
: localityName (2 5 4 7)
: (X.520 DN component)
452 6: PrintableString 'Moscow'
: }
: }
460 23: SET {
462 21: SEQUENCE {
464 3: OBJECT IDENTIFIER
: organizationName (2 5 4 10)
: (X.520 DN component)
469 14: PrintableString 'CRYPTO-PRO LLC'
: }
: }
485 33: SET {
487 31: SEQUENCE {
489 3: OBJECT IDENTIFIER
: commonName (2 5 4 3)
: (X.520 DN component)
494 24: PrintableString 'CRYPTO-PRO Test Center 2'
: }
: }
: }
: }
: }
520 19: INTEGER
: 12 00 49 DC 92 06 1E D7 9F 34 B1 C0 CF 00 01 00
: 49 DC 92
: }
: }
: }
: }
: }
: }
: }
541 10: SEQUENCE {
543 8: OBJECT IDENTIFIER '1 2 643 7 1 1 1 1'
: }
553 64: OCTET STRING
: E0 F1 1C C4 C4 75 87 53 B1 A1 77 3B F1 59 DB 18
: DB 8D 55 32 46 BA 1F A2 AB 95 94 C8 71 41 56 54
: D7 0C 04 E8 E2 65 37 D2 DE 88 24 7D 2C CB A0 4B
: B4 9A 93 C2 AB F8 3C 00 73 7E 08 CD 01 23 C2 27
: }
: }
: }
: }


Подскажите, в чем может быть проблема?
Offline Илья Кузьмин  
#8 Оставлено : 25 сентября 2020 г. 15:31:45(UTC)
Илья Кузьмин

Статус: Участник

Группы: Участники
Зарегистрирован: 17.06.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 2 раз
Автор: Илья Кузьмин Перейти к цитате
Возникла проблема небольшая с CADES.Почему то при проверке подписи у подписанта пустой сертификат
Так мы создаем подпись
Цитата:
val cAdESSignature = CAdESSignature(true)
cAdESSignature.addSigner(JCSP.PROVIDER_NAME, null,
null, keys[0], certificates.toList(), CAdESType.CAdES_BES, null, false)
val signatureStream = ByteArrayOutputStream()
cAdESSignature.open(signatureStream)
cAdESSignature.update(data)
cAdESSignature.close()
signatureStream.close()
return signatureStream.toByteArray()


А так берем сертификаты

Цитата:
val cAdESSignature = CAdESSignature(cms, null, CAdESType.CAdES_BES)
return listOf(cAdESSignature.getCAdESSignerInfo(0).signerCertificate)


Я посмотрел ASN который создается при этом, вроде там сертификат есть внутри

Цитата:
SEQUENCE {
261 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4)
: (PKCS #9)
272 34: SET {
274 32: OCTET STRING
: 37 70 9E 7B 91 18 F4 63 96 14 F7 3B B9 A9 8E 6F
: 77 A7 DB 2F 0F B1 0D D3 FA C6 40 CF 26 AC 94 90
: }
: }
308 230: SEQUENCE {
311 11: OBJECT IDENTIFIER
: signingCertificateV2 (1 2 840 113549 1 9 16 2 47)
: (S/MIME Authenticated Attributes)
324 214: SET {
327 211: SEQUENCE {
330 208: SEQUENCE {
333 205: SEQUENCE {
336 10: SEQUENCE {
338 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 2'
: }
348 32: OCTET STRING
: 21 71 1B 3D AE 55 EE 56 45 AF C2 55 0C AD DE 41
: C5 72 A5 7E 95 F5 5A 4D 05 77 D5 03 AC 9C D2 1F
382 156: SEQUENCE {
385 132: SEQUENCE {
388 129: [4] {
391 127: SEQUENCE {
393 35: SET {
395 33: SEQUENCE {
397 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
: (PKCS #9. Deprecated, use an altName extension instead)
408 20: IA5String 'support@cryptopro.ru'
: }
: }
430 11: SET {
432 9: SEQUENCE {
434 3: OBJECT IDENTIFIER
: countryName (2 5 4 6)
: (X.520 DN component)
439 2: PrintableString 'RU'
: }
: }
443 15: SET {
445 13: SEQUENCE {
447 3: OBJECT IDENTIFIER
: localityName (2 5 4 7)
: (X.520 DN component)
452 6: PrintableString 'Moscow'
: }
: }
460 23: SET {
462 21: SEQUENCE {
464 3: OBJECT IDENTIFIER
: organizationName (2 5 4 10)
: (X.520 DN component)
469 14: PrintableString 'CRYPTO-PRO LLC'
: }
: }
485 33: SET {
487 31: SEQUENCE {
489 3: OBJECT IDENTIFIER
: commonName (2 5 4 3)
: (X.520 DN component)
494 24: PrintableString 'CRYPTO-PRO Test Center 2'
: }
: }
: }
: }
: }
520 19: INTEGER
: 12 00 49 DC 92 06 1E D7 9F 34 B1 C0 CF 00 01 00
: 49 DC 92
: }
: }
: }
: }
: }
: }
: }
541 10: SEQUENCE {
543 8: OBJECT IDENTIFIER '1 2 643 7 1 1 1 1'
: }
553 64: OCTET STRING
: E0 F1 1C C4 C4 75 87 53 B1 A1 77 3B F1 59 DB 18
: DB 8D 55 32 46 BA 1F A2 AB 95 94 C8 71 41 56 54
: D7 0C 04 E8 E2 65 37 D2 DE 88 24 7D 2C CB A0 4B
: B4 9A 93 C2 AB F8 3C 00 73 7E 08 CD 01 23 C2 27
: }
: }
: }
: }


Подскажите, в чем может быть проблема?


Хотя я ошибся, там сертификата нет, хотя добавляется
Offline Илья Кузьмин  
#9 Оставлено : 28 сентября 2020 г. 13:22:45(UTC)
Илья Кузьмин

Статус: Участник

Группы: Участники
Зарегистрирован: 17.06.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 2 раз
Автор: Илья Кузьмин Перейти к цитате
Автор: Илья Кузьмин Перейти к цитате
Возникла проблема небольшая с CADES.Почему то при проверке подписи у подписанта пустой сертификат
Так мы создаем подпись
Цитата:
val cAdESSignature = CAdESSignature(true)
cAdESSignature.addSigner(JCSP.PROVIDER_NAME, null,
null, keys[0], certificates.toList(), CAdESType.CAdES_BES, null, false)
val signatureStream = ByteArrayOutputStream()
cAdESSignature.open(signatureStream)
cAdESSignature.update(data)
cAdESSignature.close()
signatureStream.close()
return signatureStream.toByteArray()


А так берем сертификаты

Цитата:
val cAdESSignature = CAdESSignature(cms, null, CAdESType.CAdES_BES)
return listOf(cAdESSignature.getCAdESSignerInfo(0).signerCertificate)


Я посмотрел ASN который создается при этом, вроде там сертификат есть внутри

Цитата:
SEQUENCE {
261 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4)
: (PKCS #9)
272 34: SET {
274 32: OCTET STRING
: 37 70 9E 7B 91 18 F4 63 96 14 F7 3B B9 A9 8E 6F
: 77 A7 DB 2F 0F B1 0D D3 FA C6 40 CF 26 AC 94 90
: }
: }
308 230: SEQUENCE {
311 11: OBJECT IDENTIFIER
: signingCertificateV2 (1 2 840 113549 1 9 16 2 47)
: (S/MIME Authenticated Attributes)
324 214: SET {
327 211: SEQUENCE {
330 208: SEQUENCE {
333 205: SEQUENCE {
336 10: SEQUENCE {
338 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 2'
: }
348 32: OCTET STRING
: 21 71 1B 3D AE 55 EE 56 45 AF C2 55 0C AD DE 41
: C5 72 A5 7E 95 F5 5A 4D 05 77 D5 03 AC 9C D2 1F
382 156: SEQUENCE {
385 132: SEQUENCE {
388 129: [4] {
391 127: SEQUENCE {
393 35: SET {
395 33: SEQUENCE {
397 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
: (PKCS #9. Deprecated, use an altName extension instead)
408 20: IA5String 'support@cryptopro.ru'
: }
: }
430 11: SET {
432 9: SEQUENCE {
434 3: OBJECT IDENTIFIER
: countryName (2 5 4 6)
: (X.520 DN component)
439 2: PrintableString 'RU'
: }
: }
443 15: SET {
445 13: SEQUENCE {
447 3: OBJECT IDENTIFIER
: localityName (2 5 4 7)
: (X.520 DN component)
452 6: PrintableString 'Moscow'
: }
: }
460 23: SET {
462 21: SEQUENCE {
464 3: OBJECT IDENTIFIER
: organizationName (2 5 4 10)
: (X.520 DN component)
469 14: PrintableString 'CRYPTO-PRO LLC'
: }
: }
485 33: SET {
487 31: SEQUENCE {
489 3: OBJECT IDENTIFIER
: commonName (2 5 4 3)
: (X.520 DN component)
494 24: PrintableString 'CRYPTO-PRO Test Center 2'
: }
: }
: }
: }
: }
520 19: INTEGER
: 12 00 49 DC 92 06 1E D7 9F 34 B1 C0 CF 00 01 00
: 49 DC 92
: }
: }
: }
: }
: }
: }
: }
541 10: SEQUENCE {
543 8: OBJECT IDENTIFIER '1 2 643 7 1 1 1 1'
: }
553 64: OCTET STRING
: E0 F1 1C C4 C4 75 87 53 B1 A1 77 3B F1 59 DB 18
: DB 8D 55 32 46 BA 1F A2 AB 95 94 C8 71 41 56 54
: D7 0C 04 E8 E2 65 37 D2 DE 88 24 7D 2C CB A0 4B
: B4 9A 93 C2 AB F8 3C 00 73 7E 08 CD 01 23 C2 27
: }
: }
: }
: }


Подскажите, в чем может быть проблема?


Хотя я ошибся, там сертификата нет, хотя добавляется


Я увидел проблему, кажется нужно было поменять провайдер на JCP. Но после этой замены я начал получать ещё более странную ошибку

Цитата:
val cAdESSignature = CAdESSignature(true)
cAdESSignature.addSigner(JCP.PROVIDER_NAME, keys[0], certificates, CAdESType.CAdES_BES, null, false)
val signatureStream = ByteArrayOutputStream()
cAdESSignature.open(signatureStream)
cAdESSignature.update(data)
cAdESSignature.close()


Ошибка
Цитата:
W/JCP: ru.CryptoPro.JCP.Sign.cl_0.engineSign :: Unsupported method.
java.security.SignatureException: Unsupported method.
at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source:4)
at ru.CryptoPro.JCP.Sign.cl_0.engineSign(Unknown Source:11)
at java.security.Signature.sign(Signature.java:739)
at ru.CryptoPro.CAdES.tools.verifier.SignatureOutputStream.sign(Unknown Source:2)
at ru.CryptoPro.CAdES.tools.verifier.GostContentSignerProvider.getSignature(Unknown Source:2)
at org.bouncycastle.cms.SignerInfoGenerator.generate(Unknown Source:103)
at org.bouncycastle.cms.CMSSignedDataStreamGenerator$CmsSignedDataOutputStream.close(Unknown Source:118)
at ru.CryptoPro.CAdES.cl_1.close(Unknown Source:12)



Offline Евгений Афанасьев  
#10 Оставлено : 28 сентября 2020 г. 17:20:51(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
Здравствуйте.
Код:

cAdESSignature.addSigner(JCSP.PROVIDER_NAME // <- в примере выше стоит JCP, хотя был JCSP

и
Код:

AdESConfig.setDefaultProvider(JCSP.PROVIDER_NAME...

в начале.
Offline Илья Кузьмин  
#11 Оставлено : 28 сентября 2020 г. 19:41:46(UTC)
Илья Кузьмин

Статус: Участник

Группы: Участники
Зарегистрирован: 17.06.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Код:

cAdESSignature.addSigner(JCSP.PROVIDER_NAME // <- в примере выше стоит JCP, хотя был JCSP

и
Код:

AdESConfig.setDefaultProvider(JCSP.PROVIDER_NAME...

в начале.

AdESConfig провайдер устанавливается каждый запуск. с провайдером JCSP как раз пустые сертификаты в подписи.

Вот какие провайдеры проставляются каждый запуск
Цитата:
override suspend fun initProviders() {
if (Security.getProvider(JCSP.PROVIDER_NAME) == null) {
Security.addProvider(JCSP())
}

if (Security.getProvider(Provider.PROVIDER_NAME) == null) {
Security.addProvider(Provider())
}

cpSSLConfig.setDefaultSSLProvider(JCSP.PROVIDER_NAME)
if (Security.getProvider(RevCheck.PROVIDER_NAME) == null) {
Security.addProvider(RevCheck())
}
AdESConfig.setDefaultProvider(JCSP.PROVIDER_NAME)

if (Security.getProvider("JTLS") == null) {
Security.addProvider(Provider())
}

if (Security.getProvider("JCP") == null) {
Security.addProvider(JCP())
}

cpSSLConfig.setDefaultSSLProvider("JCSP")

System.setProperty("ru.CryptoPro.CAdES.validate_tsp", "false")
System.setProperty("com.sun.security.crl.timeout", "5")
System.setProperty("ru.CryptoPro.crl.read_timeout", "5")

System.setProperty("com.sun.security.enableCRLDP", "true")
System.setProperty("com.ibm.security.enableCRLDP", "true")
System.setProperty("tls_prohibit_disabled_validation", "false")
}


Итоговый код подписи
Цитата:
val cAdESSignature = CAdESSignature(true)
cAdESSignature.addSigner(JCSP.PROVIDER_NAME, keys[0], certificates, CAdESType.CAdES_BES, null, false)
val signatureStream = ByteArrayOutputStream()
cAdESSignature.open(signatureStream)
cAdESSignature.update(data)
cAdESSignature.close()
return signatureStream.toByteArray()


ASN1 файл, который генерируется

Цитата:
0 NDEF: SEQUENCE {
2 9: OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
: (PKCS #7)
13 NDEF: [0] {
15 NDEF: SEQUENCE {
17 1: INTEGER 1
20 14: SET {
22 12: SEQUENCE {
24 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 3'
34 0: NULL
: }
: }
36 NDEF: SEQUENCE {
38 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: (PKCS #7)
: }
51 694: SET {
55 690: SEQUENCE {
59 1: INTEGER 1
62 150: SEQUENCE {
65 127: SEQUENCE {
67 35: SET {
69 33: SEQUENCE {
71 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
: (PKCS #9. Deprecated, use an altName extension instead)
82 20: IA5String 'support@cryptopro.ru'
: }
: }
104 11: SET {
106 9: SEQUENCE {
108 3: OBJECT IDENTIFIER countryName (2 5 4 6)
: (X.520 DN component)
113 2: PrintableString 'RU'
: }
: }
117 15: SET {
119 13: SEQUENCE {
121 3: OBJECT IDENTIFIER localityName (2 5 4 7)
: (X.520 DN component)
126 6: PrintableString 'Moscow'
: }
: }
134 23: SET {
136 21: SEQUENCE {
138 3: OBJECT IDENTIFIER organizationName (2 5 4 10)
: (X.520 DN component)
143 14: PrintableString 'CRYPTO-PRO LLC'
: }
: }
159 33: SET {
161 31: SEQUENCE {
163 3: OBJECT IDENTIFIER commonName (2 5 4 3)
: (X.520 DN component)
168 24: PrintableString 'CRYPTO-PRO Test Center 2'
: }
: }
: }
194 19: INTEGER
: 12 00 49 D8 82 4C AD 6B ..I..L.k
: 2E 38 CF 2C D8 00 01 00 .8.,....
: 49 D8 82 I..
: }
215 12: SEQUENCE {
217 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 3'
227 0: NULL
: }
229 373: [0] {
233 24: SEQUENCE {
235 9: OBJECT IDENTIFIER contentType (1 2 840 113549 1 9 3)
: (PKCS #9)
246 11: SET {
248 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: (PKCS #7)
: }
: }
259 79: SEQUENCE {
261 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4)
: (PKCS #9)
272 66: SET {
274 64: OCTET STRING
: E5 4A 9B 27 47 88 44 85 .J.'G.D.
: 6F AB 59 1D 1D 88 58 5F o.Y...X_
: A5 97 B6 FF F6 A8 F4 91 ........
: 13 F7 06 8E 25 47 D6 C6 ....%G..
: BC 6E 48 BE 3F 1B 02 3E .nH.?..>
: C5 A2 77 7F 19 16 6C 48 ..w...lH
: 34 BD 48 A7 B4 1A 46 AB 4.H...F.
: 8D D4 49 78 17 45 D8 9D
: }
: }
340 262: SEQUENCE {
344 11: OBJECT IDENTIFIER
: signingCertificateV2 (1 2 840 113549 1 9 16 2 47)
: (S/MIME Authenticated Attributes)
357 246: SET {
360 243: SEQUENCE {
363 240: SEQUENCE {
366 237: SEQUENCE {
369 10: SEQUENCE {
371 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 3'
: }
381 64: OCTET STRING
: 33 12 92 5E D8 5A 3C 28 3..^.Z<(
: 39 54 A6 9D 62 3A 61 FE 9T..b:a.
: 26 B2 16 BE A0 5D EF 0F &....]..
: 4B D7 64 3E D5 45 FD 60 K.d>.E.`
: D2 A2 2F 2F C4 D3 2B 2E ..//..+.
: 7A AE DD 66 B3 14 AE 13 z..f....
: 3C 6B 11 1C 26 C9 A1 79 <k..&..y
: 50 EA E1 17 68 BA 10 E2
447 156: SEQUENCE {
450 132: SEQUENCE {
453 129: [4] {
456 127: SEQUENCE {
458 35: SET {
460 33: SEQUENCE {
462 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
: (PKCS #9. Deprecated, use an altName extension instead)
473 20: IA5String 'support@cryptopro.ru'
: }
: }
495 11: SET {
497 9: SEQUENCE {
499 3: OBJECT IDENTIFIER
: countryName (2 5 4 6)
: (X.520 DN component)
504 2: PrintableString 'RU'
: }
: }
508 15: SET {
510 13: SEQUENCE {
512 3: OBJECT IDENTIFIER
: localityName (2 5 4 7)
: (X.520 DN component)
517 6: PrintableString 'Moscow'
: }
: }
525 23: SET {
527 21: SEQUENCE {
529 3: OBJECT IDENTIFIER
: organizationName (2 5 4 10)
: (X.520 DN component)
534 14: PrintableString 'CRYPTO-PRO LLC'
: }
: }
550 33: SET {
552 31: SEQUENCE {
554 3: OBJECT IDENTIFIER
: commonName (2 5 4 3)
: (X.520 DN component)
559 24: PrintableString 'CRYPTO-PRO Test Center 2'
: }
: }
: }
: }
: }
585 19: INTEGER
: 12 00 49 D8 82 4C AD 6B ..I..L.k
: 2E 38 CF 2C D8 00 01 00 .8.,....
: 49 D8 82 I..
: }
: }
: }
: }
: }
: }
: }
606 10: SEQUENCE {
608 8: OBJECT IDENTIFIER '1 2 643 7 1 1 6 2'
: }
618 128: OCTET STRING
: 05 8A E8 F4 2E 10 BE 52 .......R
: D4 33 64 BF 96 9E EA 7D .3d....}
: 44 E4 47 8D A8 9E 07 C8 D.G.....
: B7 FB 3E 91 77 83 F5 50 ..>.w..P
: 05 5B D8 34 71 3E 0C 4D .[.4q>.M
: 34 3F 7E B7 57 DF 15 1B 4?~.W...
: 2F 40 FE 92 42 F6 D2 1C /@..B...
: 64 65 8B 5A FE C2 04 5A de.Z...Z
: E3 B7 4B B7 2D B5 EC 28 ..K.-..(
: 29 61 C3 27 86 37 80 03 )a.'.7..
: AB 50 7D 35 6E 39 26 17 .P}5n9&.
: 95 57 71 95 12 95 86 9F .Wq.....
: 53 9A 2F A0 9F 9A 63 78 S./...cx
: FE 02 DE BD 55 80 3C 7E ....U.<~
: 66 33 87 1F DC AD CE 08 f3......
: B5 D5 81 74 4B B8 25 14
: }
: }
: }
: }
: }


Offline Евгений Афанасьев  
#12 Оставлено : 28 сентября 2020 г. 19:57:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
Провайдер на сертификаты не влияет, он только вычисляет хеш и подпись. Какой именно результат вы хотите получить?
Offline Илья Кузьмин  
#13 Оставлено : 28 сентября 2020 г. 20:24:47(UTC)
Илья Кузьмин

Статус: Участник

Группы: Участники
Зарегистрирован: 17.06.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Провайдер на сертификаты не влияет, он только вычисляет хеш и подпись. Какой именно результат вы хотите получить?


Хочу чтобы сертификат подписанта был в подписи. Чтобы можно было проверить подпись сертификатом из неё же
Offline Евгений Афанасьев  
#14 Оставлено : 29 сентября 2020 г. 8:03:31(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
У одной из версий addSigner есть параметр boolean addCertificateChain (последний), если он true, то в подпись будет добавлена цепочка сертификата подписи. Описание классов и функций есть в папке javadoc дистрибутива jcp.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.