logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline vorh  
#1 Оставлено : 28 июня 2017 г. 15:31:41(UTC)
vorh

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

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

Сказал(а) «Спасибо»: 4 раз
Не удается декодировать(?) извлеченный сертификат

Извлекаю сертификат из store и вызываю метод Export();

На выходе получаю вот такое

Цитата:
MIIC9zCCAqagAwIBAgITEgAcQq9kIFE6XW/J5gAAABxCrzAIBgYqhQMCAgMwfzEj
MCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJV
MQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYD
VQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMTcwNTE1MTIzODQ3WhcN
MTcwODE1MTI0ODQ3WjAbMRkwFwYDVQQDDBBUZXN0IENlcnRpZmljYXRlMGMwHAYG
KoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQI2vz2e7XiWhO9qPvNhys4TV
O0Yz04iq9rFQZgVK9ZoJ/7VzXaCGjDyLhh5zCkesn0olSWB4CcPRao4Z5J9+Sryj
ggFbMIIBVzAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0OBBYEFN3ugCVhrKM61uwsrg5w
z5jbDEjXMB8GA1UdIwQYMBaAFBUxfLCNGt5m1xWcSVKXFyS5AXqDMFkGA1UdHwRS
MFAwTqBMoEqGSGh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJvLnJ1L0NlcnRFbnJvbGwv
Q1JZUFRPLVBSTyUyMFRlc3QlMjBDZW50ZXIlMjAyLmNybDCBqQYIKwYBBQUHAQEE
gZwwgZkwYQYIKwYBBQUHMAKGVWh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJvLnJ1L0Nl
cnRFbnJvbGwvdGVzdC1jYS0yMDE0X0NSWVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVy
JTIwMi5jcnQwNAYIKwYBBQUHMAGGKGh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJvLnJ1
L29jc3Avb2NzcC5zcmYwCAYGKoUDAgIDA0EA6co/YUYmr0Dt+3hpIB4ffYBkVc7v
vvNOkIuGLgQGsMnsG3GEGRAPAwgAOBwWbQ


Пытаюсь извлечь сертификат:

1) С помощью java:

Код:
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
Iterator<? extends Certificate> i = cf.generateCertificates(bais).iterator();


Результат: Получаю ошибку java.security.cert.CertificateException: java.io.IOException: Incomplete BER/DER data

2) Декодировал с помощью онлайн сервиса https://www.sslshopper.c...certificate-decoder.html

Результат: то же самое - нечего не находит


Собственно вопрос , что я делаю не так и как мне извлечь сертификат?
Offline Андрей *  
#2 Оставлено : 28 июня 2017 г. 15:37:11(UTC)
Андрей *


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

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

Сказал «Спасибо»: 244 раз
Поблагодарили: 803 раз в 674 постах
> ByteArrayInputStream(bytes)

В bytes передавать байты декодированные из base64 ( MIIC9zCCAqagAwIB ...)
Offline vorh  
#3 Оставлено : 28 июня 2017 г. 15:49:12(UTC)
vorh

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

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

Сказал(а) «Спасибо»: 4 раз
Использовал Base64.getMimeDecoder().decode() для декодирования , перед этим файлы на сервер попадают get запросом , в параметре которого передается как раз base64 сертификата

Отредактировано пользователем 28 июня 2017 г. 15:51:15(UTC)  | Причина: Не указана

Offline Андрей *  
#4 Оставлено : 28 июня 2017 г. 16:23:08(UTC)
Андрей *


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

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

Сказал «Спасибо»: 244 раз
Поблагодарили: 803 раз в 674 постах
Автор: vorh Перейти к цитате
Использовал Base64.getMimeDecoder().decode() для декодирования , перед этим файлы на сервер попадают get запросом , в параметре которого передается как раз base64 сертификата


POST желателен для этих целей...
Offline vorh  
#5 Оставлено : 28 июня 2017 г. 17:33:54(UTC)
vorh

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Андрей * Перейти к цитате
Автор: vorh Перейти к цитате
Использовал Base64.getMimeDecoder().decode() для декодирования , перед этим файлы на сервер попадают get запросом , в параметре которого передается как раз base64 сертификата


POST желателен для этих целей...


Да b64 сертификата просто из дебагера скопировал и попытался распарсить - толку ноль , чего то не хватает
То же самое и с подписью документа - извлечь из нее информацию о подписанте не удается

Метод проверки подписи отрабатывает успешно
Offline Андрей *  
#6 Оставлено : 28 июня 2017 г. 17:54:02(UTC)
Андрей *


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

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

Сказал «Спасибо»: 244 раз
Поблагодарили: 803 раз в 674 постах
>толку ноль , чего то не хватает

а приведенная выше строка в base64 - корректная?

Подозрительные: 1,00 КБ (1 024 байт)

