Как определить доступность закрытого ключа к сертификату по
От: varenikAA  
Дата: 19.02.21 07:51
Оценка:
В деталях, есть номер сертификата криптопро, нужно понять доступен ли к нему ключ.
Самый простой способ. из умозрительного — попробовать создать подпись или еще что-нибудь, но может можно просто чекнуть есть/нет?

SOLUTION: Чтобы определить доступность закрытого ключа в .net нужно 1) установить крипто про .net 2) .net должен быть определенной версии (по информации с форума), точно ниже 4.8(не работает)
В итоге решение такое(крипто про 5). получаем список доступных контейнеров и экспортируем из них сертификаты. по серику определяем доступен ли контейнер ЗК нужного серта.
                var cp_root = @"C:\Program Files\Crypto Pro\CSP";

                if (!TryExecute(Path.Combine(cp_root, "csptest.exe"), "-keyset -enum_cont -verifycontext -fqcn -machinekeys", handleError, out var output))
                {
                    handleLog?.Invoke("csptest failed.");
                    return false;
                }

                var containers = output.Where(x => x.StartsWith(@"\\.\"));
                foreach (var container in containers)
                {
                    handleLog?.Invoke($"found container = {container}");
                    var cert_path = Path.GetTempFileName();
                    for_delete.Add(cert_path);
                    if (!TryExecute(Path.Combine(cp_root, "certmgr.exe"), $"-export -container \"{container}\" -certificate -dest \"{cert_path}\" -silent", handleError, out _))
                    {
                        handleLog?.Invoke($"container = \"{container}\" to \"{cert_path}\" failed.");
                        continue;
                    }

                    X509Certificate2 certToFind = new X509Certificate2();
                    certToFind.Import(File.ReadAllBytes(cert_path));


PS покопался еще в теме. Оказалось Bouncy Castle вроде бы поддерживает наши госты. насчет разрешения фстэк не знаю. но вот проблема не нашел у них простого способа получить инфу о контейнере.
т.е. идут ссылки на апи винды, а винда(дотнет) не может опять таки отдать закрытый ключ из-за незнания гостов. и вот непонятно до конца, если смотреть глазами на личный серт, то видим отметку есть закрытый ключ,
даже если контейнер недоступен. т.е. все же в свойствах серта прописала ссылка на физический путь к контейнеру или просто признак что ключ где-то есть?
Вообщем непонятно как Bouncy Castle обращается к закрытому ключу на контейнере(видел только варианты с загрузкой прямой из файла). надо поэкспериментировать.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 01.02.2023 2:37 Разраб . Предыдущая версия . Еще …
Отредактировано 31.01.2023 8:00 Разраб . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.