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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Snakelight  
#1 Оставлено : 13 августа 2024 г. 12:15:01(UTC)
Snakelight

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

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

Сказал(а) «Спасибо»: 1 раз
Всем доброго дня!

Подскажите пожалуйста, использую библиотеку КриптоПро .Net Libcore и следующий код .net core webapi для подписи документов:

Код:
public string Get()
{
    try
    {
        byte[] signature;

        using (var gostCert = GetGost2012_256Certificate()[0])
        {
            var key = gostCert.GetGost3410_2012_256PrivateKey();

            var bytesToHash = Encoding.ASCII.GetBytes("123456789"); //File.ReadAllBytes("D:\\document.txt");
            var contentInfo = new ContentInfo(bytesToHash);
            var signedCms = new CpSignedCms(contentInfo, false);
            CpCmsSigner cmsSigner = new CpCmsSigner(gostCert);

            // Опционально добавляем подписанные атрибуты.
            cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
            cmsSigner.SignedAttributes.Add(new PkcsSigningCertificateV2(gostCert));

            // Вычисляем и кодируем подпись в массив байт.
            signedCms.ComputeSignature(cmsSigner);
            signature = signedCms.Encode();

            //Console.WriteLine($"CMS Sign: {Convert.ToBase64String(signature)}");
            return Convert.ToBase64String(signature);
        }
    }
    catch (Exception ex) {
        return ex.StackTrace;
    }
}


Код:
        private CpX509Certificate2Collection GetGost2012_256Certificate()
        {
            using (var store = new CpX509Store(StoreName.My, StoreLocation.CurrentUser))
            {
                store.Open(OpenFlags.ReadOnly);
                return store.Certificates.Find(X509FindType.FindByThumbprint, "test_gost_256_client_2022", false);
            }
        }


Когда запускаю приложение web api локально через F5, то сертификат с рутокена считывается корректно и все подписывается, а если я публикую приложение у себя на IIS, то сертификат уже не находит.

С чем это связано и почему IIS не может получить доступ?

Отредактировано пользователем 13 августа 2024 г. 12:20:44(UTC)  | Причина: Не указана

Offline Георгий Садофьев  
#2 Оставлено : 13 августа 2024 г. 12:23:20(UTC)
Георгий Садофьев

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

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

Поблагодарили: 31 раз в 30 постах
Добрый день!

Вероятнее всего, причина в том, что Ваше приложение работает под системной учётной записью.
УЗ, под которой работает приложение, можно посмотреть/указать в настройках соответствующего пула приложений в оснастке IIS.
Если приложение работает под учётной записью типа Application Pool Identity, то удобнее установить сертификат в хранилище локального компьютера с привязкой к ЗК.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Георгий Садофьев за этот пост.
Snakelight оставлено 13.08.2024(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.