My開発メモ

Apacheでphpモジュールがロードできない(macOS/Monterey)

デフォルトでインストールされているアパッチを起動しようとしたが、以下のようなメッセージが出た。

% sudo apachectl start 
/System/Library/LaunchDaemons/org.apache.httpd.plist: service already loaded
Load failed: 37: Operation already in progress

以下のように状態を調べてみると……

% apachectl configtest
[Sun Aug 14 08:02:54.301394 2022] [so:error] [pid 1379] AH06665: No code signing authority for module at /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so specified in LoadModule directive.
httpd: Syntax error on line 192 of /private/etc/apache2/httpd.conf: Code signing absent - not loading module at: /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so

phpは macOSでは標準でインストールされなくなった。 で、Homebrew を使って php7.4 をインストールしたのであった。

しかし、Apache2が署名されるようになって、それに伴い、libphp7.so も署名されている必要が出てきたということらしい。

(参考) Mac標準のApacheにhomebrewでインストールしたPHPモジュールを指定するとエラーになる問題の解決方法

上記サイトでは、プリインストールされている Apache2 を動作停止して、 Homebrew で署名されていない Apache2 をインストールして、それを使うことで この問題を回避している。

ここでは、以下のサイトを参考にして、認証局とコード署名証明書を作成して、 libphp7.so を署名することにする。

(参考) macOS Monterey でPHPモジュールを使えるようにする

認証局と証明書の作成

認証局の作成

「キーチェーンアクセス」と起動し、トップメニューから「認証局アシスタント」 –「認証局を作成」と選択する。

認証局を作成

「認証局を作成」ダイアログが開く。
「名称」には、たとえば自分の名前にする。 あとで httpd.conf の中で使わなければならないから、英字にしておくのが望ましい。
「固有名のタイプ」は、”自己署名ルートCA” とする。(デフォルト)
「ユーザ証明書」は、”コード署名” を選択する。
「このCAをデフォルトにする」にチェックを入れる。
「メールの送信元」は、自分のメールアドレスがすでに入っているはず。

コード署名を選択

「作成」をクリックする。

「自分の証明書」を信頼する

キーチェーンアクセスのウィンドウで、「自分の証明書」タブを選択する。
そこに今作成した認証局がリストされているので、それを選択し、「情報を見る」を 選択する。

開いたダイアログで、「信頼」の項目を展開して、「この証明書を使用するとき」で “常に信頼” を選択して、「OK」とする。

これで証明書ができた。以下のところにできている。

~/Library/Keychains/login.keychain-db

phpモジュールに署名をする

以下のコマンドで phpモジュールに署名ができる。

% codesign --sign "Seiichi NukayamaのCA2" --force --keychain ~/Library/Keychains/login.keychain-db /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so

認証局を作成する際、macの言うがままに作成したので、ひらがなの「の」が入ってしまった。
そのままでも動作している。

httpd.conf の修正

/etc/apahe2/httpd.conf

192 LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so "Seiichi NukayamaのCA2"

確認と再起動

以下のコマンドで設定ファイルに誤りがないことが確認できる。

% apachectl configtest
[Sun Aug 14 08:56:29.156098 2022] [so:notice] [pid 3625] AH06662: Allowing module loading process to continue for module at /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so because module signature matches authority "Seiichi Nukayama\xe3\x81\xaeCA2" specified in LoadModule directive
Syntax OK
Apache2 の再起動
% sudo apachectr restart

カテゴリー: Apache, MacOS, memo, php

タグ: Apache, module, php, php-module, モジュール, 署名

カウント: 398