macOS Monterey下Apache模块codesign签名报错钥匙串找不到指定项
macOS 12.2下Apache模块签名加载报错排查
问题现象
启动Apache前执行配置校验命令,返回如下错误:
root# sudo apachectl configtest [Tue Jun 28 13:31:53.686521 2022] [so:error] [pid 8913] AH06665: No code signing authority for module at /private/libexec/apache2/mod_dispatcher.so specified in LoadModule directive. httpd: Syntax error on line 191 of /private/etc/apache2/httpd.conf: Code signing absent - not loading module at: /private/libexec/apache2/mod_dispatcher.so
报错核心原因:/private/etc/apache2/httpd.conf配置文件第191行加载的AEM Dispatcher模块mod_dispatcher.so缺失代码签名,无对应签名授权,无法被Apache加载。
已尝试操作
- 本地创建了用于代码签名的证书颁发机构(CA)
- 尝试执行如下codesign命令对模块签名:
codesign --sign "XXX CA" --force --keychain ~/Library/Keychains/login.keychain-db /private/libexec/apache2/mod_dispatcher.so
- 命令执行返回错误:The specified item could not be found in the keychain.
- 参考相关配置教程操作后仍未解决问题,当前设备系统版本为macOS 12.2(Monterey)
问题原因
该报错核心是你创建的根CA证书本身不能直接用于代码签名,通常伴随以下任意一种情况:
- 证书未被标记为支持代码签名用途,无法被codesign工具识别为有效签名身份
- 命令中填写的证书名称与钥匙串内实际存储的证书名称不匹配
- 操作系统目录下的文件时未提权,导致无法正常访问钥匙串或修改模块文件
解决步骤
- 先查询当前登录钥匙串内所有可用的代码签名身份,确认证书状态:
security find-identity -p codesigning ~/Library/Keychains/login.keychain-db
如果返回结果中没有你创建的证书,说明之前生成的证书不符合代码签名要求,需要重新创建。
- 重新生成符合要求的代码签名证书:
- 打开「钥匙串访问」应用,点击顶部菜单栏「钥匙串访问」-「证书助理」-「创建证书」
- 证书名称自定义填写(例如
Apache Module Signer),身份类型选择「自签名根证书」,证书类型选择「代码签名」,勾选「让我覆盖这些默认值」后继续 - 按引导完成创建,在证书存储位置步骤选择「登录」钥匙串
- 创建完成后找到刚生成的证书,右键选择「显示简介」,展开「信任」配置项,将「使用此证书时」设置为「始终信任」,关闭窗口输入系统密码保存配置
- 提权执行签名命令,注意将证书名替换为你实际创建的证书名称:
sudo codesign --sign "Apache Module Signer" --force --keychain ~/Library/Keychains/login.keychain-db /private/libexec/apache2/mod_dispatcher.so
- 签名完成后重新执行配置校验:
sudo apachectl configtest
如果仍提示签名授权错误,编辑/private/etc/apache2/httpd.conf第191行的LoadModule配置,在模块路径后补充你使用的签名证书名称,示例如下:
LoadModule dispatcher_module libexec/apache2/mod_dispatcher.so "Apache Module Signer"
保存配置后重新校验即可通过。
内容的提问来源于stack exchange,提问作者Mario R
相关产品推荐
相关产品推荐

