Должен ли сервер или клиент быть в состоянии проверить сертификат клиент / сервер - промежуточную цепочку сертификатов с известным корневым сертификатом?
Я пытаюсь проверить следующую настройку:
Сервер 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, но я должен знать, будет ли это работать тоже.
Теперь мои вопросы:
- Законно ли, что открытый ключ представляет собой цепочку, состоящую из сертификата сервера / клиента и промежуточного сертификата?
- И если да, то относится ли это к обеим сторонам (серверу и клиенту)?
- Должен ли сервер (например, 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 ответа
- Да, хорошо использовать цепочки с общим посредником CA.
- Да.
- Да, и это так. Вам необходимо опубликовать отладочный вывод из FreeRADIUS. Сказать, что это возвращает "ошибка 20", бесполезно. Скорее всего, это не ошибка FreeRADIUS, а вывод из OpenSSL.
Кажется, проблема моей установки заключалась в том, что клиент отправил не полную цепочку клиент-промежуточный, а только сертификат клиента (разобрался с помощью Wireshark). С другой стороны, сервер-радиус, отправляющий промежуточную цепочку сервера, работает нормально.
Итак, чтобы ответить на мой вопрос: да, эта установка должна работать в обоих направлениях.