Client certificate auth - моментально 403 Forbidden

Palych
Уже с Приветом
Posts: 13729
Joined: 16 Jan 2001 10:01

Re: Client certificate auth - моментально 403 Forbidden

Post by Palych »

Когда всё это заработает, решится кто-нибудь подставить неправильный сертификат, чтобы убедиться что система защищена от несанкционированного доступа?
kostik78
Уже с Приветом
Posts: 3175
Joined: 17 May 2007 14:07

Re: Client certificate auth - моментально 403 Forbidden

Post by kostik78 »

Palych wrote: 16 Jul 2021 21:43 Когда всё это заработает, решится кто-нибудь подставить неправильный сертификат, чтобы убедиться что система защищена от несанкционированного доступа?
Не понятен Ваш скептицизм. Я построил не одну систему где сервисы (как шас принято называть микросервисами) использовали mutual cert auth и авторизация привелегий определялась самим конечным сертификатом через extension. Данные системы работают и довольно безопасны если сделаны верно :pain1:
User avatar
VovaK98
Уже с Приветом
Posts: 1830
Joined: 04 Mar 2002 10:01
Location: Tampa

Re: Client certificate auth - моментально 403 Forbidden

Post by VovaK98 »

Тут мне не особо понятно, кто виноват-клиент или сервер. Или вообще версия фреймворка.
На опыте- либо надо поднять клиента до TLS 1.2, тогда в исходнике где-нить наверху надо добавить вот это:

Code: Select all

const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;
ServicePointManager.SecurityProtocol = Tls12;
или если клиент некомпиляемый, тогда в app.config клиента вписать вот это:

Code: Select all

<configuration> 
<startup> <supportedRuntime version="v4.0"/> </startup> 
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"/> </runtime> 
</configuration>
Несите чушь бережно, стараясь не расплескать. Чушь хороша, когда она полная.
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Client certificate auth - моментально 403 Forbidden

Post by shadow7256 »

VovaK98 wrote: 16 Jul 2021 23:59 Тут мне не особо понятно, кто виноват-клиент или сервер. Или вообще версия фреймворка.
На опыте- либо надо поднять клиента до TLS 1.2, тогда в исходнике где-нить наверху надо добавить вот это:

Code: Select all

const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;
ServicePointManager.SecurityProtocol = Tls12;
или если клиент некомпиляемый, тогда в app.config клиента вписать вот это:

Code: Select all

<configuration> 
<startup> <supportedRuntime version="v4.0"/> </startup> 
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"/> </runtime> 
</configuration>
Обмен данными происходит через TLS 1.2. Написал простой код:

Code: Select all

X509Certificate2 certificate = GetX509Certificate (certThumbprint);

 HttpClientHandler handler = new HttpClientHandler
 {
        ClientCertificateOptions = ClientCertificateOption.Manual,
        SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls
 }; 

 handler.ClientCertificates.Add(certificate);

 HttpClient request = new HttpClient(handler);

 try
 {
         var result = request.GetAsync(url).Result;
         string resultContent = result.Content.ReadAsStringAsync().Result;

         Console.WriteLine($"Response: {resultContent}");
  }
  catch (Exception ex)
  {
        Console.WriteLine($"Exception while calling: {url}. Error: {ex.GetaAllMessages()}");
 }
запускаю на одной машине - все ОК. Запускаю на другой - проваливаемся в catch и видим

