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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
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,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
С помощью 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,910
Российская Федерация
Откуда: Крипто-Про

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

Да. Аналогично компоненты 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,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Вообще, для проверки подписи используются сертификаты:
* из подписи (если есть)
* из 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,910
Российская Федерация
Откуда: Крипто-Про

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

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

и
Код:

AdESConfig.setDefaultProvider(JCSP.PROVIDER_NAME...

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