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

shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

Уважаемые,

на сервере есть WEB API (self hosted, имплементировано на .NET), которая требует при каждом запросе предьявить валидный Client Certificate.

Но вот какая проблема.

Когда я, с моей машины (А) из браузера пытаюсь вызвать какой то метод из этого API, то браузер мне вываливает окошко с предложением выбрать клиентский сертификат (из того списка сертификатов, что доступны на моей машине). Все четко и правильно. Браузер послал запрос к API, ему пришел ответ что нужен сертификат, он показал мне выбор сертификатов.

Когда я набираю тот же URL в браузере на другой машине (В), то мне сразу же возвращается 403 Forbidden ответ. Никакого диалога с выбором сертификатов я не получаю вообще. :cry:

Если я на стороне сервера (WEB API) отключу требование наличия клиентского сертификата, то я могу запрашивать API с обоих машин без проблем.
Но как только я включаю требование иметь клиентский сертификат, то на все запросы с машины В сразу же получаю 403 Forbidden в ответ.

У меня есть клиентское приложение (тоже на .NET) которое работает с API и в коде в каждом запросе прикладывает сертификат.

Если я запускаю прилоежние с моего компутера, то все в порядке и запрос уходит и обрабатывается сервером.

Как только я запускаю тоже самое приложение на машине В, то в клиентском коде сразу же получаю 403 forbidden ответ.

Получается какая то проблема между машиной В и сервером? Никак не пойму в чем дело..

Пытался Wireshark пронюзхать траффик между В и сервером, но ничего не смог найти.. одни TLS, TCP и UDP пакеты
kostik78
Уже с Приветом
Posts: 3170
Joined: 17 May 2007 14:07

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

Post by kostik78 »

Два варианта - машина Б не поддерживает сайферы (старая SSL library) и по этому не устанавливается тунель и это видно в Wireshark. Либо на ней выключена negotiation и соотвественно не предлагается выбор сертификатов что тоже видно в Wireshark. Ещё советую включить ssl logs в .NET(как делается не знаю ибо не работаю с ним про жабу или нативный OpenSSL сказал бы сразу) и поглядеть там чем копаться в Wireshark

Я предполагаю что Ваш сервер обновлён и использует последние ssl и т.п. иначе может быть обратный вариант когда машина Б имеет более новые версии ssl и не хочет работать с «дырявым» сервером
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

kostik78 wrote: 14 Jul 2021 01:17 Два варианта - машина Б не поддерживает сайферы (старая SSL library) и по этому не устанавливается тунель и это видно в Wireshark.
То есть намек на то, что до момента, когда клиенту (машине Б) пора выбирать сертификат дело даже не доходит и туннель рвется еще раньше (при TLS handshake) ?
kostik78 wrote: 14 Jul 2021 01:17 Либо на ней выключена negotiation и соотвественно не предлагается выбор сертификатов что тоже видно в Wireshark.
Дело в том, что проблема с моментальным возвратом 403 происходит и в клиентском приложении. Там клиентский сертификат прикладывается внутри приложения, его не надо выбирать. Что то типа:

Code: Select all

HttpClient client = new HttpClient ();
client.ClientCertificates.Add (....);
kostik78 wrote: 14 Jul 2021 01:17 Ещё советую включить ssl logs в .NET(как делается не знаю ибо не работаю с ним про жабу или нативный OpenSSL сказал бы сразу) и поглядеть там чем копаться в Wireshark
надо пошукать есть ли такое в .NET. В Wireshark очень уж муторно копаться, плюс там TLS протокол и все зашифровано.
Я предполагаю что Ваш сервер обновлён и использует последние ssl и т.п. иначе может быть обратный вариант когда машина Б имеет более новые версии ssl и не хочет работать с «дырявым» сервером
Кстати.. запускал браузер на самом СЕРВЕРЕ и пытался обратится к API, которая хостится на этом же сервере - никакого выбора сертификатов - сразу 403.
kostik78
Уже с Приветом
Posts: 3170
Joined: 17 May 2007 14:07

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

Post by kostik78 »

Ну я бы проверил что тунель устанавливается и то что сервер присылает запрос на клиентский сертификат. Это все видно в SSL logs. Я думаю что дотнет позволяет такие логи включать на 100%. Но сразу говорю там дофига логов :)
kostik78
Уже с Приветом
Posts: 3170
Joined: 17 May 2007 14:07

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

Post by kostik78 »

Кстати надеюсь Вы в клиенте регистрируете пару: сертификат и приватный ключ ?
User avatar
Sergunka
Уже с Приветом
Posts: 34124
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

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

Post by Sergunka »

Обычно это видно в handshake если дело идет в Яве там устанавливается системное проперти

System.setProperty("javax.net.debug", "ssl,handshake");

