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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей Писарев  
#11 Оставлено : 22 февраля 2013 г. 20:59:57(UTC)
Андрей *

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

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

Сказал «Спасибо»: 598 раз
Поблагодарили: 2335 раз в 1832 постах
Автор: zvv235 Перейти к цитате
Цитата:
Вот уже два часа смотрю примеры и документацию крипто про - везде только подписывается и проверяется подпись.

Логика в проверке подписи есть тогда, когда зашифрованный хэш добавлен к файлу и мы видим содержимое. А если содержимого неизвестно и я имею только строку
Цитата:
MIIF1gYJKoZIhvcNAQcCoI ......

, то ее же надо как-то преобразовать в текст обратно, а не проверять подпись


1. Подпись будет присоединенной или отсоединенной?
Присоединенная - это xml+эцп в одном "файле". Для проверки - не нужен оригинал. Оригинал - есть в "подписанном результате".
Если отсоединенная - для проверки необходимо подгружать оригинал и саму ЭЦП.

2. Результат может быть в разной кодировке: бинарная или base64.

В выше приведенном коде - создается присоединенная ЭЦП и результат - бинарные данные кодируются в BASE64.
Поэтому результат создания ЭЦП можно вывести как строку.
Цитата:
MIIF1gYJKoZIhvcNAQcCoI ......


Никакого здесь шифрования - нет. Для проверки необходимо загрузить подписанное содержимое
в .content и проверить, вызвав необходимый метод (не забывая указывать кодировку).


Автор: zvv235 Перейти к цитате

Логика в проверке подписи есть тогда, когда зашифрованный хэш добавлен к файлу и мы видим содержимое. А если содержимого неизвестно и я имею только строку
Цитата:
MIIF1gYJKoZIhvcNAQcCoI ......

Если не известно исходное содержимое и подпись отделенная - проверить, конечно, ничего нельзя...

Повторюсь: определиться нужно с типом подписи: присоединенная\отдельная.

Использую отделенную ЭЦП.




Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
zvv235 оставлено 23.02.2013(UTC)
Offline zvv235  
#12 Оставлено : 23 февраля 2013 г. 13:10:23(UTC)
zvv235

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

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

Сказал(а) «Спасибо»: 6 раз
То есть, если я правильно понимаю, ответ
Цитата:
MIIF1gYJKoZIhvcNAQcCoI ......

это просто строка в другой кодировке? Которая состоит из изначальной строки + ЭЦП. Подпись используется присоединенная. И если я изменю кодировку, то увижу изначальную строку?
И поэтому нет функций "расшифровки" и тп. И моя задача как раз в том, что б "достать" на строне сервера изначальную строку и проверить подпись?
Offline Андрей Писарев  
#13 Оставлено : 23 февраля 2013 г. 14:57:09(UTC)
Андрей *

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

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

Сказал «Спасибо»: 598 раз
Поблагодарили: 2335 раз в 1832 постах
Автор: zvv235 Перейти к цитате
То есть, если я правильно понимаю, ответ
Цитата:
MIIF1gYJKoZIhvcNAQcCoI ......

это просто строка в другой кодировке? Которая состоит из изначальной строки + ЭЦП. Подпись используется присоединенная. И если я изменю кодировку, то увижу изначальную строку?
И поэтому нет функций "расшифровки" и тп. И моя задача как раз в том, что б "достать" на строне сервера изначальную строку и проверить подпись?


Все правильно.
http://msdn.microsoft.co...p/aa387728(v=vs.85).aspx

Код:
SignedData.Verify( _
  ByVal SignedMessage, _
  [ ByVal bDetached ], _
  [ ByVal VerifyFlag ] _
)


p.s. насчет "достать строку" - после Verify, можно получить доступ к подписанному содержимому (исходный xml), если ЭЦП была присоединенной bDetached = false

Отредактировано пользователем 23 февраля 2013 г. 14:59:44(UTC)  | Причина: link

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
zvv235 оставлено 23.02.2013(UTC)
Offline zvv235  
#14 Оставлено : 23 февраля 2013 г. 23:05:22(UTC)
zvv235

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

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