Отредактировано пользователем 28 июня 2017 г. 17:54:35(UTC)  | Причина: Не указана

Offline vorh  
#7 Оставлено : 28 июня 2017 г. 18:59:32(UTC)
vorh

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Андрей * Перейти к цитате
>толку ноль , чего то не хватает

а приведенная выше строка в base64 - корректная?

Подозрительные: 1,00 КБ (1 024 байт)


Собственно расскажу все по порядку:

Есть документ odt , который пытаюсь подписать

На вход подается uint8Array я кодирую в Base64 с помощью вот этой функции

Код:
function _arrayBufferToBase64( buffer ) {
    var binary = '';
    var bytes = new Uint8Array( buffer );
    var len = bytes.byteLength;
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
    return window.btoa( binary );
} 


Потом подписываю:

Код:
var CADES_BES = 1;
Signature = oSignedData.SignCades(data, CADES_BES); 


Из этой сигнатуры пытаюсь извлечь сертификат(?)

Подписывал у вас на сайте файл - все корректно, подпись потом легко открывается в виде сертификата
test.p7b (42kb) загружен 1 раз(а).

Что мне нужно сделать чтобы добавиться такого ?


Собственно сама сигнатура подписанного файла

b64.txt (60kb) загружен 1 раз(а).


Offline Андрей *  
#8 Оставлено : 28 июня 2017 г. 22:00:45(UTC)
Андрей *


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

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

Сказал «Спасибо»: 244 раз
Поблагодарили: 803 раз в 674 постах
1. Вы смотрели результат?
почему в base64 в каждой строке "\r\n"?

2. Чтобы получить сертификат - необходимо выполнить проверку подписи (.VerifyCades), тогда будут доступны Signers,



Signers object
Signers.Item


а у Signer - Signer.Certificate property
из которого можно получить необходимое.

thanks 1 пользователь поблагодарил Андрей * за этот пост.
vorh оставлено 29.06.2017(UTC)
Offline vorh  
#9 Оставлено : 29 июня 2017 г. 16:01:32(UTC)
vorh

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

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

Сказал(а) «Спасибо»: 4 раз
С сертификатом разобрался огромное спасибо вам, но теперь возникла проблема с подписью:

Пытаюсь ее декодировать из base64 to byte[]

С помощью java

Base64.getMimeDecoder().decode(sign.getBytes(StandardCharsets.UTF_8)); // Пробовал и без UTF-8

Вываливается ошибка java.lang.IllegalArgumentException: Input byte array has wrong 4-byte ending unit
Иногда удается нормально декодировать , но подпись не открывается как .p7b

В чем может быть проблема ?

Если декодируемую подпись поместить в Notepad++ и там декодировать с помощью плагина , а затем сохранить как .p7b - то все открывается , при этом размер файла 2006 байт , а если удается удачно декодировать с помощью java то размер 2000 байт

Так же в подписи присутствуют знаки \r\n - покрай не мере такое замечено при подписание в IE11 , я их пытался и оставлять и убирать- результат тот же

Notepad++ при этом все нормально декодирует
Offline vorh  
#10 Оставлено : 29 июня 2017 г. 18:08:25(UTC)
vorh

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

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

Сказал(а) «Спасибо»: 4 раз
Как оказалось не один из доступных способов в js то же не может декодировать подпись - все валятся с ошибкой

Можно ли изменить чтобы CAdESCOM.CPSigner подпись сразу выдавал в бинарном формате ?

Отредактировано пользователем 29 июня 2017 г. 18:40:18(UTC)  | Причина: Не указана

Offline Андрей *  
#11 Оставлено : 30 июня 2017 г. 9:05:40(UTC)
Андрей *


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

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

Сказал «Спасибо»: 244 раз
Поблагодарили: 803 раз в 674 постах
Автор: vorh Перейти к цитате
Как оказалось не один из доступных способов в js то же не может декодировать подпись - все валятся с ошибкой

Можно ли изменить чтобы CAdESCOM.CPSigner подпись сразу выдавал в бинарном формате ?


Какая цель?
Offline Андрей *  
#12 Оставлено : 30 июня 2017 г. 9:08:51(UTC)
Андрей *


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

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

Сказал «Спасибо»: 244 раз
Поблагодарили: 803 раз в 674 постах
Автор: vorh Перейти к цитате

Иногда удается нормально декодировать , но подпись не открывается как .p7b

В чем может быть проблема ?



Зачем это всё делается?
Offline vorh  
#13 Оставлено : 30 июня 2017 г. 10:38:19(UTC)
vorh

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

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

Сказал(а) «Спасибо»: 4 раз
После подписание документа , надо сохранить подпись на сервере , чтобы потом дать возможность юзерам скачать ее в личном кабинете на сайте и затем зайти на гос портал проверить ее.

