Статус: Новичок
Группы: Участники
Зарегистрирован: 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); выполняется недопустимо долго. Спасибо.
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.05.2011(UTC) Сообщений: 4
|
С разницей результатов разобрался, была пропущена перекодировка ToBase64String.
Остался вопрос с задержкой signedCms.ComputeSignature...
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,457  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 39 раз Поблагодарили: 750 раз в 645 постах
|
КриптоПро CSP используется? Какой версии? Ключ на каком носителе? |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.05.2011(UTC) Сообщений: 4
|
нет, КриптоПро не использую. Интересует как можно ускорить выполнение signedCms.ComputeSignature - похоже этот метод обращается куда то по сети, значительная задержка видна в вызове DNS сервера изнутри него.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,457  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 39 раз Поблагодарили: 750 раз в 645 постах
|
|
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.05.2011(UTC) Сообщений: 4
|
Возможно. Не подскажите как диагностировать?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,457  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 39 раз Поблагодарили: 750 раз в 645 постах
|
Повставлять урлы из CDP в браузер, попробовать с самоподписанным сертификатом. |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close