OpenSSL&cURLのバージョンアップ時に自己証明書の設定でドハマリした
経緯
脆弱性対応のためにOpenSSLをアップデート。
それに伴い同時にcURLのアップデートも行った。
アップデート後のバージョンは以下の物。
・OpenSSL v1.0.1s
libcrypto.a, libssl.a
・cURL v7.48.0
libcurl.a
問題発生
通信を実行すると以下のログが出力された。
SSL: CA certificate set, but certificate verification is disabled
原因
問題が発生したプロジェクトでは以下のように ifdef を使いデバッグ時(テスト環境)では証明書のチェックを無効にしていた。
curl_easy_setopt(curl, CURLOPT_CAINFO, caPath);
#ifdef DEBUG
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
#else
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2);
#endif
問題の原因は CURLOPT_CAINFO であった。
このコードでは証明書のチェックを行う場合も行わない場合も証明書のパスをセットしていた。
アップデート後のcURLでは証明書のチェックを行わない場合はパスのセットも行わない必要がある。
解決
以下のように改修することで正常に通信を行うことができた。
#ifdef DEBUG
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
#else
// 証明書のチェックを行う場合にパスをセットする
curl_easy_setopt(curl, CURLOPT_CAINFO, caPath);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2);
#endif
Author And Source
この問題について(OpenSSL&cURLのバージョンアップ時に自己証明書の設定でドハマリした), 我々は、より多くの情報をここで見つけました https://qiita.com/ktysne/items/7a4eb279de37712d1c51著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .