Версия TL; DR
Я хотел бы знать:
Более длинная версия
Мы создавали приложение, которое использует надлежащим образом оплаченный сертификат от внешнего центра сертификации. Приложение использует настройку собственного сервера, основанную на 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, в сертификатах или в том, как я все это собираю), и большая часть информации в Интернете, которую я могу найти, относится к продвижению по домам всего от царапина, а не работа с существующими сертификатами.
Кажется, я нашел ответ для любого гуглера — ASIO не поддерживает ECDHE изначально на момент написания статьи. Эта проблема Из основного репо предполагается, что ECDHE находится на картах для поддержки, но еще не реализован.
Других решений пока нет …