Что-то подобное должно быть и в .Нет

У меня об этом первая статья в блоге с годами оказалась самая популярная по числу посещений
https://vyatkins.wordpress.com/2013/11/ ... fications/
"A patriot must always be ready to defend his country against his government." Edward Abbey
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

Вот в шарке вижу такие пакеты (236 это клиент, 234 это сервер)
Untitled.png
Клиент посылает Client hello, сервер отвечает Server hello и отсылает назад свой серверный сертификат (WEB API работает по HTTPS протоколу).

И вроде видно что потом клиент просит поменять сайфер - Change cipher spec. Дальше хрен знает что происходит..
You do not have the required permissions to view the files attached to this post.
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

kostik78 wrote: 14 Jul 2021 02:04 Кстати надеюсь Вы в клиенте регистрируете пару: сертификат и приватный ключ ?
Вы про клиентский сертификат? да конечно, он установлен в Certificate store на стороне клиента (и на сервере тоже)
kostik78
Уже с Приветом
Posts: 3170
Joined: 17 May 2007 14:07

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

Post by kostik78 »

shadow7256 wrote: 14 Jul 2021 02:30
kostik78 wrote: 14 Jul 2021 02:04 Кстати надеюсь Вы в клиенте регистрируете пару: сертификат и приватный ключ ?
Вы про клиентский сертификат? да конечно, он установлен в Certificate store на стороне клиента (и на сервере тоже)
В клиентском коде когда Вы создаете http клиента, клиенту надо регистрировать клиентский сертификат и приватный ключ вместе иначе работать не будет. На стороне сервера обычно ставиться просто chain ... Индивидуальный клиентский сертификат регистрировать это в будущем проблем себе апдейтами искать на одно место но для отладки пойдет и так.
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

kostik78 wrote: 14 Jul 2021 02:41 клиенту надо регистрировать клиентский сертификат и приватный ключ вместе
А что Вы имеете в виду ? На клиентской машине установлен Client certificate + private key. В коде мы его считываем из репозитория и подключаем в Http запрос.
Untitled.png
You do not have the required permissions to view the files attached to this post.
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

Захватил пакеты, когда клиенту показывается окошко для выбора сертификатов, но никак не могу понять в каком месте в этих пакетах указывается, что сервер требует клиентский сертификат
kostik78
Уже с Приветом
Posts: 3170
Joined: 17 May 2007 14:07

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

Post by kostik78 »

shadow7256 wrote: 14 Jul 2021 12:08
kostik78 wrote: 14 Jul 2021 02:41 клиенту надо регистрировать клиентский сертификат и приватный ключ вместе
А что Вы имеете в виду ? На клиентской машине установлен Client certificate + private key. В коде мы его считываем из репозитория и подключаем в Http запрос.

Untitled.png
Для mutual auth и чтобы клиентский сертификат посылался на запрос сервера клиент должен иметь и сертификат и ключ. Когда Вы работает с браузером браузер из стора берет оба. Мой вопрос был про то как Вы конфигурируете http client в коде. Убедитесь что Вы добавляете и сертификат и приватный ключ. Иначе ничего работать не будет.


Сервер запрашивает сертификат клиента в SERVER HELLO
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

kostik78 wrote: 14 Jul 2021 16:50 Мой вопрос был про то как Вы конфигурируете http client в коде. Убедитесь что Вы добавляете и сертификат и приватный ключ. Иначе ничего работать не будет.
Да, конечно я добавляю и сертификат и ключ. Код просто считывает клиентский сертификат из Certificate store (как массив байтов) и добавляет его в запрос. Сертификат содержит приватный ключ, по другому работать не будет да.
kostik78 wrote: 14 Jul 2021 16:50 Сервер запрашивает сертификат клиента в SERVER HELLO
Я рою в инете и вот что надыбал. Скорее всего происходит следующее:

Устанавливается HTTPS соединение

1. Клиент шлет Client Hello.
2. Cервер отвечает Server Hello (сервер НЕ запрашивает на данном этапе клиентский сертификат).
3. Клиент шлет Change cipher
4. Сервер отвечает.

Клиент пытается вызвать метод API и вот тут сервер сообщает клиенту, что нужно предоставить сертификат и происходит TLS Re-negotiation.

Опять идет Client Hello, Server Hello, но на данном этапе сервер уже просит сертификат. Вот тут как раз на клиенте выскакивает окошко со списком серфитикатов.

Пишут, что иногда, чтобы обезопасится от Man in the Middle attack, TLS Re-negotiation запрещено на клиенте. Вот как бы посмотреть где это запрещено или разрешено..
Palych
Уже с Приветом
Posts: 13669
Joined: 16 Jan 2001 10:01

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

Post by Palych »

