Рейтинг:1

Может ли сервер предлагать более одного сертификата TLS?

флаг br

Допустим, у меня есть сертификат TLS для домена, но я не уверен, что все пользовательские агенты, потенциально подключающиеся через HTTP, примут его. Могу ли я получить другой сертификат, подписанный другим центром сертификации, и использовать его в таких случаях в качестве запасного варианта, прозрачно для пользователя? Если это возможно, как будет происходить взаимодействие между клиентом и сервером для установления безопасного соединения? И хорошо ли этот вариант использования известен и поддерживается ли конфигурация популярных HTTP-серверов?

Я знаю, что есть похожие вопросы, но они спрашивают об изменении используемого сертификата по поддомену (возможно) или префиксу пути (невозможно, IIUC, потому что во время согласования сервер знает только полномочия, а не полный Request-URI).

Paul avatar
флаг cn
У меня нет источника для этого, кроме как заявить, что я вижу много сайтов Cloudflare, особенно с сертификатами EC и RSA. Я предполагаю, что клиент решает, какой из них использовать.
Рейтинг:2
флаг cn
Bob

Может ли сервер предлагать более одного сертификата TLS?

Сервер может поддерживать более одного сертификата TLS. Но это может только предложение один сертификат TLS в рукопожатии TLS с клиентом. Насколько я знаю, это ограничение, установленное в протоколе TLS (рукопожатие). RFC 5246

Возможность поддерживать несколько сертификатов чаще всего используются, когда у вас есть несколько разных доменных имен, которые указывают на один и тот же сервер.

Индикация имени сервера отправляет имя хоста сервера в рукопожатии TLS, сделанном клиентом. Это позволяет серверу выбрать наиболее подходящий сертификат для использования в этом соединении. т.е. сервер может затем использовать сертификат для www.example.com когда клиент указывает, что он хочет подключиться к www.example.com и он может использовать другой сертификат (или сертификат по умолчанию), когда клиент подключается, например, только с IP-адресом, без имени хоста или с другим именем хоста в сообщении ClientHello.

В дополнение к имени сервера из сообщения рукопожатия ClientHello TLS сервер можно настроить на использование других параметров для выбора другого сертификата.

Например, когда во время рукопожатия TLSv1.2 клиент указывает, что первым предпочтением является использование эллиптических кривых, а не RSA, тогда может быть предложен ключ/сертификат ECDSA, а для клиентов, которые этого не делают, вместо этого может быть предложен сертификат RSA.
См. например https://www.haproxy.com/blog/serving-ecc-and-rsa-certificates-on-same-ip-with-haproxy/ и/или https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile

Вы можете сделать то же самое, например, с устаревшими клиентами, которые не поддерживают шифры выше TLSv1.0.

Но как только сертификат выбран сервером, отката нет, клиент либо принимает, либо отклоняет предложенный сертификат.

ByteEater avatar
флаг br
[Этот ответ] (https://security.stackexchange.com/a/46992) цитирует RFC 5426, раздел 7.4.1.1: «Сообщение HelloRequest МОЖЕТ быть отправлено сервером в любое время». Можно ли использовать его для предложения другого сертификата, когда клиент отклонил ранее предложенный?
флаг cn
Bob
Трудно что-то отправить, когда клиент разорвал соединение, потому что он не может проверить сертификат сервера...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.