Я разрабатываю приложение на C++ (кросс-платформенный, Windows, Mac и Linux), который должен безопасно связываться с серверами с использованием протокола https с libcurl (построенный с помощью winssl/darwinssl/openssl на Windows/Mac/Linux соответственно). Я изменил параметр curl, CURLOPT_SSL_VERIFYPEER
от 0
до 1
, который должен помочь предотвратить проблемы MitM.Безопасная связь сервера с помощью приложения с использованием C++/libcurl/openssl
Это вызвало проблемы, что первоначальный поиск указывает на превращение этого опцию, но после того, как копать глубже я нашел:
Get a CA certificate that can verify the remote server and use the proper option to point out this CA cert for verification when connecting. For libcurl hackers:
curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
from curl docs
и
Get a better/different/newer CA cert bundle! One option is to extract the one a recent Firefox browser uses by running 'make ca-bundle' in the curl build tree root, or possibly download a version that was generated this way for you. from curl docs
Я использую CURLOPT_CAINFO
к расслоению, как я видел некоторые проблемы с использованием CURLOPT_CAPATH
на Windows; curl docs. Я загрузил и установил этот комплект вместе с приложением в Windows и Mac, и я хотел бы знать, правильно ли это это сделать или если есть более эффективная практика.
Первоначально это вызвало проблемы для пользователей приложения, работающих за некоторыми корпоративными сетями или прокси-серверами, которые, как выяснилось, были исправлены путем создания libcurl против winssl вместо openssl в Windows; хотя потенциально маскируясь как проблема брандмауэра, все еще неясна, хотя кажется вероятной.
Извините за длину.
Есть ли что-нибудь глупое относительно установки ca-cert-bundle.crt
вместе с приложением, и есть ли что-нибудь, что нужно сделать по-другому, чтобы безопасно общаться с сервером из этого установленного приложения?
Немного отдельно, но все еще очень связаны между собой, вопрос у меня есть CURLOPT_CAINFO
на Linux дает ошибку:
error setting certificate verify locations: CAfile: ../share/my_application/curl-ca-bundle.crt CApath: none
Хотя попытка открыть файл для чтения в приложение не работает успешно. Редактировать: Эта проблема была решена путем установки поля CURLOPT_CAINFO
на Linux (оставив его пустым) и добавив в пакет приложений пакет зависимостей ca-certificates
. Путь по умолчанию правильный /etc/ssl/certs/ca-certificates.crt
и, кажется, работает. К me это немного лучше, чем установка пакета с приложением.
Edit2: Хотя решена она появляется пакет CA-сертификаты иногда не устанавливать CA-certificates.crt и вместо ча-bundle.crt и местоположения изменяются на различных дистрибутивах, как this source, happyassassin.net показывает, что различные системы Linux хранить CA связывает в разных местах. Кажется, у него не было четкого ответа на вопрос КАК обращаться с этим. Должен ли я использовать значение в файле конфигурации, которое пользователь может затем изменить, или любые другие мысли по этому вопросу?
Редактировать3: Некоторые пользователи указали, что мое имя существует в одном из путей, который ищет завитки, я не совсем уверен, как это возможно, поскольку единственное, что я указал для завитки, - это то место, где я построил openssl/заботится о библиотеках ...
Я понимаю, что это загруженный/многочастный вопрос, но все это касается того же названия, что и название, я буду признателен за любую помощь.
Спасибо.
Я в настоящее время использую WinSSL на Windows, однако мой первоначальный подход был идентичен ссылкой суперпользователя вы при условии доставки пакета СА с приложением, что-то, что я чувствовал/было немного странным, - это также приводило к ошибкам в корпоративных сетях; похоже, что они ушли или изменились на DNS/Firewall, поскольку изменение WinSSL. В Linux ссылка, которую вы указали, показывает конкретное место для Redhat и аналогичных дистрибутивов, но в Debian/Ubuntu пакет ca-сертификатов, по-видимому, размещает их в другом месте, поэтому установка CAPATH на один будет отсутствовать. –
Возможно, вы должны оставить его пустым, и он должен использовать путь CA по умолчанию. Но для некоторых дистрибутивов это не сработает (в сети есть некоторые сообщения об ошибках). Поэтому вам нужно будет провести некоторое тестирование на разных выпусках и использовать путь соответственно ... – Anardael
На самом деле я не указываю CA PATH на linux, так что это должно произойти, я вижу, как мой последний комментарий казался мне похожим Я установил его, извините, я просто хотел сказать, что использование этого варианта может работать в одном месте, но не в другом. –