2013-04-14 2 views
0

У меня есть 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, чтобы сформировать цепочку сертификатов.

ответ

1

См. RFC, связанные с протоколом SSL/TLS (один из них - here). Как правило, сервер должен отправить цепочку сертификата, где корневой ЦС может быть необязательно опущен. Клиент должен иметь доверие к доверенному корню и иметь сертификат.

Однако вы можете опустить цепочку (за исключением того, что клиент имеет цепочку сертификатов). Вам необходимо убедиться, что сертификат сервера должен быть проверен.

Вы можете выполнить проверку почтового соединения с помощью используемой вами цепи или проверить SSL_CTX_set_cert_verify_callback.

+0

Спасибо за ответ. Еще один вопрос: я добавил сертификат server_signing_ca в доверенный магазин клиентов. На стороне сервера нет сертификата server_signing_ca. Оно работает. Но мне интересно, это разрешено стандартом? Это лучшая практика? Я помню, «только самозаверяющий сертификат может находиться в доверенном хранилище сертификатов» –

+0

@JohnCrane: по стандарту в цепочке можно исключить только самый верхний корневой ЦС. Я не уверен в лучших практиках. Вы правы, что доверенный самоподписанный сертификат доверенного центра сертификации Root (например, Verisign) находится в доверенном хранилище сертификатов. Однако пользователь на свой страх и риск может добавить другой сертификат по выбору. Требуется только то, что клиент должен иметь возможность проверять личность сервера без какого-либо исключения. – doptimusprime

Смежные вопросы