Сказал(а) «Спасибо»: 6 раз
Добрый вечер!

К сожалению, подключить capicom к моему проекту у меня не получилось, и я, просидев пол дня над этим, решил пойти другим путем. Взяв за основу пример Verify.cs я собрал простой пример

Цитата:

[WebMethod()]
public static void SaveSignedDocument(string SignedData)
{
try
{
SignedCms signedCms = new SignedCms();
signedCms.Decode(Convert.FromBase64String(SignedData));

string SignedContent = System.Text.Encoding.Unicode.GetString(signedCms.ContentInfo.Content);

X509Certificate2 ClientCertificate = signedCms.SignerInfos[0].Certificate;
signedCms.SignerInfos[0].CheckSignature(false);
}
catch(Exception e)
{
}
}


Вопрос по поводу последней стоки (комментарий взят с примера)
Цитата:

// Используем проверку подписи и стандартную
// процедуру проверки сертификата: построение цепочки,
// проверку цепочки, и необходимых расширений для данного
// сертификата.
signedCms.SignerInfos[0].CheckSignature(false);

Проверяет ли этот метод подписано ли сообщение (SignedContent в моем случае) и верна ли подпись? Или нужно что-то еще?

Я так понимаю, что если CheckSignature(true), то оно проверит только подпись на сообщении и все. А если нет, то еще проверяет, подпись центра сертификации на сертификате клиента, нет ли пользовательского сертификата в списке отозванных на сервере. Верно?
Offline zvv235  
#15 Оставлено : 23 февраля 2013 г. 23:29:28(UTC)
zvv235

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

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

Сказал(а) «Спасибо»: 6 раз
И еще вопрос: откуда берется сертификат подписавшего клиента? Получается, что в ЭЦП добавляется данные сертификата клиента?
То есть, в base64 ответе PKCS7
Цитата:
MIIF1gYJKoZIhvcNAQcCoIIFxzCCBcMCAQExDDAKBgYq.....

содержатся все данные открытого ключа клиента?
Offline Андрей Писарев  
#16 Оставлено : 23 февраля 2013 г. 23:34:13(UTC)
Андрей *

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

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

Сказал «Спасибо»: 598 раз
Поблагодарили: 2335 раз в 1832 постах
Цитата:
CheckSignature(true)...

Да...
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
zvv235 оставлено 24.02.2013(UTC)
Offline Андрей Писарев  
#17 Оставлено : 23 февраля 2013 г. 23:35:25(UTC)
Андрей *

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

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

Сказал «Спасибо»: 598 раз
Поблагодарили: 2335 раз в 1832 постах
Автор: zvv235 Перейти к цитате
И еще вопрос: откуда берется сертификат подписавшего клиента? Получается, что в ЭЦП добавляется данные сертификата клиента?
То есть, в base64 ответе PKCS7
Цитата:
MIIF1gYJKoZIhvcNAQcCoIIFxzCCBcMCAQExDDAKBgYq.....

содержатся все данные открытого ключа клиента?


Да. Сертификат подписи вложен в pkcs7(cms).

Для эксперимента можно: сохранить строку в base64 из первого сообщения в текстовый файл, сменить расширение на p7b для просмотра через консоль управления сертификатами. Приложил снимок. Или сменить расширение на p7s и использовать софт для проверки ЭЦП (например, КриптоАРМ)

Отредактировано пользователем 23 февраля 2013 г. 23:41:39(UTC)  | Причина: ссылка

Пользователь Андрей * прикрепил следующие файлы:
подпись.png (72kb) загружен 34 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
zvv235 оставлено 24.02.2013(UTC)
Offline zvv235  
#18 Оставлено : 25 февраля 2013 г. 20:55:40(UTC)
zvv235

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

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

Сказал(а) «Спасибо»: 6 раз
А что может означать исключение:
Цитата:
System.Security.Cryptography.CryptographicException: Невозможно проверить функцию отзыва, т.к. сервер отзыва сертификатов недоступен .

