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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline D!m@n  
#1 Оставлено : 21 августа 2011 г. 13:54:07(UTC)
D!m@n

Статус: Активный участник

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

Добрый день!

Веб-служба WCF использует HTTPS с аутентификацией клиента по сертификату.
(решил запостить в этом разделе, т.к. сама проблема с Шарпеем и .NET'ом ИМХО никак не связана)

На стороне службы:
1. КриптоПро CSP 3.6 R2 со свежекупленной серверной лицензией
2. Sharpei
3. Самоподписанный криптопрошный сертификат (с закрытым ключом), сделанный с помощью csptest в хранилище "Личные" локального компьютера + он же в хранилище "Доверенные корневые центры сертификации" локального компьютера + корректно зарегистрирован с помощью netsh
4. Сертификат УЦ, выпустившего сертификат клиента - в хранилище "Доверенные корневые центры сертификации" локального компьютера
5. Установлен последний CRL от УЦ, выпустившего клиентский сертификат
6. Есть доступ через интернет к CRL Distribution Point, указанной в сертификате клиента; CRL браузером можно скачать

На клиенте:
1. КриптоПро CSP 3.6 R2 с обычной лицензией (не trial)
2. Sharpei
3. Сертификат клиента с EKU "1.3.6.1.5.5.7.3.2" (аутентификация клиента), выпущенный УЦ
4. Самоподписанный сертификат службы - в хранилище "Доверенные корневые центры сертификации" текущего пользователя
5. Сертификат УЦ, выпустившего клиентский сертификат - в хранилище "Доверенные корневые центры сертификации" текущего пользователя

Эксперимент №1:
Подключаемся клиентом веб-службы к endpoint веб-службы - сервер возвращает ошибку HTTP 403, на стороне клиента выбрасывается исключение, а в Event Log на стороне службы вот такое сообщение:
"КриптоПро TLS. Ошибка 0x80092012 при проверке сертификата клиента: Функция отзыва не смогла произвести проверку отзыва для сертификата."

Эксперимент №2:
С клиента подключаемся браузером по https к metadata exchange endpoint (не требует аутентификации клиента) - все работает, страница открывается, IE доверяет веб-серверу и т.п.

Эксперимент №3:
Меняем в конфигах службы и клиента криптопрошные сертификаты на RSA-шные, строим аналогичную схему - все работает.

Эксперимент №4:
Специально написанным кодом с помощью X509Chain на машине веб-службы (из-под той же учетки) проверяем сертификат клиента => проверка успешна и в случае RevocationMode = X509RevocationMode.Online, и в случае RevocationMode = X509RevocationMode.Offline.
Т.е. доверие к сертификату клиента вроде как есть.

Скажите, пожалуйста, как победить ошибку 0x80092012 КриптоПро TLS?

Отредактировано пользователем 21 августа 2011 г. 13:56:39(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 22 августа 2011 г. 7:07:34(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,390
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Выложите настройки netsh http show sslcert из привязки службы?Для RSA издатели клиентских сертификатов те же? и настройки?
Включите аудит CAPI во время проверки сертификата клиента, какие сообщения?

Отредактировано пользователем 22 августа 2011 г. 7:10:39(UTC)  | Причина: Не указана

Пользователь Максим Коллегин прикрепил следующие файлы:
Безымянный.png (103kb) загружен 512 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Знания в базе знаний, поддержка в техподдержке
Offline D!m@n  
#3 Оставлено : 22 августа 2011 г. 14:18:08(UTC)
D!m@n

Статус: Активный участник

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

maxdm, огромное спасибо за оперативный ответ!

Вывод netsh http show sslcert

Код:

Привязки сертификатов SSL: 
------------------------- 

    IP:порт                 : 0.0.0.0:8089 
    Хэш сертификата        : a6ab972dd7b2441a1108f486db508d7a27692acb
    Код приложения          : {2b8a9136-fe43-4ac2-a3fb-9787ed6f6e90} 
    Имя хранилища сертификатов  : (null) 
    Проверять отзыв сертификата клиента    : Enabled
    Проверка отзыва с использованием только кэшированного сертификата клиента    : Disabled
    Проверка использования    : Enabled
    Время свежести отзыва : 0 
    Время ожидания извлечения URL-адреса   : 0 
    Идентификатор CTL          : (null) 
    Имя хранилища CTL  : (null) 
    Использование сопоставлений DS     : Disabled
    Согласование сертификата клиента    : Enabled


Из журнала CAPI2:
Код:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
	<System>
		<Provider Name="Microsoft-Windows-CAPI2" Guid="{5bbca4a8-b209-48dc-a8c7-b23d3e5216fb}"/>
		<EventID>53</EventID>
		<Version>0</Version>
		<Level>2</Level>
		<Task>53</Task>
		<Opcode>2</Opcode>
		<Keywords>0x4000000000000036</Keywords>
		<TimeCreated SystemTime="2011-08-22T05:50:20.239235500Z"/>
		<EventRecordID>1618</EventRecordID>
		<Correlation/>
		<Execution ProcessID="612" ThreadID="652"/>
		<Channel>Microsoft-Windows-CAPI2/Operational</Channel>
		<Computer>server.mydomain.ru</Computer>
		<Security UserID="S-1-5-18"/>
	</System>
	<UserData>
		<CryptRetrieveObjectByUrlWire>
			<URL scheme="http">http://correct.crl.address/crl.crl</URL>
			<Object type="CONTEXT_OID_CRL" constant="2"/>
			<Timeout>PT15S</Timeout>
			<Flags value="1" CRYPT_RETRIEVE_MULTIPLE_OBJECTS="true"/>
			<AdditionalInfo>
				<Action name="IsPendingNetworkRetrieval">
					<Error value="3A">Указанный сервер не может выполнить требуемую операцию.</Error>
				</Action>
			</AdditionalInfo>
			<EventAuxInfo ProcessName="lsass.exe"/>
			<CorrelationAuxInfo TaskId="{69CF87F7-0FCA-4C72-8BD8-9AC62834B73D}" SeqNumber="6"/>
			<Result value="3A">Указанный сервер не может выполнить требуемую операцию.</Result>
		</CryptRetrieveObjectByUrlWire>
	</UserData>
</Event>


И сразу за ним:
Код:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
	<System>
		<Provider Name="Microsoft-Windows-CAPI2" Guid="{5bbca4a8-b209-48dc-a8c7-b23d3e5216fb}"/>
		<EventID>41</EventID>
		<Version>0</Version>
		<Level>2</Level>
		<Task>41</Task>
		<Opcode>2</Opcode>
		<Keywords>0x4000000000000005</Keywords>
		<TimeCreated SystemTime="2011-08-22T06:13:42.154435600Z"/>
		<EventRecordID>1726</EventRecordID>
		<Correlation/>
		<Execution ProcessID="612" ThreadID="652"/>
		<Channel>Microsoft-Windows-CAPI2/Operational</Channel>
		<Computer>server.mydomain.ru</Computer>
		<Security UserID="S-1-5-18"/>
	</System>
	<UserData>
		<CertVerifyRevocation>
			<EventAuxInfo ProcessName="lsass.exe"/>
			<CorrelationAuxInfo TaskId="{1E2E976F-C3B0-4332-ABE5-F3AECDBA466B}" SeqNumber="7"/>
			<Result value="80092012">Функция отзыва не смогла произвести проверку отзыва для сертификата.</Result>
		</CertVerifyRevocation>
	</UserData>
</Event>


Т.е. получается, что все-таки не вытягивается CRL в онлайне? (как установить причину? ведь я могу скачать CRL через IE)
Можно ли как-то перевести проверку в режим оффлайн, чтобы она довольствовалась импортированным вручную CRL?

Что касается RSA-шных сертификатов, с которыми все получилось, то они все сделаны с помощью makecert и, конечно, имеют ряд отличий:
1. сертификат сервера имеет EKU 1.3.6.1.5.5.7.3.1
2. оба сертификата выпущены одним сертификатором
3. клиентский сертификат не имеет CRL Distribution Point

Отредактировано пользователем 22 августа 2011 г. 14:43:05(UTC)  | Причина: Не указана

Offline D!m@n  
#4 Оставлено : 22 августа 2011 г. 14:34:07(UTC)
D!m@n

Статус: Активный участник

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

И еще добавлю:
если в netsh при регистрации сертификата службы включить опцию verifyclientcertrevocation=disable, то аутентификация проходит... но это не вариант вообще, т.к. проверка по CRL необходима.
Offline Максим Коллегин  
#5 Оставлено : 22 августа 2011 г. 15:48:16(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,390
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Цитата:
Проверка отзыва с использованием только кэшированного сертификата клиента : Disabled

вот эту настройку нужно изменить.
CRL недоступен скорее всего из-за авторизации на прокси.

Отредактировано пользователем 22 августа 2011 г. 15:49:04(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline D!m@n  
#6 Оставлено : 22 августа 2011 г. 16:51:42(UTC)
D!m@n

Статус: Активный участник

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

maxdm написал:
Цитата:
Проверка отзыва с использованием только кэшированного сертификата клиента : Disabled

вот эту настройку нужно изменить.
CRL недоступен скорее всего из-за авторизации на прокси.

Если не ошибаюсь, для этого в реестре в разделе sslbindinginfo данного порта надо поставить
DefaultSslCertCheckMode = 2?
http://msdn.microsoft.co...us/library/ms689452.aspx

Попробовал, перезагрузился, опция действительно установилась в Enabled.

В журнале CAPI2 больше нет попыток получить CRL через точку распространения, но ошибка "Функция отзыва не смогла произвести проверку отзыва для сертификата" сохраняется.

При этом CRL был импортирован вручную.

Отредактировано пользователем 22 августа 2011 г. 16:52:49(UTC)  | Причина: Не указана

Offline D!m@n  
#7 Оставлено : 22 августа 2011 г. 17:00:48(UTC)
D!m@n

Статус: Активный участник

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

Уффф, кажись разобрался.
Похоже на то, что CRL нельзя устанавливать через правый клик\"Установить список отзыва (CRL)"
Он, видимо, в этом случае только для текущего пользователя устанавливается, а не для Local Machine.
Если я правильно понял, надо использовать команду certutil с ключами -enterprise и -addstore.
Во всяком случае у меня после этого оффлайновая проверка CRL заработала (в т.ч. проверил с помощью certutil -verify).

maxdm, поправьте меня, пожалуйста, если я что-то понял не так.

И еще - огромное Вам спасибо за помощь!

P.S. Еще эксперимент провел:
вернул опцию DefaultSslCertCheckMode = 0, перезагрузился => успешно подключился по HTTPS.
Т.е. ИМХО проблема была именно в том, что CRL был некорректно импортирован.

Отредактировано пользователем 22 августа 2011 г. 17:14:13(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#8 Оставлено : 22 августа 2011 г. 17:09:07(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,390
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Да, после установки нужно переместить CRL в хранилище компьютера или выбрать хранилище при установке.
Знания в базе знаний, поддержка в техподдержке
Offline D!m@n  
#9 Оставлено : 22 августа 2011 г. 17:16:22(UTC)
D!m@n

Статус: Активный участник

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

maxdm написал:
Да, после установки нужно переместить CRL в хранилище компьютера или выбрать хранилище при установке.

Так при импорте через GUI он не предлагает выбрать, чье это хранилище - локального компьютера или текущего пользователя. Он предлагает выбрать только название хранилища...
Offline Максим Коллегин  
#10 Оставлено : 22 августа 2011 г. 18:04:09(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,390
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
там есть крыжик - показывать физические хранилища.
Знания в базе знаний, поддержка в техподдержке
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.