23.05.2006 10:33:22КриптоПро OCSP Ответов: 13
Зарипов Тимур
Здравствуйте!
Возможно ли, используя КриптоПро OCSP, заменить механизм списков отозванных сертификатов в следующих приложениях:
1. Аутентификация в ОС (MS Windows XP, 2003)
2. SSL-аутентификация (MS IIS, MS ISA)
3. ЭЦП, шифрование электронной почты (MS Outlook 2003)
Другими словами, можно ли рассматривать OCSP как полноценную альтернативу CRL в этих приложениях?
 
Ответы:
23.05.2006 13:04:59Василий
Собственно, зависит не только от наличия OCSP, но и от способа использования.
Если использовать дополнительно КриптоПро Revocation Provider, то проверка сертификатов на отзыв, при наличии в сертификате расширения AIA - адреса OCSP-службы - будет делаться с использованием OCSP (либо в политике на клиенте должен быть прописан этот адрес).
Особенности такие:
- OCSP-служба должна быть доступна для пользователей и служб (по http), в т.ч. для не-пользователей домена (в случае винлогона)
- сертификат самой OCSP-службы нельзя проверять на отзыв при помощи этой же OCSP-службы
- корневой сертификат ЦС должен содержать расширение AIA - адрес OCSP-службы (либо в политике на клиенте должен быть прописан этот адрес)

23.05.2006 14:03:52Зарипов Тимур
Спасибо за ответ!
Таким образом, ключевым компонентом является КриптоПро Revocation Provider, который собственно и позволяет использовать ocsp, перехватывая вызовы функции проверки статуса сертификата CryptoAPI. В то же время КриптоПро Revocation Provider работает с OCSP-серверами, например, КриптоПро OCSP сервер, который «ограничен» КриптоПро УЦ и Microsoft CA. Верно ли все вышесказанное и можно ли организовать работу КриптоПро Revocation Provider c другими OCSP-серверами, в частности с различными OCSP-responder коммерческих УЦ?
24.05.2006 9:46:53Седов Роман
Хотел добавить, что КриптоПро OCSP Server может работать в режиме "по CRL", а это значит, что круг УЦ и ЦС, с которорыми он может работать, заметно расширяется.
А по поводу совместимости КриптоПро Revocation Provider с различными службами OCSP могу сказать следующее: он реализован в соотвествии с требованиями RFC 2560. Таким образом, если служба OCSP (как, например, нашей разработки) так же соответствует требованиям этого стандарта, то совместимость будет.
25.05.2006 10:12:28Зарипов Тимур
Хотел бы продолжить тему:
1. Для чего нужно указывать адрес ocsp-службы в корневом сертификате? Ведь, когда используются crl, CDP достаточно включить в сертификат пользователя, аналогично, насколько я понимаю, в сертификат пользователя включается AIA, а сертификат ЦС остается без изменений.
2. Как проходит проверка сертификата ocsp-службы? По вашим словам получается, что в этот сертификат нужно включать адрес другой ocsp-службы, а как проверить ее сертификат? Использовать еще одну службу?
3. Скачал и установил дистрибутив RP, административный шаблон отсутствовал в указанной в инструкции директории. Правильно ли я понимаю, что этот шаблон нужно добавить в доменную групповую политику (после установки шаблон был в локальной политике контроллера).
4. Нужно ли изменять политику, если в сертификате содержится адрес ocsp-службы?
5. Возможна ли корректная проверка статуса сертификата с помощью утилиты certutil (у меня не получилось, правда удалось проверить с помощью osputil)?
25.05.2006 10:35:44Седов Роман
1. Это зависит от конкретных приложений. По идее, проверять статус корневого сертификата не надо. Но кто-то это делает. И еще влияет реакция приложений на невозможность проверить этот статус (может, они вообще игнорируют это).
2. Стандарт предусматривает возможность избежать проверку сертификата службы OCSP на отзыв, включив в него специальное расширение 1.3.6.1.5.5.7.48.1.5 (id-pkix-ocsp-nocheck).
3. Видимо, в документации опечатка. Должно быть: "%WINDIR%\system32\GroupPolicy\Adm". Да, шаблон надо добавить в групповую политицу при необходимости.
4. Нет, адрес службы по умолчанию указывать в групповой политике не нужно, если он указан в расширении AIA сертификатов. Он служит только как дополнительный, если в сертификате адресов слубж нет или по указзанным в нем адресам не удалось получить статус.
5. Вроде бы certutil -verify должен уметь...
25.05.2006 18:30:36Зарипов Тимур
Спасибо, тем не менее certutil –verify работает (winlogon естественно тоже):
The revocation function was unable to check revocation for the certificate. 0x80
092012 (-2146885614)
------------------------------------
Revocation check skipped -- no revocation information available
Cannot check leaf certificate revocation status

