システム開発 - 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制作会社・システム開発会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。

実績

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

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

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

東京のホームページ制作・Web制作のお問い合わせ、お見積り依頼、相談、質問は
こちらのお問い合わせフォームよりお願いいたします

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