У меня есть SSL-клиент и сервер, и тестирование ИПК как этот
как загрузить дополнительный ненадежный сертификат в SSL_CTX
root_ca -> server_singing_ca -> ssl server
|--> client_signing_ca -> ssl client
на сервере, я поставил сертификат сервера и сертификат server_signing_ca в тот же файл , и загрузить файл, используя
SSL_CTX_use_certificate_chain_file().
Это работает. Неверный промежуточный сертификат автоматически отправляется клиенту во время рукопожатия.
Мой вопрос: я хочу свести к минимуму обмен данными во время рукопожатия. Есть ли способ, чтобы клиент мог хранить копию сертификата server_signing_ca заранее, поэтому я могу удалить его с другой стороны?
И я не хочу добавлять cert_signing_ca в доверенный магазин.
Каков API для клиента для загрузки сертификата server_signing_ca? Я посмотрел в
SSL_CTX_add_extra_chain_cert().
Но, кажется, это для клиента, чтобы загрузить сертификат client_signing_ca, чтобы сформировать цепочку сертификатов.
Спасибо за ответ. Еще один вопрос: я добавил сертификат server_signing_ca в доверенный магазин клиентов. На стороне сервера нет сертификата server_signing_ca. Оно работает. Но мне интересно, это разрешено стандартом? Это лучшая практика? Я помню, «только самозаверяющий сертификат может находиться в доверенном хранилище сертификатов» –
@JohnCrane: по стандарту в цепочке можно исключить только самый верхний корневой ЦС. Я не уверен в лучших практиках. Вы правы, что доверенный самоподписанный сертификат доверенного центра сертификации Root (например, Verisign) находится в доверенном хранилище сертификатов. Однако пользователь на свой страх и риск может добавить другой сертификат по выбору. Требуется только то, что клиент должен иметь возможность проверять личность сервера без какого-либо исключения. – doptimusprime