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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline egera  
#1 Оставлено : 22 июля 2009 г. 23:09:09(UTC)
egera

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

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

Уважаемые помогите, пожалуйста!
Из .net импортом Win32 CryptoApi выполняю вызов функции создания контекста сертификата.
Код:
	
internal sealed class SspiProvider {
		private SspiProvider() {}
[DllImport(@"crypt32.dll", SetLastError=true)]
internal static extern IntPtr CertCreateCertificateContext(int dwCertEncodingType, byte[] pbCertEncoded, int cbCertEncoded);
...
}

public bool CertTrustVerify(byte[] CertData, byte[] CertIssuerData)
{
IntPtr hCertIssuer = IntPtr.Zero;
// Создание контекста сертификата издателя
hCertIssuer = SspiProvider.CertCreateCertificateContext(SecurityConstants.X509_ASN_ENCODING | SecurityConstants.PKCS_7_ASN_ENCODING, CertIssuerData, CertIssuerData.Length);
     if (hCertIssuer == IntPtr.Zero)
           throw new CryptographicException(Marshal.GetLastWin32Error());
...
}


Для некоторых внешне вроде нормальных сертификатов получаю следующую ошибку:
"Встречено неверное значение тега ASN1."

Подскажите, пожалуйста, в какую сторону копать.

Во вложении один такой сертификат.

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

Вложение(я):
kontur-ur-2007.cer (2kb) загружен 12 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Максим Коллегин  
#2 Оставлено : 22 июля 2009 г. 23:13:57(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
X509Certificate/X509Certificate2 класс не удобнее?
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#3 Оставлено : 22 июля 2009 г. 23:15:40(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Конретно этот сертификат - base64 кодированный - а функция хочет DER
Знания в базе знаний, поддержка в техподдержке
Offline egera  
#4 Оставлено : 22 июля 2009 г. 23:17:11(UTC)
egera

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

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

Я потом этот контекст передаю в функцию проверки подписи:

Код:

SspiProvider.CryptVerifyCertificateSignatureEx(  IntPtr.Zero// 75 КриптоПро Провайдер 
                                                  , SecurityConstants.X509_ASN_ENCODING // Тип кодировки 
                                                  , SecurityConstants.CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB //SecurityConstants.CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
                                                  , ref db //hCert                     // Проверяемый сертификат
                                                  , SecurityConstants.CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
                                                  , hCertIssuer              
                                                  , 0
                                                  , IntPtr.Zero)


Или может подскажете, можно ли как-то другим способом проверить подпись сертификата?
Offline egera  
#5 Оставлено : 22 июля 2009 г. 23:20:34(UTC)
egera

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

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

Да, точно, действительно. Спасибо большое!
А как можно проверить в какой кодировке сертификат?
И для того, чтобы получить DER можно просто его сконвертить из base64?
Offline Максим Коллегин  
#6 Оставлено : 22 июля 2009 г. 23:26:03(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
X509Chain.Build
Знания в базе знаний, поддержка в техподдержке
Offline egera  
#7 Оставлено : 22 июля 2009 г. 23:37:38(UTC)
egera

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

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

Это Вы по поводу альтернативного метода проверки подписи сертификата?
Offline egera  
#8 Оставлено : 23 июля 2009 г. 14:06:47(UTC)
egera

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

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

Дело в том, что в архитектуре нашего приложения сертификаты находятся в БД, а не в хранилище сертификатов и к тому же проверка подписи сертификата должна производиться даже без наличия интернет.
Поэтому ещё раз хочу поднять вопрос - можно ли программно проверить в какой кодировке сертификат?
Offline Максим Коллегин  
#9 Оставлено : 23 июля 2009 г. 14:18:16(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
а так понятнее?

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

Знания в базе знаний, поддержка в техподдержке
Offline egera  
#10 Оставлено : 23 июля 2009 г. 14:31:15(UTC)
egera

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

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

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