А как создавать цепочки подписанных сертификатов в openssl?
Создал собственный корневой CA (company.ru)
Выдал и подписал им сертификаты для почтового сервера (mail.company.ru) и radius сервера (radius.company.ru).
Создал клиентские сертификаты client1,2,3 для клиентов, для работы с почтовым сервером, подписал их тоже корневым сертификатом CA (company.ru).
Все замечательно работает.
Но возник вопрос.
В песпроводной сети используется WPA шифрование через EAP/TLS с использованием radius сервера. Аутентификация клиента - по сертификату.
И тут оказалось, что клиентские сертификаты, выданные для почты, отлично подходят для аутентификации на радиус сервере, т.е. любой клиент, которому выдан почтовый клиенсткий сертификат, может работать и с беспроводной сетью. Вероятно, он сможет работать и с веб-сервером, если там тоже настроить аутентификацию посредством сертификатов и тд.
Другими словами, одного сертификата клиента хватит для всего. Это хорошо, но если нужно разграничить доступ клиентам (например, всем можно пользоваться своей почтой, но только избранным - подключаться к беспроводной сети). Что тут делать?
Пришло в голову, что нужно подписывать клиентские сертификаты не корневым (CA, company.ru), а соответствующими сертификатами серверов - mail.company.ru, radius.company.ru (а они, в свою очередь, уже были подписаны корневым центром CA). Теоретически, если я правильно понимаю идеологию сертификатов, в этом случае сертификат, выданный для работы с почтой, не подойдет для аутентификации на радиус-сервере.
К сожалению, попытка подписать клиенсткий сертификат серверными не удалась.
Точнее, подпись, как таковая, успешно проходит, я получаю файл сертификата:
------
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 6 (0x6)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=RU, ST=Euro, L=Moscow, O=company.ru, OU=testlab, CN=radius.company.ru/emailAddress=eightn@company.ru
Validity
Not Before: Jun 6 12:22:02 2005 GMT
Not After : Jun 6 12:22:02 2007 GMT
Subject: C=RU, ST=Euro, L=Moscow, O=company.ru, OU=testlab, CN=client3/emailAddress=eightn@company.ru
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
------
но вот при попытке проверки такого сертификата
openssl verify -CAfile company.ru-ca.crt client3.crt
выдается примерно следующее:
client3.crt: /C=RU/ST=Euro/L=Moscow/O=company.ru/OU=testlab/CN=client3/emailAddress=eightn@company.ru
error 20 at 0 depth lookup:unable to get local issuer certificate
(вне зависимости от того, что ставить в CAfile - корневой сертификат (company.ru-ca.crt) или сертификат radius-сервера (radius.company.ru.crt), который в свою очередь, подписан корневым.
Указание пути -CApath к сертификатам тоже не помогает (выдается та же ошибка).
Та же ошибка выдается и при перечислении сертификатов цепочки:
openssl verify -CAfile company.ru-ca.crt radius.company.ru.crt client3.crt
radius.company.ru.crt: OK
client3.crt: /C=RU/ST=Euro/L=Moscow/O=company.ru/OU=testlab/CN=client3/emailAddress=eightn@company.ru
error 20 at 0 depth lookup:unable to get local issuer certificate