LINUX.ORG.RU

openssl: работа с удостоверяющим центром (CA)

 


0

1

Всем привет!

Разбираюсь с openssl, есть непонимание относительно следующей ситуации:
- на CA сгенерирован приватный ключ ca.key и самоподписанный сертификат ca.crt
- с помощью ca.key я могу подписать клиентский запрос client.csr и получить сертификат client.crt
- имея (client.key, ca.crt, client.crt) на клиенте и (ca.key, ca.crt) на СА, я могу обеспечивать между ними безопасное соединение

Теперь я хочу сгенерировать новый ключ ca2.key и сертификат ca2.crt, такие, чтобы безопасное соединение было возможно и с теми клиентами, кто подписан ca.key, и с теми, кто подписан ca2.key

Как получить такой ключ и сертификат? Что в терминах openssl значит «добавить ключ в корень доверия CA»?

Как получить такой ключ и сертификат?

Лучше делать не так как у тебя. Сделай один рутовый CA, приватный ключ которого, в принципе, для установления соединения и не будет использоваться. Итак, теперь у нас есть ca.crt и ca.key.

Приватным ключем ca.key подписывай сертификаты для серверов и клиентов. Если у тебя есть сервера server1, server2 и клиенты client1, client2, то тебе на основе запросов server1.csr, server2.csr, client1.csr, client2.csr нужно создать сертификаты server1.crt, server2.crt, client1.crt, client2.crt.

Теперь server1 должен использовать свой приватный ключ server1.key и, ВНИМАНИЕ, ЦЕПОЧКУ сертификатов - в ней должен быть сертификат сервера и сертификат CA. Т.е. в файле должны находиться server1.crt и ca.crt. На сервере server2 - аналогично, т.е. server2.key и цепочка с server2.crt и ca.crt.

Аналогично делается и на клиентах - на клиенте client 1 будет приватный ключ client1.key и ЦЕПОЧКА сертификатов client1.crt, ca.crt. Для client2 аналогично.

Теперь осталось сделать так, что бы клиенты и серверы другу друг начали доверять. Для этого и на клиентах и на сервере нужно в качестве доверенного CA добавить наш CA (ca.crt). У разных приложения опции могут называться по-разному, в терминах OpenSSL это значит, что должна быть вызвана функция

int SSL_CTX_load_verify_locations(SSL_CTX *ctx, char *CAfile, char *CApath);

и в CAfile или в CApath должен находиться сертификат CA - ca.crt.

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