06月25日
「error: The specified item could not be found in the keychain.」セルフCAは面倒です。
homebrewでphpを導入し、macOS VenturaのApacheでPHPを有効にして利用しています(導入記事は こちら
)。
macOS Ventura 13.4から13.4.1にアップデートした後、PHPモジュールのロードができなくなっていました。
php8.1系のアップデートした覚えがないんです。「 Code signing error 」は発生しているので、codesignで再署名しましたが・・・ error: The specified item could not be found in the keychain. で署名できないことがわかりました。
つい最近やったことは・・・macOS Ventureのアップデートです。13.4から13.4.1にアップデートしました。これが原因なんでしょうか、セキュリティ上のアップデートが影響したんでしょうね・・・
macOS Ventura 13.4から13.4.1にアップデートした後、PHPモジュールのロードができなくなっていました。
sudo /usr/sbin/httpd -D FOREGROUND
[Sun Jun 25 16:49:54.095480 2023] [so:error] [pid 3452] AH06663: Unable to find code signature authority on module at /opt/homebrew/opt/php@8.1/lib/httpd/modules/libphp.so that matches authority name "macyarounanoka" configured on LoadModule directive.
httpd: Syntax error on line 555 of /private/etc/apache2/httpd.conf: Syntax error on line 1 of /private/etc/apache2/other/00-http.conf: Code signing error - not loading module at: /opt/homebrew/opt/php@8.1/lib/httpd/modules/libphp.so
- -D FOREGROUNDで起動すると発生しているエラーの詳細がわかります。
- /etc/apache2/other/00-http.confにlibphp.soのロード設定済みです。ここでエラーが発生いているが上記ログからわかります。
- brewでは過去のphp8.1が残っているのでそれをそのまま使っています。すでにphp8.2導入済みです。過去に署名した8.1のlibphp.soを利用することで長く使えると思っていました。
php8.1系のアップデートした覚えがないんです。「 Code signing error 」は発生しているので、codesignで再署名しましたが・・・ error: The specified item could not be found in the keychain. で署名できないことがわかりました。
codesign --sign "macyarounanoka" --force --keychain ~/Library/Keychains/login.keychain-db /opt/homebrew/opt/php@8.1/lib/httpd/modules/libphp.so
error: The specified item could not be found in the keychain.
つい最近やったことは・・・macOS Ventureのアップデートです。13.4から13.4.1にアップデートしました。これが原因なんでしょうか、セキュリティ上のアップデートが影響したんでしょうね・・・
- キーチェインでセルフCA、macyarounanokaの署名を確認してみると有効期限切れでした。かなり前から有効期限切れなんですけど、今まで全く問題なかったんですよね・・・
現状のCAを延命する手段、つまり切れた再発行する方法はわかりませんでした。
期限切れの状態で、署名をアクティブにするために「常に信頼する」に変更して見ました。
再起動までしたんですが、codesign時に発生する「error: The specified item could not be found in the keychain.」は改善しませんでした。
もう一度署名し直す、それしか解決の方法はないんでしょうか・・・
(ルート証明書と認証局は同義です。)
=>有効期限は新規に作り直し・・・が一般的っぽいです。
コード署名のCAは10年以上設定できるかも?3650日は指定できました。
自己署名関連は手を出したくないっていうのが本音です。
コマンドラインで証明書関連発行できないんですかね・・・
期限切れの状態で、署名をアクティブにするために「常に信頼する」に変更して見ました。
再起動までしたんですが、codesign時に発生する「error: The specified item could not be found in the keychain.」は改善しませんでした。
もう一度署名し直す、それしか解決の方法はないんでしょうか・・・
Bing AIに聞いて見た
macOSで自己ルート証明書の期限を延長する方法は、以下の通りです。
1. キーチェーンアクセスを開き、ルート証明書を選択します。
2. 証明書の詳細を表示し、「信頼」の項目を展開します。
3. 「この証明書を使用するとき」のポップアップメニューから「常に信頼」を選択します。
4. 証明書の有効期限が切れている場合は、新しい証明書を発行する必要があります。
5. 新しい証明書を発行するには、公開X.509と秘密キーからCSRを生成し、自己署名してインストールします。
この方法で、macOSで自己ルート証明書の期限を延長することができます。ただし、Apple製品では、2020年9月1日以降に発行されたサーバ証明書は、有効期間が398日間を超えないものとされています。また、自己ルート証明書は、他のエンティティによって信頼されない可能性があるため、注意が必要です。
(ルート証明書と認証局は同義です。)
=>有効期限は新規に作り直し・・・が一般的っぽいです。
有効期限10年で新たな署名が作れた
- CAは削除せず、そのまま残しています。下記手順で新しいCA2を作っています。
削除しなかった理由は下記確認メッセージが出たので、しばらく削除しないことを選んでいます。
「警告!秘密鍵が削除されると、このキーに関連する証明書が使えなくなります。そのために暗号化されたメッセージの読み込みや安全な接続が妨げられる可能性があります。選択されたキーが本当に必要ないことを確認してから続けてください」 - 証明書(macyarounanoka)は削除。新たに作ったCA2で証明書を作りました。
- https://www.simplified.guide/macos/apache-php-homebrew-codesign
の「macOS でコード署名用の認証局を作成する方法」で新たにCA2を作りました。
- 試しに「10年の有効期限(3650日)」を指定したところそのまま作れました
設定通り10年持つかは不明ですけど - このCA2を使って新たに証明書(macyarounanoka)を作成しました。手順は apache-php-homebrew-codesign
に従っています。
- codesignコマンドで今まで通り、libphp.soに署名後、apahce+phpは動作しました。
コード署名のCAは10年以上設定できるかも?3650日は指定できました。
まとめ:macOSのApache+PHPは面倒です・・・セルフCA局は、有効期限があり、期限を迎える度に新規発行し直す必要があります
自己署名関連は手を出したくないっていうのが本音です。
コマンドラインで証明書関連発行できないんですかね・・・
コメントシステムを利用したくない方は お問い合わせ からお願いします。
2013.8.19 DISQUS(外部コメントサービス)の利用を開始しました。
Facebook, google, Twitter等のアカウントで投稿可能です。