cURLでhttpsが使えなかったのでアップデートしてみた

 

エラー発生

環境は、あるお客様のCentOS環境で、Composerのアップデートを行おうとしたら、下記のエラーがでました。

$ composer self-update

In CurlDownloader.php line 365:
                                                                                     
  curl error 1 while downloading https://getcomposer.org/versions: Protocol "https"  
   not supported or disabled in libcurl 

ライブラリのインストールもできない状態で、curlがhttpsに対応していないというのが理由のようです。

色々しらべていたところ、SSLが設定されていない状況で、curlをphpのインストールで追加すると、httpsでのアクセスが設定されないようです。逆にSSLが設定されていれば、この問題は起きないので、もしかしたらレアな現象なのかもしれません。

今回の場合、初期構築時点では、SSLが設定されておらず、のち公開されるときに、SSLが設定されたので、この現象が起こったようです。

解決方法

解決方法は、SSLが設定されている状態でのcurlのアップデートです。しかし、この設定が環境により微妙なところが多かったので、メモ書きとして残そうと思います。

php.iniの確認

まずは、php.iniの設定を確認してみます。phpからでは、phpinfo()のコマンド確認できますが、コマンドライン上からは、下記のように入力します。

$ php -i

全部表示されてしまい、探すのが大変ですが、phpモジュールはABC順に並んでいるので上の方にスクロールし、curlの部分を確認します。

curl
~
SSL => Yes
~
Protocols => dict, file, ftp, gopher, http, imap, mqtt, pop3, rtsp, smtp, telnet, tftp

注目すべきは、SSLの設定があること、Protocolsにhttpsが入っていないことです。SSLが設定されているのにhttpsが無いということは、SSLの設定が無いときにcurlがインストールされたのだと推測できます。

また下記コマンドでも、httpsに対応していないことが確認できます。

$ curl -V
curl 7.84.0 (x86_64-pc-linux-gnu) libcurl/7.84.0 zlib/1.2.7
Release-Date: 2022-06-27
Protocols: dict file ftp gopher http imap mqtt pop3 rtsp smtp telnet tftp 
Features: alt-svc AsynchDNS IPv6 Largefile libz UnixSockets

curlのアップデート

今回は、トライ&エラーを繰り返している中、結局バージョンは上げていませんが、インストールの手順をご紹介します。

全てスーパー権限にて行っています。

最初にcurlの圧縮ファイルをダウンロードしますので、作業が行えるフォルダへ移動します。下記の例ではユーザー用のxxxフォルダへ移動しています。

# cd /home/xxx

ファイルを取得します。

# wget https://curl.haxx.se/download/curl-7.84.0.tar.gz
~
2023-07-01 00:00:00 (71.6 MB/s) - `curl-7.84.0.tar.gz' へ保存完了 [4173236/4173236]
# ll
-rw-r--r--  1 root root 4173236  6月 27  2022 curl-7.84.0.tar.gz

ファイルを解凍します。

# tar xfvz curl-7.84.0.tar.gz
~
curl-7.84.0/buildconf.bat
# ll
drwxr-xr-x 14 fhw1 fhw1    4096  6月 27  2022 curl-7.84.0
-rw-r--r--  1 root root 4173236  6月 27  2022 curl-7.84.0.tar.gz

curl-7.84.0という名前のディレクトリが作成されました。

ディレクトリを移動します。

# cd 2022 curl-7.84.0

ここから下記のコマンドを順に実行してインストールを行っていきます。

  • .configure
  • make
  • make test
  • make install

ここで一番大事なのは、「.configure」の部分です。ここがうまくいけば、あとはすんなりと進みます。

設定上、結局一番参考になったのは、curl本体のFAQです。

https://curl.se/docs/install.html

英語の表記ですが、今は翻訳も優秀ですし、自分の環境でうまくいかない場合は、ここが参考になると思います。

今回の設定では、一般的に表記されている下記のコマンドだけでは、うまくいきませんでした。

# ./configure --enable-libcurl-option

上記コマンドだけでは、何度かerrorが出て処理が止まってしまいました。

それでも無理やり「make」コマンドを実行すると、エラーが出まくってしまいました(少し前の作業なのでエラー画面を取得しわすれてしまいここで記述することはできませんが。。。)。

最初に見えてきたのは、nghttp2のところでエラーがでていることがわかり、下記コマンドに変更しました。

# ./configure --enable-libcurl-option --without-nghttp2

環境によって、--without-xxxxxx オプションは必要になるかもしれません。

上記コマンド後にmakeをしてみましたが、やはりエラーがでます。エラーでは複数のライブラリが見つからないということなので、それぞれのライブラリを一つずつ検索したところ、opensslに関するファイルばかりでした。

今回、一番必要なSSLの設定がみつからないということなので、このまま進めても「https」に対応することは難しそうです。

さらにしらべてみるうちに「pkgconfig」というキーワードが見つかりました。このファイルを探してみます。

# find / -name pkgconfig
/usr/lib64/pkgconfig
/usr/share/pkgconfig
/usr/local/lib/pkgconfig
/usr/local/lib64/pkgconfig
/opt/lampp/lib/pkgconfig

以前に、SSLのアップデートを行っていたり、xamppを利用していたりと、ゴミファイルが多く、上記のように複数のファイルが見つかってしまいました。

このpkgconfigの場所を指定してあげないと、デフォルトの設定の場所を探しに行ってしまいpkgconfigが見つからずエラーが出てしまっていたようです。

ここで公式サイトの説明が訳に立ちました。

If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL) and you have pkg-config installed, set the pkg-config path first, like this:

env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-openssl

https://curl.se/docs/install.html

上記、記述を参考にし、最終的に下記コマンドに変更しました。

# env PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig ./configure --enable-libcurl-option --with-openssl --without-nghttp2

これにより無事./configureが通り、その後のコマンドも無事問題なく実行できました。

結果、php_infoは下記のようになりました。

# php -i
curl
~
SSL: enabled (OpenSSL v3+)
~
Protocols: DICT FILE FTP FTPS GOPHER GOPHERS HTTP HTTPS IMAP IMAPS LDAP LDAPS MQTT POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP

そして、curlのバージョンも確認してみます。

$ curl -V
curl 8.1.2 (x86_64-pc-linux-gnu) libcurl/8.1.2 OpenSSL/3.0.7 zlib/1.2.7 brotli/1.0.9
Release-Date: 2023-05-30
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli HSTS HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets

それぞれ無事「https」が追加されました。

まとめ

今回ここまで到達するのに約2日かかってしまいました。達成すると喉元過ぎれば熱さを忘れるがごとく、あっという間に色々と忘れてしまいますが、クリアした時の喜びはひとしおですね。

文責:フライング・ハイ・ワークス代表 松田 治人(まつだ はるひと)
会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによるWebアプリケーションやWebサイトを構築しています。
エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。

WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします

メールお問い合わせはこちら

フライング・ハイ・ワークスの紹介

フライング・ハイ・ワークスは、東京都渋谷区にある2000年3月創業のシステム開発にも対応できるデザインも強いWeb制作・ホームページ制作会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。

実績

デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステムの構築を始め、WordPressのカスタマイズを得意としております。

また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。

500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください!

採用

FHWでWebディレクター、Webデザイナー、Webプログラマーやシステム開発者として働いてみたいと思っていただける方は、下記にて定期的に募集をしておりますので、ぜひ、ご応募ください。

WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします

メールお問い合わせはこちら