Т.е. это планировал сделать как : подпись отправляется на сервер в Base64 - декодируется и затем сохраняется в бд

Если я что то делаю не так , можете подсказать другой способ или указать на мои ошибки.

Пытался декодировать с помощью js на стороне клиента - получил вот такую строку:

0⇒\u0006\t*戆獁\u0007\u0002ð⇿\u0002\u0001\u00011\f0\n\u0006\u0006*僂\u0002\t\u0005

Что с ней делать то же не понятно

Offline 4eIIIupKo  
#14 Оставлено : 13 июля 2017 г. 9:56:40(UTC)
4eIIIupKo

Статус: Активный участник

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

Сказал «Спасибо»: 21 раз
Автор: Андрей * Перейти к цитате
1. Вы смотрели результат?
почему в base64 в каждой строке "\r\n"?

2. Чтобы получить сертификат - необходимо выполнить проверку подписи (.VerifyCades), тогда будут доступны Signers,



Signers object
Signers.Item


а у Signer - Signer.Certificate property
из которого можно получить необходимое.



Это получается, нужно скачать файл. Запустить проверку. И только потом я смогу получить данные сертификата.
А без нее никак? Если я и так уверен что подпись от нужного файла.
Offline Андрей *  
#15 Оставлено : 13 июля 2017 г. 10:00:19(UTC)
Андрей *


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

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

Сказал «Спасибо»: 244 раз
Поблагодарили: 803 раз в 674 постах
Можно и без файлов, "на вход" же не файл подается, а данные.
И инициализировать можно некорректными данными и запросить проверку.
thanks 1 пользователь поблагодарил Андрей * за этот пост.
4eIIIupKo оставлено 17.07.2017(UTC)
Offline 4eIIIupKo  
#16 Оставлено : 17 июля 2017 г. 11:09:42(UTC)
4eIIIupKo

Статус: Активный участник

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

Сказал «Спасибо»: 21 раз
Автор: Андрей * Перейти к цитате
Можно и без файлов, "на вход" же не файл подается, а данные.
И инициализировать можно некорректными данными и запросить проверку.


Спасибо большое буду пробывать.
Offline 4eIIIupKo  
#17 Оставлено : 24 июля 2017 г. 15:17:30(UTC)
4eIIIupKo

Статус: Активный участник

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

Сказал «Спасибо»: 21 раз
Автор: 4eIIIupKo Перейти к цитате
Автор: Андрей * Перейти к цитате
Можно и без файлов, "на вход" же не файл подается, а данные.
И инициализировать можно некорректными данными и запросить проверку.


Спасибо большое буду пробывать.


Код:
	cadesplugin.async_spawn(function*(arg){
		var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
		try{
			yield oSignedData.propset_ContentEncoding(1);
			yield oSignedData.propset_Content(dataToVerify);
			yield oSignedData.VerifyCades(sSignedMessage.replace(/(\r\n|\n|\r)/gm," "),CADESCOM_CADES_BES,true);
		}catch(err){
			error_eds("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
			return false;
		}
		console.log(yield oSignedData.Signers.Item(1).Certificate.SigningTimestampTime);
		//$('#eds_status').modal('hide');
	});


Не работает. Вылетает с ошибкой Uncaught (in promise) TypeError: oSignedData.Signers.Item is not a function.
Как отловить?
Offline 4eIIIupKo  
#18 Оставлено : 25 июля 2017 г. 12:59:35(UTC)
4eIIIupKo

Статус: Активный участник

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

Сказал «Спасибо»: 21 раз
Проблема была в синхронности. Вдруг кому-то пригодится.

Код:

				var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
				try{
					yield oSignedData.propset_ContentEncoding(1);
					yield oSignedData.propset_Content(sBase64Data);
					yield oSignedData.VerifyCades(eds.replace(/(\r\n|\n|\r)/gm," "),CADESCOM_CADES_BES,true);
				}catch(err){
					error_eds("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
					return false;
				}
				var Signers = yield oSignedData.Signers;
				console.log(yield Signers.Count);
				
				var Item = yield Signers.Item(1);
				console.log(yield Signers.Item(1));
				
				var Certificate = yield Item.Certificate;
				console.log(yield Item.Certificate);
				
				AddCertInfoForEDS_Async(Certificate);



А еще вопрос как выдрать СНИЛС и другие данные с сертификата?

Отредактировано пользователем 25 июля 2017 г. 13:00:15(UTC)  | Причина: Не указана

Offline cross  
#19 Оставлено : 31 июля 2017 г. 13:56:23(UTC)
cross


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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 689
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 104 раз в 95 постах
Данные сертификата можно получить через метод GetInfo() с нужными параметрами.
Анатолий Беляев (cross на cryptopro.ru)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.