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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline cyb  
#1 Оставлено : 6 мая 2011 г. 9:42:27(UTC)
cyb

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

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

В соответствии с утверждением Майкрософта о прекращении поддержки CAPICOM стоит задача изменить код для подписи сообщения на использование .Net классов.
Пока получается не все.
Надеюсь что найдется эксперт и подскажет в чем проблема (или направление копания).

Первый кусок кода написан с использованием Capicom'а и выполняет то, что нужно - находит требуемый сертификат и шифрует текст.


CAPICOM.CAPICOM_STORE_LOCATION _store = CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE;

CAPICOM.UtilitiesClass u = new CAPICOM.UtilitiesClass();
CAPICOM.Signer signHandler = new CAPICOM.SignerClass();
signHandler.Certificate = GetCertificate(CertName, _store); //search CAPICOM.Certificate in store
CAPICOM.ISignedData signedMsg = new CAPICOM.SignedDataClass();
string MsgToBeSigned = "MsgToBeSigned";
signedMsg.set_Content(u.ByteArrayToBinaryString(System.Text.Encoding.UTF8.GetBytes(MsgToBeSigned)));
string signedText = signedMsg.Sign(signHandler, false, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);

// signedText = "MIIIFAYJKoZIhvcNAQcCoIIIBTCCCAECAQExCzAJBgUrDgMCGgUAMBwGCSqGSIb3\r\nD ...



Пытаюсь сделать то же самое с использованием классов X509Certificate2 и CmsSigner:


using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Pkcs;
...
X509Certificate2 x509 = new X509Certificate2(certFile, passw);
string MsgToBeSigned = "MsgToBeSigned";

ContentInfo content = new ContentInfo(System.Text.Encoding.ASCII.GetBytes(MsgToBeSigned));
SignedCms signedCms = new SignedCms(content, false);
CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, x509);

signedCms.ComputeSignature(signer); // create the signature - takes 30 secs
byte[] data = signedCms.Encode();
string signedText = System.Text.Encoding.ASCII.GetString(data);
// signedText = "0?\b\t*?H??\r\a??\b0?\b1\v0\t+\00\t*?H??\r\a?\rMsgToBeSigned??\r0 ...



Результат явно отличается от ожидаемого - вместо зашифрованного текста получаю структуру, включающую как исходное сообщение, так и что-то двоичное.

Кроме того, строка signedCms.ComputeSignature(signer); выполняется недопустимо долго.
Спасибо.
Offline cyb  
#2 Оставлено : 9 мая 2011 г. 12:45:08(UTC)
cyb

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

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

С разницей результатов разобрался, была пропущена перекодировка ToBase64String.

Остался вопрос с задержкой signedCms.ComputeSignature...
Offline Максим Коллегин  
#3 Оставлено : 16 мая 2011 г. 13:47:28(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
КриптоПро CSP используется? Какой версии?
Ключ на каком носителе?
Знания в базе знаний, поддержка в центре поддержки
Offline cyb  
#4 Оставлено : 18 мая 2011 г. 7:03:17(UTC)
cyb

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

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

нет, КриптоПро не использую.
Интересует как можно ускорить выполнение signedCms.ComputeSignature - похоже этот метод обращается куда то по сети, значительная задержка видна в вызове DNS сервера изнутри него.
Offline Максим Коллегин  
#5 Оставлено : 18 мая 2011 г. 11:22:18(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
сертификат с кривым cdp?
Знания в базе знаний, поддержка в центре поддержки
Offline cyb  
#6 Оставлено : 24 мая 2011 г. 5:36:32(UTC)
cyb

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

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

Возможно. Не подскажите как диагностировать?
Offline Максим Коллегин  
#7 Оставлено : 24 мая 2011 г. 6:00:12(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
Повставлять урлы из CDP в браузер, попробовать с самоподписанным сертификатом.
Знания в базе знаний, поддержка в центре поддержки
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.