Как решить проблему или хотя бы выяснить причину?
25.05.2006 18:45:00Зарипов Тимур
При этом, выполнив последовательность команд:
ocsputil.exe makereq -S OCSP.crt.cer new.req
ocsputil.exe sendreq new.req new.resp
ocsputil.exe respinfo new.resp
я получил следующее:
Status: 0
Signature algorithm: 1.2.840.113549.1.1.5, 0x0
HasNonce: 1
ProducedAt: 25 мая 2006 14:39:28
Extensions:
none

Certificates from response:

Certificates from response:
CN=Online

Single responses (1):
#1:
Hash algorithm: 1.3.14.3.2.26
Serial number: 4D7B 645D DE49 E9F8 CB57 C08E 218D 118D
Issuer key hash: C032 2BCC 4A40 33BA 5B9B FED6 288B 1E93 9528 DE36
Issuer name hash: 26FF CA47 A867 BF7F B04E 6220 ED91 776B ED0B 9BCC
Certificate status: Good
RevTime: none
RevReason: none
ThisUpdate: 25 мая 2006 14:39:28
NextUpdate: none
Archive cutoff: none
Extensions:
none

OCSP's certificate:
CN=Online

OCSP's certificate is verified.
OCSP response is verified.
25.05.2006 18:53:19Седов Роман
Я вам отправил письмо.
26.05.2006 12:30:22Зарипов Тимур
В логе certutil -verify есть ошибка:
2676] 10:00:40.312 ::*0000002* :: WinHttpQueryAuthSchemes(0xea2000, 0x6dd1c, 0x6dd30)
[2676] 10:00:40.312 ::*0000002* :: WinHttpQueryAuthSchemes: error 4317 [0x10dd]
[2676] 10:00:40.312 ::*0000002* :: WinHttpQueryAuthSchemes() returning FALSE

