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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Dionis  
#1 Оставлено : 10 июня 2010 г. 16:42:48(UTC)
Dionis

Статус: Участник

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

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

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

Имеем: 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


Оно понятно, это ж Аппач!!! Но ведь судя по картинке:


UserPostedImage

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

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


Offline Максим Коллегин  
#2 Оставлено : 11 июня 2010 г. 2:25:11(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
IIS такой возможности не предоставляет.
Но проверку сертификата можно добавить в код веб-сервиса.
Знания в базе знаний, поддержка в техподдержке
Offline Dionis  
#3 Оставлено : 11 июня 2010 г. 9:57:21(UTC)
Dionis

Статус: Участник

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

maxdm написал:
Но проверку сертификата можно добавить в код веб-сервиса.


Есть такая идея. Но что то не разобрался как его выдернуть в методах сервиса.
Если не секрет, как его выловить? Мож есть ссылка где копнуть?
Главное - до него добраться, а там уже будем мучать его по полной программе.

Заранее благодарен.

Отредактировано пользователем 11 июня 2010 г. 10:11:42(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#4 Оставлено : 11 июня 2010 г. 12:18:49(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
На asp.net:
HttpClientCertificate clientCertificate = HttpContext.Current.Request.ClientCertificate;
Знания в базе знаний, поддержка в техподдержке
Offline Dionis  
#5 Оставлено : 11 июня 2010 г. 14:53:51(UTC)
Dionis

Статус: Участник

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

ага. Спасибо.
на asp.net уже дотумкал. Причём даже как то вот так:

Код:
Response.Write("Издатель : "+Request.ClientCertificate.Issuer+"br");
Response.Write("Субъект : " + Request.ClientCertificate.Subject + "br");
Response.Write("Серийник : " + Request.ClientCertificate.SerialNumber + "/br");
Response.Write("Публичный ключ : ");
Response.BinaryWrite(Request.ClientCertificate.PublicKey); Response.Write("/br");
Response.Write("ServerIssue : " + Request.ClientCertificate.ServerIssuer + "/br");
Response.Write("ServerSubject : " + Request.ClientCertificate.ServerSubject + "/br");
Response.Write("Бинарник : /br");
Response.BinaryWrite(Request.ClientCertificate.Certificate);


Осталось только его в методах сервиса отловить.
Offline Dionis  
#6 Оставлено : 16 июня 2010 г. 10:42:13(UTC)
Dionis

Статус: Участник

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

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

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

Код:
    [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;
    }


Всё. Тема закрыта.
Offline Kirill Sobolev  
#7 Оставлено : 16 июня 2010 г. 15:59:11(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Код:
extension.Oid.FriendlyName == "Enhanced Key Usage"

Тут не лучше сравнивать тоже по OID, чтобы не возникало проблем с локализацией?
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.