macOS Monterey でPHPモジュールを使えるようにする
macOSアップデート後に、既存のPHPモジュールが無効になってしまったので、有効化する方法をメモします。
環境: macOS Monterey 12.3.1, PHP 8.0.13, Apache/2.4.51, キーチェーンアクセス(app) 11.0
ApacheのPHPモジュールの有効化確認
(PHPモジュールの詳細は以下を参照)
macOS アップデート時にPHPモジュールを利用するApache HTTP Serverの設定も初期状態に戻ってしまうため、上記記事のとおり再設定を行いますが、
Webブラウザで実行すると、エラーが起きていることがわかりますので、以下のコマンドで設定ファイルに記述誤りが無いかを確認します。
apachectl configtest
(確認結果)
[Thu May 05 17:58:57.232377 2022] [so:error] [pid 3908] AH06665: No code signing authority for module at /usr/local/Cellar/php/8.0.13_1/lib/httpd/modules/libphp.so specified in LoadModule directive.
httpd: Syntax error on line 188 of /private/etc/apache2/httpd.conf: Code signing absent - not loading module at: /usr/local/Cellar/php/8.0.13_1/lib/httpd/modules/libphp.so
「PHPモジュールに対し、署名による認証が行われていない」という旨のメッセージが表示されています。
macOSは12 Montereyより、これまでのようにPHPを標準バンドルしなくなったため、
OSアップデート以前に入手していたPHPモジュールを引き続き利用するためにはコード署名証明書を作成して署名する必要があるようですので、以降で手順を解説します。
認証局とコード署名証明書の作成
Macのキーチェーンアクセスというアプリケーションを使用して認証局及び、コード署名証明書の作成を行っていきます。
Spotlight検索より、「キーチェーンアクセス.app」を検索し、開きます。
ナビバーより、 キーチェーンアクセス > 証明書アシスタント > 認証局を作成 を選択します。
ユーザ証明書のプルダウンより、「コード署名」を選択し、メールの送信元へ任意のメールアドレスを入力し作成します。
「自分の証明書」一覧に作成されていることを確認できたら、ダブルクリックして詳細を表示します。
信頼 > この証明書を使用するとき: のプルダウンから「常に信頼」を選択します。
ダイアログを閉じ、macユーザのパスワードを入力して作成を完了します。
証明書は ~/Library/Keychains/ 作成されていることを確認できます。
ls -l ~/Library/Keychains/
-rw-r--r--@ 1 ken staff 1070504 5 7 12:54 login.keychain-db
この場合、login.keychain-db がコード署名証明書のファイル名となります。
コード署名証明書が確認できたら、以下のコマンドを実行してPHPモジュールに署名を行います。
(signオプションにはキーチェーンアクセス.app に表示されている証明書名を指定)
codesign --sign "KEN SASAMOTO" --force --keychain ~/Library/Keychains/login.keychain-db /usr/local/Cellar/php/8.0.13_1/lib/httpd/modules/libphp.so
Apacheの再設定
最後にApacheの設定ファイルを編集し、証明書の名前を追記します。
sudo vi /etc/apache2/httpd.conf
Before
LoadModule php_module /usr/local/Cellar/php/8.0.13_1/lib/httpd/modules/libphp.so
After
LoadModule php_module /usr/local/Cellar/php/8.0.13_1/lib/httpd/modules/libphp.so "KEN SASAMOTO"
PHPモジュール名のとなりに、証明書名をダブルクォートで囲んで記述します。
記述が完了したら、Apacheを再起動します。
sudo apachectl restart
以下コマンドを再度実行し、設定ファイルに誤りが無いことを確認します。
apachectl configtest
(Syntax OK の表示を確認する)
Webブラウザを利用して、ApacheがPHPモジュールの有効化を確認します。