А вот лог ocsputil -sendreq:
[3508] cpcspi: Thread: file:line function text xcode(dcode) level: 1
[3508] 12:20:49.578 ::*Session* :: WinHttpCrackUrl("http://192.168.1.1/ocsp.xuda", 0x0, 0x0, 0x12fd74)
[3508] 12:20:49.578 ::*Session* :: WinHttpCrackUrlA("http://192.168.1.1/ocsp.xuda", 0x1c, 0x0, 0x12fc40)
[3508] 12:20:49.578 ::*Session* :: WinHttpCrackUrlA() returning TRUE
[3508] 12:20:49.578 ::*Session* :: WinHttpCrackUrl() returning TRUE
[3508] 12:20:49.578 ::*Session* :: WinHttpOpen("Crypto-Pro ocspcli.dll", (1), "", "", 0x0)
[3508] 12:20:49.578 ::*Session* :: WinHttpOpen() returning handle 0x11d6000
[3508] 12:20:49.578 ::*Session* :: WinHttpConnect(0x11d6000, "192.168.1.1", 80, 0x0)
[3508] 12:20:49.578 ::*Session* :: WinHttpConnect() returning handle 0x11dc000
[3508] 12:20:49.578 ::*Session* :: WinHttpOpenRequest(0x11dc000, "POST", "ocsp.xuda", "", "", 0x0, 0x00000000)
[3508] 12:20:49.578 ::*Session* :: WinHttpCreateUrlA(0x12fb1c, 0x0, 0x3980000, 0x12fb58)
[3508] 12:20:49.578 ::*Session* :: WinHttpCreateUrlA() returning TRUE
[3508] 12:20:49.578 ::*0000001* :: WinHttpOpenRequest() returning handle 0x3970000
[3508] 12:20:49.578 ::*0000001* :: WinHttpSetOption(0x3970000, (77), 0x12fd38 [0x2], 4)
[3508] 12:20:49.578 ::*0000001* :: WinHttpSetOption() returning TRUE
[3508] 12:20:49.578 ::*0000001* :: WinHttpSendRequest(0x3970000, "Content-type: application/ocsp-request", -1, 0xc75fa0, 248, 248, 0)
[3508] 12:20:49.578 ::*0000001* :: sending data:
[3508] 12:20:49.578 ::*0000001* :: 416 (0x1a0) bytes
[3508] 12:20:49.578 ::*0000001* :: <<<<-------- HTTP headers follow below ----------------------------------------------->>>>
[3508] 12:20:49.578 ::*0000001* ::
[3508] POST /ocsp.xuda HTTP/1.1
[3508] 12:20:49.578 ::*0000001* :: Content-type: application/ocsp-request
[3508] 12:20:49.578 ::*0000001* :: User-Agent: Crypto-Pro ocspcli.dll
[3508] 12:20:49.578 ::*0000001* ::
[3508] Host: 192.168.1.1
[3508] 12:20:49.578 ::*0000001* :: Content-Length:
[3508] 248
[3508] 12:20:49.578 ::*0000001* ::
[3508] Connection: Keep-Alive
[3508]
[3508] 12:20:49.578 ::*0000001* :: <<<<-------- End ----------------------------------------------->>>>
[3508] 12:20:49.578 ::*0000001* :: WinHttpSendRequest() returning TRUE
[3508] 12:20:49.578 ::*0000001* :: WinHttpReceiveResponse(0x3970000, 0x0)
[3508] 12:20:49.656 ::*0000001* :: received data:
[3508] 12:20:49.656 ::*0000001* :: 1024 (0x400) bytes
[3508] 12:20:49.656 ::*0000001* :: <<<<-------- HTTP headers follow below ----------------------------------------------->>>>
[3508] 12:20:49.656 ::*0000001* ::
[3508] HTTP/1.1 200 OK
[3508] 12:20:49.656 ::*0000001* :: Connection: Keep-Alive
[3508] 12:20:49.656 ::*0000001* :: Content-Length: 879
[3508] 12:20:49.656 ::*0000001* :: Date: Fri, 26 May 2006 08:19:17 GMT
[3508] 12:20:49.656 ::*0000001* ::
[3508] Content-Type: application/ocsp-response
[3508] 12:20:49.656 ::*0000001* :: Server: Apache/1.3.26
[3508] (Win32) mod_ssl/2.8.10 SSL-C
[3508]
[3508] 12:20:49.656 ::*0000001* :: <<<<-------- End ----------------------------------------------->>>>
[3508] 12:20:49.656 ::*0000001* :: WinHttpReceiveResponse() returning TRUE
[3508] 12:20:49.656 ::*0000001* :: WinHttpQueryHeaders(0x3970000, (0x20000013), "<null>", 0xc75ae0, 0x12fd34 [4], 0x0 [0])
[3508] 12:20:49.656 ::*0000001* :: WinHttpQueryHeaders() returning TRUE
[3508] 12:20:49.656 ::*0000001* :: WinHttpReadData(0x3970000, 0x11ec510, 65536, 0x12fd34)
[3508] 12:20:49.656 ::*0000001* :: WinHttpReadData() returning TRUE
[3508] 12:20:49.656 ::*0000001* :: WinHttpReadData(0x3970000, 0x11ec510, 65536, 0x12fd34)
[3508] 12:20:49.656 ::*0000001* :: WinHttpReadData() returning TRUE
[3508] 12:20:49.656 ::*0000001* :: WinHttpCloseHandle(0x3970000)
[3508] 12:20:49.656 ::*0000001* :: WinHttpCloseHandle() returning TRUE
[3508] 12:20:49.656 ::*Session* :: WinHttpCloseHandle(0x11dc000)
[3508] 12:20:49.656 ::*Session* :: WinHttpCloseHandle() returning TRUE
[3508] 12:20:49.656 ::*Session* :: WinHttpCloseHandle(0x11d6000)
[3508] 12:20:49.656 ::*Session* :: WinHttpCloseHandle() returning TRUE
[3508] StopTesterThread start
Здесь подобных ошибок нет. Не знаете ли вы с чем это может быть связано?
31.05.2006 15:25:44Зарипов Тимур
Посоветуйте что-нибудь, пожалуйста.
31.05.2006 17:07:08Зарипов Тимур
Замечу, что при использовании СОС вход в систему работает. При необходимости могу выслать сертификаты ЦС, клиента и OCSP-службы.
31.05.2006 17:52:11Зарипов Тимур
Еще одно дополнение:
при попытке входа в систему с помощью смарт-карты в логах ocsp-службы обращение не фиксируется, в отличие от certutil -verify
07.06.2006 17:02:29Василий
Итак, сообщаю:
Условия:
1) Корневой сертификат ЦС не имеет CDP и AIA.
2) Сертификат оператора OCSP не имеет CDP и AIA, но содержит расширение 1.3.6.1.5.5.7.48.1.5 ("Признак доверия службе OCSP")
3) сертификат DC не содержит CDP, но содержит AIA (адрес OCSP-службы)
4) сертификат входа со смарткартой пользователя домена не содержит CDP, но содержит AIA (адрес OCSP-службы)
5) УЦ не в домене, корневой сертификат ЦС установлен в AD в соответствии с рекомендациями, приведёнными в файле "Поддержка КриптоПро Winlogon в КриптоПро УЦ.pdf" (файл входит в http://www.cryptopro.ru/pub/WinLogon/1065/doc.zip)
6) служба OCSP на компьютере не из домена, но доступном по http с компьютеров домена, используется анонимная аутентификация для виртуального каталога OCSP на IIS (по умолчанию)
7) на DC: КриптоПро CSP 3.0 KC2 (лицензия - CSP + TLS server), КриптоПро WL (лицензия - KDC), КриптоПро Revocation Provider (постоянная лицензия)
8) на клиентском компьютере: КриптоПро CSP 3.0 KC1 (лицензия - CSP), КриптоПро WL (лицензия - клиент), КриптоПро Revocation Provider (постоянная лицензия)

Итог: винлогон работает, в журнале OCSP-службы при логоне по смарткарте появляются надписи о проверке сертификата клиента и DC.