Webシステム制作 – 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 UnixSocketscurlのアップデート
今回は、トライ&エラーを繰り返している中、結局バージョンは上げていませんが、インストールの手順をご紹介します。
全てスーパー権限にて行っています。
最初に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.gzcurl-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点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください。
      こんなお困りごとは
ございませんか?
    
    - 
        ホームページで 
 何をゴールにすればよいかが
 わからないホームページで 
 達成したい成果をまず設定MORE 
- 
        ホームページをリニューアルしたいけど 
 どこから手を付ければいいか
 わからない今のサイトをよりよくするため 
 情報整理から始めましょう!MORE 
- 
        デザインだけではなく 
 Webシステム制作も一緒にやってほしいホームページにおける 
 Webシステム制作の実績は豊富ですMORE 
- 
        コンバージョンにつながる 
 ツールはないだろうか?Webチャットツール - Fチャットで 
 お客様をサポートMORE 
- 
        どれくらいの費用がかかるか 
 ざっくりでいいから知りたい3つの規模感で 
 ざっくりこんな感じですMORE 
- 
        ホームページ制作の 
 進め方のイメージが湧かないホームページ制作 
 の流れを紹介MORE 
- 
        公開後も継続的に 
 メンテナンスや保守をしてほしい更新毎のお見積りや 
 月額制の更新などもご用意MORE 
- 
        SEO対策は何から 
 始めればよいの?基礎的なSEOは 
 おまかせくださいMORE 
 
           ホームページ制作
              ホームページ制作             Webマーケティング
              Webマーケティング             FHスタッフ雑記
              FHスタッフ雑記             
       
       
       
      