Points & Lines

【macOS 12 Monterey】コード署名証明書によるPHPモジュール有効化

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

macOSアップデート後に、既存のPHPモジュールが無効になってしまったので、有効化する方法をメモします。

環境: macOS Monterey 12.3.1, PHP 8.0.13, Apache/2.4.51, キーチェーンアクセス(app) 11.0

ApacheのPHPモジュールの有効化確認

(PHPモジュールの詳細は以下を参照)

ApacheのPHPモジュールをVer 7から8に変更する

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モジュールの有効化を確認します。

Follow me!

モバイルバージョンを終了