Использование ECDHE TLS с Boost ASIO
Версия TL;DR
Я хотел бы знать:
- Где определяется спецификация для использования ECDHE (в параметре cert или конфигурации сервера в контекстах SSL или где-либо еще)?
- При установке сертификата, не относящегося к дому, кто несет ответственность за определение общедоступной и частной информации ECDHE (конечный пользователь или поставщик сертификатов)?
- Можно ли создать существующий сертификат, который, по-видимому, не использует ECDHE, не вызывая проблем с сертификатом?
- Есть ли примеры использования SSL в Boost::ASIO с настройкой ECDHE?
Более длинная версия
Мы создавали приложение, которое использует надлежащим образом оплаченный сертификат от внешнего центра сертификации. Приложение использует настройку собственного сервера, основанную на Boost ASIO и Boost Beast, и мы только недавно заметили, что это плохо работает с iOS - ASIO говорит, что общего шифра нет.
Ознакомление с принципами работы TLS привело меня к тому факту, что какая-то часть нашего сервера мешала нам обслуживать TLS с использованием набора шифров ECDHE-* (что, похоже, нужно iOS) - но у меня возникают трудности с выяснением того, как Спрячьте ASIO и наш текущий сертификат / ключ в обслуживание ECDHE.
Что я пробовал:
- Используя тот же сертификат и ключ, добавив в результаты
openssl dhparam
в ASIO, используя set_tmp_dh, затем указав шифры. Curl сообщает, что это позволяет использовать соединениеDHE
но нетECDHE
, Указание шифров, которые используют толькоECDHE
вызывает ошибки при подключении. - Пытаясь передать вывод
openssl ecparam
ASIO, используя метод, аналогичный описанному выше. Я не смог отформатировать то, что принимает ASIO. - Пытаясь увидеть, есть ли способ, которым вы можете использовать вывод
openssl ecparam
с другой функцией объединения для изменения исходного сертификата в тот, который используетECDHE
, Я обратился к этому из вики OpenSSL, предполагая, что если сертификат не содержит строкуASN1 OID: prime256v1
(или аналогичная именованная кривая), тогда она не подходит для использования ECDHE.
На данный момент я не уверен относительно того, в чем действительно заключается проблема (в ASIO, в сертификатах или в том, как я все это собираю), и большая часть информации в Интернете, которую я могу найти, относится к продвижению по домам всего от царапина, а не работа с существующими сертификатами.
1 ответ
Кажется, я нашел ответ для любого гуглера - ASIO не поддерживает ECDHE изначально на момент написания статьи. Эта проблема из основного репо предполагает, что ECDHE находится на картах для поддержки, но еще не реализована.
Вот ссылка на реализацию ECDHE, которую ждут слияния с 2016 года: https://github.com/chriskohlhoff/asio/pull/117.
+1, чтобы привлечь внимание разработчика Boost ASIO; он довольно медленно с этим.