Аутентификация пользователя по Oid в Ssl

  • Автор темы Dionis
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

Dionis

#1
Здравствуйте!

Возникла такая проблема:

Имеем: Windows Server 2008 R2, IIS 7, КриптоПро CSP 3.6.1 - CSP + TLS.

Надо: сделать в Веб-сервис, который должен работать по двустороннему TLS и работать только с клиентскими сертификатами, в которых, в EKU указан OID 1.2.3.4.5.6.7.8.

Использование Сопоставления клиентских сертификатов по схеме «многие к одному» не канает, поскольку в iisClientCertificateMappingAuthentication при создание правил возможно осуществлять проверку только полей Issuer и Subject.

Нашёл вот такую вещицу: (http://www.trusted.ru/bbpress/topic.php?id=27918)
Trusted TLS поддерживает возможность разграничения доступа по OID, указанным в расширении "Улучшенный ключ/Enhanced Key Usage (EKU)" клиентского сертификата. Настройки доступа к ресурсам по OID в Trusted TLS задаются в директиве SSLRequire. Дополнительно к стандартным опциям, описанным на сайте Apache, в Trusted TLS поддерживается опция "SSL_CLIENT_EKU", которая может быть задействована следующим способом:
Код:
<Location>
SSLRequire "1.2.x.y.z" in %{SSL_CLIENT_EKU}
</Location>
Оно понятно, это ж Аппач!!! Но ведь судя по картинке:


в сервере IIS роль Trusted TLS выполняет КриптоПро TLS! А можно ли КриптоПро TLS как то настроить подобным образом?

Ну или мож кто посоветует в каком направлении то копать? А то бьюсь уже вторую неделю...

Была идея в самом Web-сервисе, в коде, в методах выцепить клиентский сертификат, а там уже обрабатывать его как хошь. Но чо то он как то не выцепляется. А можно ли его вообще выцепить в Web-сервисе?
 
D

Dionis

#2
Мож кому пригодиться...

Используем горячо всеми любимый метод Хелловорд:

Код:
	[WebMethod]
public string HelloWorld() {
String Res = "", MyOID = "1.2.3.4.5.6.7.8";
Boolean Exist = false;
X509Certificate2 x509 = new X509Certificate2();
x509.Import(HttpContext.Current.Request.ClientCertificate.Certificate);

foreach (X509Extension extension in x509.Extensions)
{
if (extension.Oid.FriendlyName == "Enhanced Key Usage")
{
X509EnhancedKeyUsageExtension ext = (X509EnhancedKeyUsageExtension)extension;
OidCollection oids = ext.EnhancedKeyUsages;
foreach (Oid oid in oids)
{
if (oid.Value == MyOID) Exist = true;
}

if (Exist)
{
Res = "О, ДА! ТЫ правильный чувак! У тебя есть OID: "+MyOID;


... тут обработка метода ...

}
else
{
Res = "А ну брысь отсюда, шпана голопузая!";
}

}
}

return Res;
}
Всё. Тема закрыта.
 
Статус
Закрыто для дальнейших ответов.