Должен ли сервер или клиент быть в состоянии проверить сертификат клиент / сервер - промежуточную цепочку сертификатов с известным корневым сертификатом?

Я пытаюсь проверить следующую настройку:

Сервер RADIUS работает с протоколом EAP-TLS. Клиент и сервер имеют следующие сертификаты:

клиент
Открытый ключ: clientcert_intermediatecert_chain.pem
CA-сертификат: rootcert.pem

сервер
Открытый ключ: servercert_intermediatecert_chain.pem
CA-сертификат: rootcert.pem

Оба, сертификат клиента (clientcert.pem) и сертификат сервера (servercert.pem) подписаны одним и тем же промежуточным сертификатом (intermediatecert.pem), который подписан корневым сертификатом (rootcert.pem).
Обе цепочки, для которых заданы открытые ключи, соединяются следующим образом (с помощью команды Shell):
cat servercert.pem intermediatecert.pem > servercert_intermediatecert_chain.pem
cat clientcert.pem intermediatecert.pem > clientcert_intermediatecert_chain.pem

Теперь клиент пытается подключиться к серверу. Обе стороны отправляют свои открытые ключи и пытаются проверить полученные открытые ключи с помощью rootcert.pem

Я знаю, что "нормальным" способом было бы, чтобы открытый ключ был только сертификатом сервера или клиента. И CA-сертификат будет цепочкой imcert-rootcert, но я должен знать, будет ли это работать тоже.

Теперь мои вопросы:

  1. Законно ли, что открытый ключ представляет собой цепочку, состоящую из сертификата сервера / клиента и промежуточного сертификата?
  2. И если да, то относится ли это к обеим сторонам (серверу и клиенту)?
  3. Должен ли сервер (например, FreeRADIUS) или клиент иметь возможность проверять подобные цепочки с помощью корневого сертификата, если они получают их от контрагента?

Исходя из моего опыта, FreeRADIUS не проверяет право такой цепочки сертификатов. Если я не ошибаюсь, FreeRADIUS использует библиотеку OpenSSL и делает то же самое, что и следующая команда в ситуации, показанной выше:

openssl verify -CAfile rootcert.pem clientcert_intermediatecert_chain.pem

И я уверен, что это не работает. OpenSSL не может проверить цепочку, подобную этой, с корневым сертификатом. Это терпит неудачу при попытке соединить цепочку доверия.
Это правильно?

Кстати, FreeRADIUS возвращает ту же ошибку, что и команда verify: error 20 at 0 depth: cannot find issuer certificate что означает, что это не может соединить цепочку доверия.

2 ответа

Решение
  1. Да, хорошо использовать цепочки с общим посредником CA.
  2. Да.
  3. Да, и это так. Вам необходимо опубликовать отладочный вывод из FreeRADIUS. Сказать, что это возвращает "ошибка 20", бесполезно. Скорее всего, это не ошибка FreeRADIUS, а вывод из OpenSSL.

Кажется, проблема моей установки заключалась в том, что клиент отправил не полную цепочку клиент-промежуточный, а только сертификат клиента (разобрался с помощью Wireshark). С другой стороны, сервер-радиус, отправляющий промежуточную цепочку сервера, работает нормально.

Итак, чтобы ответить на мой вопрос: да, эта установка должна работать в обоих направлениях.

Другие вопросы по тегам