Client certificate auth - моментально 403 Forbidden
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Client certificate auth - моментально 403 Forbidden
Уважаемые,
на сервере есть WEB API (self hosted, имплементировано на .NET), которая требует при каждом запросе предьявить валидный Client Certificate.
Но вот какая проблема.
Когда я, с моей машины (А) из браузера пытаюсь вызвать какой то метод из этого API, то браузер мне вываливает окошко с предложением выбрать клиентский сертификат (из того списка сертификатов, что доступны на моей машине). Все четко и правильно. Браузер послал запрос к API, ему пришел ответ что нужен сертификат, он показал мне выбор сертификатов.
Когда я набираю тот же URL в браузере на другой машине (В), то мне сразу же возвращается 403 Forbidden ответ. Никакого диалога с выбором сертификатов я не получаю вообще.
Если я на стороне сервера (WEB API) отключу требование наличия клиентского сертификата, то я могу запрашивать API с обоих машин без проблем.
Но как только я включаю требование иметь клиентский сертификат, то на все запросы с машины В сразу же получаю 403 Forbidden в ответ.
У меня есть клиентское приложение (тоже на .NET) которое работает с API и в коде в каждом запросе прикладывает сертификат.
Если я запускаю прилоежние с моего компутера, то все в порядке и запрос уходит и обрабатывается сервером.
Как только я запускаю тоже самое приложение на машине В, то в клиентском коде сразу же получаю 403 forbidden ответ.
Получается какая то проблема между машиной В и сервером? Никак не пойму в чем дело..
Пытался Wireshark пронюзхать траффик между В и сервером, но ничего не смог найти.. одни TLS, TCP и UDP пакеты
на сервере есть WEB API (self hosted, имплементировано на .NET), которая требует при каждом запросе предьявить валидный Client Certificate.
Но вот какая проблема.
Когда я, с моей машины (А) из браузера пытаюсь вызвать какой то метод из этого API, то браузер мне вываливает окошко с предложением выбрать клиентский сертификат (из того списка сертификатов, что доступны на моей машине). Все четко и правильно. Браузер послал запрос к API, ему пришел ответ что нужен сертификат, он показал мне выбор сертификатов.
Когда я набираю тот же URL в браузере на другой машине (В), то мне сразу же возвращается 403 Forbidden ответ. Никакого диалога с выбором сертификатов я не получаю вообще.
Если я на стороне сервера (WEB API) отключу требование наличия клиентского сертификата, то я могу запрашивать API с обоих машин без проблем.
Но как только я включаю требование иметь клиентский сертификат, то на все запросы с машины В сразу же получаю 403 Forbidden в ответ.
У меня есть клиентское приложение (тоже на .NET) которое работает с API и в коде в каждом запросе прикладывает сертификат.
Если я запускаю прилоежние с моего компутера, то все в порядке и запрос уходит и обрабатывается сервером.
Как только я запускаю тоже самое приложение на машине В, то в клиентском коде сразу же получаю 403 forbidden ответ.
Получается какая то проблема между машиной В и сервером? Никак не пойму в чем дело..
Пытался Wireshark пронюзхать траффик между В и сервером, но ничего не смог найти.. одни TLS, TCP и UDP пакеты
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Client certificate auth - моментально 403 Forbidden
Два варианта - машина Б не поддерживает сайферы (старая SSL library) и по этому не устанавливается тунель и это видно в Wireshark. Либо на ней выключена negotiation и соотвественно не предлагается выбор сертификатов что тоже видно в Wireshark. Ещё советую включить ssl logs в .NET(как делается не знаю ибо не работаю с ним про жабу или нативный OpenSSL сказал бы сразу) и поглядеть там чем копаться в Wireshark
Я предполагаю что Ваш сервер обновлён и использует последние ssl и т.п. иначе может быть обратный вариант когда машина Б имеет более новые версии ssl и не хочет работать с «дырявым» сервером
Я предполагаю что Ваш сервер обновлён и использует последние ssl и т.п. иначе может быть обратный вариант когда машина Б имеет более новые версии ssl и не хочет работать с «дырявым» сервером
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
То есть намек на то, что до момента, когда клиенту (машине Б) пора выбирать сертификат дело даже не доходит и туннель рвется еще раньше (при TLS handshake) ?
Дело в том, что проблема с моментальным возвратом 403 происходит и в клиентском приложении. Там клиентский сертификат прикладывается внутри приложения, его не надо выбирать. Что то типа:
Code: Select all
HttpClient client = new HttpClient ();
client.ClientCertificates.Add (....);
надо пошукать есть ли такое в .NET. В Wireshark очень уж муторно копаться, плюс там TLS протокол и все зашифровано.
Кстати.. запускал браузер на самом СЕРВЕРЕ и пытался обратится к API, которая хостится на этом же сервере - никакого выбора сертификатов - сразу 403.Я предполагаю что Ваш сервер обновлён и использует последние ssl и т.п. иначе может быть обратный вариант когда машина Б имеет более новые версии ssl и не хочет работать с «дырявым» сервером
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Client certificate auth - моментально 403 Forbidden
Ну я бы проверил что тунель устанавливается и то что сервер присылает запрос на клиентский сертификат. Это все видно в SSL logs. Я думаю что дотнет позволяет такие логи включать на 100%. Но сразу говорю там дофига логов
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Client certificate auth - моментально 403 Forbidden
Кстати надеюсь Вы в клиенте регистрируете пару: сертификат и приватный ключ ?
-
- Уже с Приветом
- Posts: 34164
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Client certificate auth - моментально 403 Forbidden
Обычно это видно в handshake если дело идет в Яве там устанавливается системное проперти
System.setProperty("javax.net.debug", "ssl,handshake");
Что-то подобное должно быть и в .Нет
У меня об этом первая статья в блоге с годами оказалась самая популярная по числу посещений
https://vyatkins.wordpress.com/2013/11/ ... fications/
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
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
Вот в шарке вижу такие пакеты (236 это клиент, 234 это сервер)
Клиент посылает Client hello, сервер отвечает Server hello и отсылает назад свой серверный сертификат (WEB API работает по HTTPS протоколу).
И вроде видно что потом клиент просит поменять сайфер - Change cipher spec. Дальше хрен знает что происходит..
Клиент посылает 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.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Client certificate auth - моментально 403 Forbidden
В клиентском коде когда Вы создаете http клиента, клиенту надо регистрировать клиентский сертификат и приватный ключ вместе иначе работать не будет. На стороне сервера обычно ставиться просто chain ... Индивидуальный клиентский сертификат регистрировать это в будущем проблем себе апдейтами искать на одно место но для отладки пойдет и так.shadow7256 wrote: ↑14 Jul 2021 02:30Вы про клиентский сертификат? да конечно, он установлен в Certificate store на стороне клиента (и на сервере тоже)
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
А что Вы имеете в виду ? На клиентской машине установлен Client certificate + private key. В коде мы его считываем из репозитория и подключаем в Http запрос.
You do not have the required permissions to view the files attached to this post.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
Захватил пакеты, когда клиенту показывается окошко для выбора сертификатов, но никак не могу понять в каком месте в этих пакетах указывается, что сервер требует клиентский сертификат
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Client certificate auth - моментально 403 Forbidden
Для mutual auth и чтобы клиентский сертификат посылался на запрос сервера клиент должен иметь и сертификат и ключ. Когда Вы работает с браузером браузер из стора берет оба. Мой вопрос был про то как Вы конфигурируете http client в коде. Убедитесь что Вы добавляете и сертификат и приватный ключ. Иначе ничего работать не будет.shadow7256 wrote: ↑14 Jul 2021 12:08А что Вы имеете в виду ? На клиентской машине установлен Client certificate + private key. В коде мы его считываем из репозитория и подключаем в Http запрос.
Untitled.png
Сервер запрашивает сертификат клиента в SERVER HELLO
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
Да, конечно я добавляю и сертификат и ключ. Код просто считывает клиентский сертификат из Certificate store (как массив байтов) и добавляет его в запрос. Сертификат содержит приватный ключ, по другому работать не будет да.
Я рою в инете и вот что надыбал. Скорее всего происходит следующее:
Устанавливается 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 запрещено на клиенте. Вот как бы посмотреть где это запрещено или разрешено..
-
- Уже с Приветом
- Posts: 13709
- Joined: 16 Jan 2001 10:01
Re: Client certificate auth - моментально 403 Forbidden
А я говорил что certificate based authentication суть зло аццкое.
Каждый раз его бьют вслепую пока не заработает.
Потом молятся чтобы не сломалось.
А уж проверить обеспечивает ли оно безопасность - об этом вообще речи не заходит.
Каждый раз его бьют вслепую пока не заработает.
Потом молятся чтобы не сломалось.
А уж проверить обеспечивает ли оно безопасность - об этом вообще речи не заходит.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
как обычно имплементация работает на наших серверах и не работает в этом дебильном Barclays. Завтра буду ловить пакеты у них на сервере и смотреть что там за ботва у них.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Client certificate auth - моментально 403 Forbidden
Какой то из старых security updates запрещал tls renegotiation:
https://blogs.msmvps.com/alunj/2010/02/ ... oundpatch/
https://blogs.msmvps.com/alunj/2010/02/ ... oundpatch/
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
Вроде продвинулись.. Пронюхали пакеты и увидели, что на Application layer связь идет через HTTP/2 протокол. А WEB API с клиентским сертификатом не поддерживает HTTP/2 и требует HTTP 1.1. Поэтому видим, что от сервера приходит ответ HTTP_1.1_Required. И на этом все обрывается.
все таки проблема скорее всего из за TLS renegotiation Как то можно посмотреть запрещено ли re-negotiation или нет?
все таки проблема скорее всего из за TLS renegotiation Как то можно посмотреть запрещено ли re-negotiation или нет?
-
- Уже с Приветом
- Posts: 13709
- Joined: 16 Jan 2001 10:01
Re: Client certificate auth - моментально 403 Forbidden
Тогда откуда 403?shadow7256 wrote: ↑15 Jul 2021 17:49 Вроде продвинулись.. Пронюхали пакеты и увидели, что на Application layer связь идет через HTTP/2 протокол. А WEB API с клиентским сертификатом не поддерживает HTTP/2 и требует HTTP 1.1. Поэтому видим, что от сервера приходит ответ HTTP_1.1_Required. И на этом все обрывается.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
Хрен его знаетPalych wrote: ↑16 Jul 2021 05:17Тогда откуда 403?shadow7256 wrote: ↑15 Jul 2021 17:49 Вроде продвинулись.. Пронюхали пакеты и увидели, что на Application layer связь идет через HTTP/2 протокол. А WEB API с клиентским сертификатом не поддерживает HTTP/2 и требует HTTP 1.1. Поэтому видим, что от сервера приходит ответ HTTP_1.1_Required. И на этом все обрывается.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Client certificate auth - моментально 403 Forbidden
Так наверное клиент не соглашается
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Client certificate auth - моментально 403 Forbidden
Еще больше пронюхал.. вижу запрос от сервера, где он просит клиента предоставить клиентский сертификат.
В ответ клиент шлет сразу же ответ и НЕ шлет никакого сертификата.
Посмотрите пакет 44 (ответ клиента). и ниже Certificate -> 0.
И у клиента в браузере не выскакивает окошко для выбора сертификата.. вот в чем проблема
В ответ клиент шлет сразу же ответ и НЕ шлет никакого сертификата.
Посмотрите пакет 44 (ответ клиента). и ниже Certificate -> 0.
И у клиента в браузере не выскакивает окошко для выбора сертификата.. вот в чем проблема
You do not have the required permissions to view the files attached to this post.
-
- Администратор
- Posts: 2126
- Joined: 18 Apr 2010 18:09
Re: Client certificate auth - моментально 403 Forbidden
HTTP/2 standard has no implementation for client certificate authentication.shadow7256 wrote: ↑16 Jul 2021 15:35 Еще больше пронюхал.. вижу запрос от сервера, где он просит клиента предоставить клиентский сертификат.
-
- Администратор
- Posts: 2126
- Joined: 18 Apr 2010 18:09
Re: Client certificate auth - моментально 403 Forbidden
пишут, что ставили nginx перед iis и тогда работало
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Client certificate auth - моментально 403 Forbidden
Ну вот и разобрались что проблема на стороне клиента
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Client certificate auth - моментально 403 Forbidden
Чего то Вы запутали совсем. Насколько я понял у Вас была проблема с С# клиентом а теперь Вы говорите про браузер. В браузере окошко выбора сертификатов может не появляется по причине security settings на самом браузере. В C# скорее всего другая проблема и я давно посоветовал Вам SSL логи включить.shadow7256 wrote: ↑16 Jul 2021 15:35
Посмотрите пакет 44 (ответ клиента). и ниже Certificate -> 0.
И у клиента в браузере не выскакивает окошко для выбора сертификата.. вот в чем проблема