при попытке проверки подписи в строке signedCms.SignerInfos[0].CheckSignature(false)? Если параметр true, то есть мы не проверяем сертификаты, то все работает. Что я забыл сделать?
Вот код:

Цитата:

[WebMethod]
public static string SaveSignedDocument(string SignedData)
{
try
{
SignedCms signedCms = new SignedCms();
signedCms.Decode(Convert.FromBase64String(SignedData));

if (signedCms.SignerInfos.Count != 1)
throw new Exception("Result is signed not one user");

string SignedContent = System.Text.Encoding.Unicode.GetString(signedCms.ContentInfo.Content);

X509Certificate2 ClientCertificate = signedCms.SignerInfos[0].Certificate;
signedCms.SignerInfos[0].CheckSignature(false);
}
catch(Exception e )
{
return "Error" + e.Message;
}
return "OK";
}


Может оно автоматически проверяет не находится ли сертификат в списке отозванных центра сертификации крипо про? Или надо еще устанавливать дополнительно ПО крипто про, помню я читал про сервер работы с сертификатами?
Но я же пока все делаю на тестовых сертификатах...

Отредактировано пользователем 25 февраля 2013 г. 21:04:37(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#19 Оставлено : 25 февраля 2013 г. 23:06:43(UTC)
Андрей *

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

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

Сказал «Спасибо»: 598 раз
Поблагодарили: 2335 раз в 1832 постах
Автор: zvv235 Перейти к цитате
А что может означать исключение:
Цитата:
System.Security.Cryptography.CryptographicException: Невозможно проверить функцию отзыва, т.к. сервер отзыва сертификатов недоступен .

при попытке проверки подписи в строке signedCms.SignerInfos[0].CheckSignature(false)? Если параметр true, то есть мы не проверяем сертификаты, то все работает. Что я забыл сделать?
Вот код:

Цитата:

[WebMethod]
public static string SaveSignedDocument(string SignedData)
{
try
{
SignedCms signedCms = new SignedCms();
signedCms.Decode(Convert.FromBase64String(SignedData));

if (signedCms.SignerInfos.Count != 1)
throw new Exception("Result is signed not one user");

string SignedContent = System.Text.Encoding.Unicode.GetString(signedCms.ContentInfo.Content);

X509Certificate2 ClientCertificate = signedCms.SignerInfos[0].Certificate;
signedCms.SignerInfos[0].CheckSignature(false);
}
catch(Exception e )
{
return "Error" + e.Message;
}
return "OK";
}


Может оно автоматически проверяет не находится ли сертификат в списке отозванных центра сертификации крипо про? Или надо еще устанавливать дополнительно ПО крипто про, помню я читал про сервер работы с сертификатами?
Но я же пока все делаю на тестовых сертификатах...



Кто "оно"?
Если в коде написано: проверить сертификат - необходимо обеспечить как минимум возможность выполнения этого...
тем более на самом ... web-сервере...

p.s. CRL актуальный установлен в промежуточные ЦС локального компьютера?



Техническую поддержку оказываем тут
Наша база знаний
Offline zvv235  
#20 Оставлено : 25 февраля 2013 г. 23:44:06(UTC)
zvv235

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

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

Сказал(а) «Спасибо»: 6 раз
Цитата:
Кто "оно"?

Программное обеспечение. Извиняюсь, на некорректное высказывание :)

Цитата:
p.s. CRL актуальный установлен в промежуточные ЦС локального компьютера?


Я так понимаю, что нет. Вот все, что есть
UserPostedImage
Я просто думал, что достаточно поместить сертификат в хранилище сертификатов, к которым нет доверия и проверять программа будет оттуда. Но похоже, что это не так...

По ссылке http://www.cryptopro.ru/certsrv/certcarc.asp я загрузил список последнего базового CRL. Теперь есть файл certcrl.crl, но как его импортировать для локального компьютера? Если нажать на нем правой кнопкой, то оно импортирует список отзыва для локального пользователя.
Ну а как сделать импорт списка для всех пользователей на локальный компьютер?

Отредактировано пользователем 26 февраля 2013 г. 0:53:13(UTC)  | Причина: подкорректирован вопрос

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