Статус: Участник
Группы: Участники
Зарегистрирован: 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
Оно понятно, это ж Аппач!!! Но ведь судя по картинке: в сервере IIS роль Trusted TLS выполняет КриптоПро TLS! А можно ли КриптоПро TLS как то настроить подобным образом? Ну или мож кто посоветует в каком направлении то копать? А то бьюсь уже вторую неделю...
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
IIS такой возможности не предоставляет. Но проверку сертификата можно добавить в код веб-сервиса. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.04.2008(UTC) Сообщений: 24 Откуда: Кемерово
|
maxdm написал:Но проверку сертификата можно добавить в код веб-сервиса. Есть такая идея. Но что то не разобрался как его выдернуть в методах сервиса. Если не секрет, как его выловить? Мож есть ссылка где копнуть? Главное - до него добраться, а там уже будем мучать его по полной программе. Заранее благодарен. Отредактировано пользователем 11 июня 2010 г. 10:11:42(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
На asp.net: HttpClientCertificate clientCertificate = HttpContext.Current.Request.ClientCertificate; |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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);
Осталось только его в методах сервиса отловить.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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;
}
Всё. Тема закрыта.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Код:extension.Oid.FriendlyName == "Enhanced Key Usage"
Тут не лучше сравнивать тоже по OID, чтобы не возникало проблем с локализацией? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close