Добрый день.
Получается, что вы хотите делать все проверки в момент подписи?
Если так, то к сожалению в NCALayer реализованы не все перечисленные вами проверки, так
как в первую очередь это приложение было создано для схемы
клиент{подпись} -> сервер{проверка}. То есть NCALayer только клиента, а для сервера криптопровайдер, для осуществления всех проверок.
Так было реализовано, поскольку большинство информационных систем работает по такой схеме. Возможно, в будущем эти проверки будут включены в новых версиях NCALayer. Как вариант, вы можете реализовать аналог NCALayer, со своим блэк-джеком.
В целом по пунктам все верно, только необходимо отметить следующее.
По 6 пункту. В текущей версии NCALaeyr проверка формата реализована только определения назначения ключа, а именно проверка расширения KeyUsage. Информация, которую содержит расширение является основанием для определения типа сертификата. Но, по большому счету этого мало, необходимо также проверять и другие расширения, например «Extended Key Usage», «Certificate Policy» и т. д. Вновь отмечу, что мы планируем работы по доработке API NCALayer, в которую могут войти такие проверки.
По пунктам 2 и 4. На самом деле, выполнять эту проверку на клиенте, в момент подписания — хорошая практика, так как уже на этом этапе можно частично отбросить некоторые «непавильные» сертификаты, но повторная проверка на сервер все же рекомендуется, так как канал передачи данных (результата проверки на сервер) может быть ненадежным и возможна подмена данных. К сожалению, в NCALayer пока нет API для проверки статуса сертификата (см. выше).
Если у вас северная часть на .Net, то вам придется писать обертку над СИ-шными библиотеками, которые идут в составе SDK. Мы также рекомендуем вам попробовать воспользоваться библиотекой KalkanCrypt-COM, которая по сути является высокоуровневой библиотекой с упрощенным API. Мы ее передаем по запросу (пишите на knca{собака}pki.gov.kz). К KalkanCrypt-COM есть примеры.