LINUX.ORG.RU

создание цепочки сертификатов


0

0

А как создавать цепочки подписанных сертификатов в 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@co mpany.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@co mpany.ru error 20 at 0 depth lookup:unable to get local issuer certificate


а терь тоже самое, в удобочитаемом виде :)

А как создавать цепочки подписанных сертификатов в 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@co
mpany.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@co
mpany.ru
error 20 at 0 depth lookup:unable to get local issuer certificate

eightn
() автор топика
Ответ на: комментарий от eightn

http://xca.sf.net , это чтобы не париться с сертификатами вообще (там есть и Win32 версия, сборка может показаться не тривиальной, но оно того стоит 100%).

Что касается вашего вопроса:
1. Можно ограничить в самом сертификате сферу его действия.
2. Для того, чтобы сертификат дочернего CA прошел проверку, нужно чтобы сертификат и корневого и дочернего CA присутствовали на проверяющей машине.

saper ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.