А я говорил что certificate based authentication суть зло аццкое.
Каждый раз его бьют вслепую пока не заработает.
Потом молятся чтобы не сломалось.
А уж проверить обеспечивает ли оно безопасность - об этом вообще речи не заходит.
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

Palych wrote: 15 Jul 2021 00:30 А я говорил что certificate based authentication суть зло аццкое.
Каждый раз его бьют вслепую пока не заработает.
Потом молятся чтобы не сломалось.
А уж проверить обеспечивает ли оно безопасность - об этом вообще речи не заходит.
как обычно имплементация работает на наших серверах и не работает в этом дебильном Barclays. Завтра буду ловить пакеты у них на сервере и смотреть что там за ботва у них.
User avatar
Flash-04
Уже с Приветом
Posts: 63377
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

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

Post by Flash-04 »

Какой то из старых security updates запрещал tls renegotiation:
https://blogs.msmvps.com/alunj/2010/02/ ... oundpatch/
Not everyone believes what I believe but my beliefs do not require them to.
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

Вроде продвинулись.. Пронюхали пакеты и увидели, что на Application layer связь идет через HTTP/2 протокол. А WEB API с клиентским сертификатом не поддерживает HTTP/2 и требует HTTP 1.1. Поэтому видим, что от сервера приходит ответ HTTP_1.1_Required. И на этом все обрывается.

все таки проблема скорее всего из за TLS renegotiation :( Как то можно посмотреть запрещено ли re-negotiation или нет?
Palych
Уже с Приветом
Posts: 13669
Joined: 16 Jan 2001 10:01

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

Post by Palych »

shadow7256 wrote: 15 Jul 2021 17:49 Вроде продвинулись.. Пронюхали пакеты и увидели, что на Application layer связь идет через HTTP/2 протокол. А WEB API с клиентским сертификатом не поддерживает HTTP/2 и требует HTTP 1.1. Поэтому видим, что от сервера приходит ответ HTTP_1.1_Required. И на этом все обрывается.
Тогда откуда 403?
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

Palych wrote: 16 Jul 2021 05:17
shadow7256 wrote: 15 Jul 2021 17:49 Вроде продвинулись.. Пронюхали пакеты и увидели, что на Application layer связь идет через HTTP/2 протокол. А WEB API с клиентским сертификатом не поддерживает HTTP/2 и требует HTTP 1.1. Поэтому видим, что от сервера приходит ответ HTTP_1.1_Required. И на этом все обрывается.
Тогда откуда 403?
Хрен его знает :(
User avatar
Flash-04
Уже с Приветом
Posts: 63377
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

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

Post by Flash-04 »

Так наверное клиент не соглашается :)
Not everyone believes what I believe but my beliefs do not require them to.
shadow7256
Уже с Приветом
Posts: 9388
Joined: 18 Mar 2004 15:11
Location: New York -> FL

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

Post by shadow7256 »

Еще больше пронюхал.. вижу запрос от сервера, где он просит клиента предоставить клиентский сертификат.

В ответ клиент шлет сразу же ответ и НЕ шлет никакого сертификата.
Untitled.png
Посмотрите пакет 44 (ответ клиента). и ниже Certificate -> 0.

И у клиента в браузере не выскакивает окошко для выбора сертификата.. вот в чем проблема :(
You do not have the required permissions to view the files attached to this post.
mitnlag
Администратор
Posts: 2127
Joined: 18 Apr 2010 18:09

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

Post by mitnlag »

shadow7256 wrote: 16 Jul 2021 15:35 Еще больше пронюхал.. вижу запрос от сервера, где он просит клиента предоставить клиентский сертификат.
HTTP/2 standard has no implementation for client certificate authentication.
mitnlag
Администратор
Posts: 2127
Joined: 18 Apr 2010 18:09

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

Post by mitnlag »

пишут, что ставили nginx перед iis и тогда работало
User avatar
Flash-04
Уже с Приветом
Posts: 63377
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

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

Post by Flash-04 »

Ну вот и разобрались что проблема на стороне клиента
Not everyone believes what I believe but my beliefs do not require them to.
kostik78
Уже с Приветом
Posts: 3170
Joined: 17 May 2007 14:07

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

Post by kostik78 »

shadow7256 wrote: 16 Jul 2021 15:35
Посмотрите пакет 44 (ответ клиента). и ниже Certificate -> 0.

И у клиента в браузере не выскакивает окошко для выбора сертификата.. вот в чем проблема :(
Чего то Вы запутали совсем. Насколько я понял у Вас была проблема с С# клиентом а теперь Вы говорите про браузер. В браузере окошко выбора сертификатов может не появляется по причине security settings на самом браузере. В C# скорее всего другая проблема и я давно посоветовал Вам SSL логи включить.

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