Exception while calling: {url}. Error: One or more errors occurred while sending the request :(
Palych
Уже с Приветом
Posts: 13729
Joined: 16 Jan 2001 10:01

Re: Client certificate auth - моментально 403 Forbidden

Post by Palych »

kostik78 wrote: 16 Jul 2021 23:02
Palych wrote: 16 Jul 2021 21:43 Когда всё это заработает, решится кто-нибудь подставить неправильный сертификат, чтобы убедиться что система защищена от несанкционированного доступа?
Не понятен Ваш скептицизм. Я построил не одну систему где сервисы (как шас принято называть микросервисами) использовали mutual cert auth и авторизация привелегий определялась самим конечным сертификатом через extension. Данные системы работают и довольно безопасны если сделаны верно :pain1:
То что системы работают - понятно.
А как Вы определяете что они довольно безопасны?

По поводу моего скепцитизма.
Давайте посмотрим правде в глаза:
Имеется инженер, достаточно грамотный вроде бы.
Он пытается решить элементарную проблему: почему система не пускает того, кто имеет право ей пользоваться.
Для этого он нюхает пакеты, взывает к помощи клуба...
И это не потому что он тупой. Система не предоставляет адекватных средств диагностики.
Имеем классический случай слишком сложного замка: рано или поздно дверь подопрут табуреткой.

К тому же упоминание "нормальных, не самоподписанных сертификатов" делает меня думать что в системе уже проделана дырка, и любой сертификат подписанный CA этого банка предоставит доступ к системе.
Palych
Уже с Приветом
Posts: 13729
Joined: 16 Jan 2001 10:01

Re: Client certificate auth - моментально 403 Forbidden

Post by Palych »

Случай из жизни:
Подключались мы к такому сервису. Сервис был в процессе разработки.
Как обычно, тестировали без всяких изотопов, а mutual authentication нашлепнули за неделю до релиза.
У нас заработало, у другого клиента - нет.
Главный инженер проекта покумекал немного, и принял соломоново решение:
Поскольку server authentication работает - система достаточно безопасна. Клиентов аутентифицировать не будем.
kostik78
Уже с Приветом
Posts: 3175
Joined: 17 May 2007 14:07

Re: Client certificate auth - моментально 403 Forbidden

Post by kostik78 »

Palych wrote: 17 Jul 2021 01:48
kostik78 wrote: 16 Jul 2021 23:02
Palych wrote: 16 Jul 2021 21:43 Когда всё это заработает, решится кто-нибудь подставить неправильный сертификат, чтобы убедиться что система защищена от несанкционированного доступа?
Не понятен Ваш скептицизм. Я построил не одну систему где сервисы (как шас принято называть микросервисами) использовали mutual cert auth и авторизация привелегий определялась самим конечным сертификатом через extension. Данные системы работают и довольно безопасны если сделаны верно :pain1:
То что системы работают - понятно.
А как Вы определяете что они довольно безопасны?

Определяю не я а время (то бишь хакеры) и penetration testing который требуется каждый год для прохождения разных аудитов.

Про допуск любого сертификата подписанного банка это как сделать authorization part. Да все сертификаты определенного chain будут проходить authentication но будут ли все сертификаты данной цепочки проходить authorization это уже вопрос дизайна сервера(сервиса)
kostik78
Уже с Приветом
Posts: 3175
Joined: 17 May 2007 14:07

Re: Client certificate auth - моментально 403 Forbidden

Post by kostik78 »

shadow7256 wrote: 17 Jul 2021 01:11
запускаю на одной машине - все ОК. Запускаю на другой - проваливаемся в catch и видим

Exception while calling: {url}. Error: One or more errors occurred while sending the request :(
Включили бы Вы уже логи и давно бы разобрались ;)
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Client certificate auth - моментально 403 Forbidden

Post by Мальчик-Одуванчик »

shadow7256 wrote: 17 Jul 2021 01:11 запускаю на одной машине - все ОК. Запускаю на другой - проваливаемся в catch и видим
А у этих двух машин полные доменные имена сильно отличаются?
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Client certificate auth - моментально 403 Forbidden

Post by shadow7256 »

kostik78 wrote: 17 Jul 2021 02:12
shadow7256 wrote: 17 Jul 2021 01:11
запускаю на одной машине - все ОК. Запускаю на другой - проваливаемся в catch и видим

Exception while calling: {url}. Error: One or more errors occurred while sending the request :(
Включили бы Вы уже логи и давно бы разобрались ;)
Так где эти логи включить то.
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Client certificate auth - моментально 403 Forbidden

Post by shadow7256 »

Мальчик-Одуванчик wrote: 17 Jul 2021 02:20
shadow7256 wrote: 17 Jul 2021 01:11 запускаю на одной машине - все ОК. Запускаю на другой - проваливаемся в catch и видим
А у этих двух машин полные доменные имена сильно отличаются?
У каких "двух" машин?

"Проблемный" клиент и сервер находятся в одной подсети, между ними нет никакого firewall. На клиенте запускаю tracert до сервера и выдает сразу первый же hop это hop сервера.

Повторюсь, как только я отключаю на сервере клиентскую аутентификацию, то все работает без проблем. Как только включаю ее, то начинается эта проблема. Вот код запуска сервера (self hosted API):

Code: Select all

 var config = new HttpsSelfHostConfiguration(uri);
 
config.Formatters.XmlFormatter.UseXmlSerializer = true;
 
config.MaxReceivedMessageSize = int.MaxValue;
 
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
                
config.ClientCredentialType = HttpClientCredentialType.Certificate; // вот тут вкл/выкл требование клиентского сертификата

var server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Client certificate auth - моментально 403 Forbidden

Post by shadow7256 »

kostik78 wrote: 17 Jul 2021 02:03 Про допуск любого сертификата подписанного банка это как сделать authorization part. Да все сертификаты определенного chain будут проходить authentication но будут ли все сертификаты данной цепочки проходить authorization это уже вопрос дизайна сервера(сервиса)
все абсолютно верно, но дело даже не в авторизации, сейчас хер с ней.

Судя по всему, раз сервер пускает запросы с одной машины и не пускает с другой, то наверное проблема где то на машине, с которой не пускает. А вот что за проблема непонятно.
kostik78
Уже с Приветом
Posts: 3175
Joined: 17 May 2007 14:07

Re: Client certificate auth - моментально 403 Forbidden

Post by kostik78 »

shadow7256 wrote: 17 Jul 2021 02:39
kostik78 wrote: 17 Jul 2021 02:12
shadow7256 wrote: 17 Jul 2021 01:11
запускаю на одной машине - все ОК. Запускаю на другой - проваливаемся в catch и видим

Exception while calling: {url}. Error: One or more errors occurred while sending the request :(
Включили бы Вы уже логи и давно бы разобрались ;)
Так где эти логи включить то.
Это видели ? https://stackoverflow.com/questions/597 ... webrequest

Взглянул быстро вроде бы как раз логи включает
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Client certificate auth - моментально 403 Forbidden

Post by shadow7256 »

kostik78 wrote: 17 Jul 2021 02:52
shadow7256 wrote: 17 Jul 2021 02:39
kostik78 wrote: 17 Jul 2021 02:12
shadow7256 wrote: 17 Jul 2021 01:11
запускаю на одной машине - все ОК. Запускаю на другой - проваливаемся в catch и видим

Exception while calling: {url}. Error: One or more errors occurred while sending the request :(
Включили бы Вы уже логи и давно бы разобрались ;)
Так где эти логи включить то.
Это видели ? https://stackoverflow.com/questions/597 ... webrequest

Взглянул быстро вроде бы как раз логи включает
ух ты, спасибо, подключил лог этот. В понедельник отдам индусу новую версию, пусть запускает с логами. Буду надеятся что покажет проблему.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Client certificate auth - моментально 403 Forbidden

Post by Мальчик-Одуванчик »

shadow7256 wrote: 17 Jul 2021 02:45 У каких "двух" машин?
У проблемного и беспроблемного клиентов.

Return to “Вопросы и новости IT”