25.11.2002 1:31:34Валидация сертификатов в IIS и другие вопросы по CryptoAPI Ответов: 5
Сергей
IIS настроен так, чтобы при установке защищенного (SSL) соединения требовать сертификат клиента.
Подскажите - как в IIS осуществляется валидация полученного сертификата:
1) Проверяется ли вся цепочка сертификации (до Root CA)
2) IIS осуществляет валидацию сертификата самостоятельно или посылает запрос к CA или другие варианты

Дополнительно:
1) Существуют ли в CryptoAPI функции валидации сертификата (если да - какие), осуществляют ли они проверку все цепочки сертификации (до Root CA)
2) Как в ОС добавлять (и удалять) новых CSP (програмно и вручную)
3) Существует фраза: "С помощью CryptoAPI можно делать приложения не зависящие от конкретного CSP" - т.е. в приложении должна быть возможность выбрать нужный CSP из списка (как это реализуется программно), а можно пример ПО, в которых эта возможность есть
4) Где находится CSP - в DLL - как узнать в каком
5) Как на различных языках программирования использовать CryptoAPI, например, как выбрать с каким CSP будет работать мое приложение на C++, а на VB, а как сменить CSP

Заранее благодарен за любые ответы, ссылки, примеры.
 
Ответы:
25.11.2002 10:21:19kure
На поставленные вопросы нужно рассказывать целый день.

Какие есть ресурсы.

MSDN раздел Cryptography
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncapi/html/msdn_cryptapi.asp

В нем рассказыватеся все про архитектуру и функции.

Про цепочки. В том же MSDN описание функций CertCreateCertificateChainEngine, CertGetCertificateChain.

Про верификация сертификатов в TLS. Ни IIS ни броузер к центру не обращаются. Используются функции верификации цепочек. Причем достаточного полного описания этого механизма найти в микрософт не удалось.

Мы нашли описание в книге "Разработка защищенных приложений для Windows 2000".

Кусок описания послал по почте.

25.11.2002 18:51:07Vsevolod V. Burkutsky
Кратко :))
1) Да.
2) Самостоятельно. ( через ChainEngine )

1) Конечно существуют, если-бы их не было, как бы тогда проверялись сертификаты :)), правдо универсальной ф-ции типа IsValid(), как в CAPICOM нет :((. Есть два спосом проверки сертификата:
1 - ( простой ) CertVerifySubjectCertificateContext, парамтры этого метода - сертификат выдавшей стороны, проверяемый сертификат и набор флагов ( подр. в MSDN ) - проблемы найти сертификат выдавшей стороны, валидность этого сертификата не проверяеться :((
2 - ( лучше ) использовать цепочки проверки сертификатов. Создаём цепочку ( с движком по умолчанию ) CertGetCertificateChain(...), проверяем её
CertVerifyCertificateChainPolicy(...)
поробнее в MSDN.
2) Смотри PSDK/Security/Cryptographic Service Providers/About Cryptographic Service Providers/Writing a CSP, кратко: DLL - экспортирует соотв. функции + запись в реестре HKLM/SOFTWARE/Microsoft/Cryptography/Defaults/Provider. Добвавили запись получили нового CSP, удалили - убрали :)).
3) Задать в программе переменные, определяющие криптопровайдера, алгоритмы симм. шифр., алг. с откр. ключом, хеш-алгоритмы и подставлять в них требуемые значения, код программы будет одинаков для большинства CSP.
4) Как уже говорил в п.2 в этом ключе реестра - Image Path
5) На VС++, как сказано в п.3, на VB можно использовать только CAPICOM (правда я слышал такую сказку что VB может экспортировать любую ф-цию из любой DLL,:)) если это действительно так, то экспортировать из Crypt32.dll требуемую ф-цию, и как в VС++ ), c CAPICOM - ом будут проблемы, поскольку он загружает провайдера исходя из данных сертификата, более подробно эта тама обсуждаеться в соседнем топике.





26.11.2002 20:51:16Сергей
Благодарю за ответы.

I) По поводу присланной схемы проверки валидности сертификата:
она для IIS?, если нет - то как это делает IIS?, если да - то на схеме указано,
что если указан сервер издателя и списка отзывов (CRL) нет в кэше, то нужно обратиться
к серверу издателя за CRL:
a) "Если CDP (CRL distribution point) в сертификате нет, проверка не производится." -
т.е. сертификат не считается отозванным и при правильных остальных полях - считается валидным.
б) "Если CDP есть, но ПО СЕТИ не доступен - сертификат "отозван" и
по присланной диаграмме: если сервер издателя недоступен - считать сертификат отозванным,
это (вот эти обращения к серверу издателя) говорит о том, что IIS не может работать
САМОСТОЯТЕЛЬНО, например в изолированной от Internet локальной сети с установленным
MS Certificate Server, для которого ранее (с выходом в инет) был получен сертификат от
Verisign для осуществления в дальнейшем возможности независимого выпуска сертификатов.
Схема:

----------IntErnet-------------------
| Root CA - Verisign |
| | |
|----IntrAnet---------------------- |
||CA - SomeOrg (MS Cert Serv,IIS) | |
|| | | | |
|| User1 User2 ... | |
|---------------------------------- |
| |
|-----------------------------------|

Итог: т.е. таки IIS в принципе не может работать самостоятельно (ибо может
присутствовать необходимость лезть в сеть к издателю за CRL) ?




II) К ответу 1) пункта дополнения (2 способ):
В MSDN есть:
The CertIsValidCRLForCertificate function checks a CRL to find out if
it is a CRL that would include a specific certificate if that certificate
were revoked. If the CRL has an issuing distribution point (IDP) extension,
the function checks whether that IDP is valid for the certificate being checked

Здорово, но КАК это делается, т.е. мое приложение использующее сию функцию
полезет в инет к каждому издателю (соответственно цепочке) за CRL и проверит
а) не отозван ли проверяемый сертификат и
б) не скомпрометирован ли очередной издатель в цепочке (т.е. в CRL у
очередного издателя х1 нет сведений, что сертификат выданный им x2 отозван)
или КАК эта проверка валидности осуществляется?

А к функции CertVerifyCertificateChainPolicy, например, для флага
CERT_CHAIN_POLICY_SSL:
Implements the SSL client/server chain policy verification checks.
The pvExtraPolicyPara member in the data structure pointed to by
pPolicyPara can be set to point to an SSL_EXTRA_CERT_CHAIN_POLICY_PARA
structure initialized with additional policy criteria.
Замечательно, но что означает "SSL client/server chain policy verification checks"
- какие действия по проверке будут при этом осуществляться?



III) К ответу 3 дополнительного:
несовсем, а точнее совсем не понял - какие переменные, а что означает для
БОЛЬШИНСТВА CSP? А известны ли продукты которые позволяют выбрать с каким CSP
работать?




IV) к ответу 5:
Возможно к подтверждению "сказки" - такой вопрос:
а если я хочу на VB зашифровать некий текст используя алгоритм шифрования
некоторого CSP - здесь вроде как сертификат не фигурирует (хотя у меня еще
мало знаний в этой области), но CSP то указать надо, а исходя из ответов 2 и 4
он (его функции) зашиты в DLL.
Какие ошибки в моих рассуждениях(предположениях)?, так и для VB провайдер
берется из DLL - кто знает?







10)Предположим, я хочу написать программу обмена сообщениями (например по локальной сети предприятия,
однако интересует и вариант работы с Internet), с использованием PKI, т.е.
я шифрую сообщение отправителя открытым ключом получателя и для ЭЦП использую
закрытый ключ отправителя.
Итак: User1 запустил мою программу для отправки сообщения, User2 запустил у себя мою программу для
получения сообщения. Объясните, чисто логически (архитектурно, без технических деталей) где и как
программа должна получить открытый ключ User2 для User1, и как обстоит дело с личным ключом,
(предположение - программа должна ключи эти генерить, а где хранить, чтобы повторно использовать, а
как другие программы смогут получить эти ключи для других целей).

Если есть вразумительная статья по этому поводу - дайте ссылку.



11) Говориться: "Чтобы некоторая организация могла выпускать сертификаты, например с использованием MS
Certification Server, т.е. выступать в роли Root CA - она должна иметь ’самоподписанный’ сертификат".
а) Это тот сертификат, который создается с помощью selfcert.exe из MS Office?, но ведь там как-то должен
фигурировать закрытый ключ этой организации или selfcert.exe это обеспечивает - а откуда она берет
закрытый ключ?
б) Чтобы пользователи могли "доверять" сертификатам от этой организации - этот
’самоподписанный’ сертификат нужно внести в Trusted Store пользователей, это
достигается с помощью экспорта/импорта сертификата?, а если этот экспортный
файл будет похищен - следовательно другая организация сможет выпускать сертификаты
от имени первой - т.е. здесь "дыра"?

12) а где найти информацию по поводу классов сертификатов (если есть - на русском)


Опять же - буду рад любой информации, теперь эти вопросы касаются непосредственно моей исследовательской дипломной работы.
26.11.2002 21:08:51Сергей
Немного не по теме, но в плане улучшения функциональности сайта (а именно форума) - хотелось бы сказать, что перед формочкой ответа неплохо бы видеть сам вопрос, а то, если он большой или структурный, - забываешь о чем спрашивали; а в идеале хотелось бы видеть не только вопрос, но и все комментарии к нему - решение: поместить форму ответа в конце страницы текущей темы.

Наилучшие пожелания.
06.12.2002 20:27:26Сергей
На свой 11)а) вопрос - ответ найден - оказывается этот сертификат создается автоматически при инсталяции центра сертификации.