现象
编译完成的浏览器npapi插件,在某台机器上浏览器能检测到mime,但是无法调用。
排查方式
直接看 /var/log/system.log
, 查日志。日志显示signature not valid
。
但是执行:
codesign -dv --verbose=4 ./TARGET_FILE
通过。
spctl --assess --verbose ./TARGET_FILE
通过。
百思不得其解,直接把证书提取出来:
codesign -d -vvv --extract-certificates ./TARGET_FILE
生成codesign0
, codesign1
, codesign2
几个文件。
使用系统的证书存储验证:
security verify-cert -c ./codesign_file
验证codesign1时报错:
CSSMERR_TP_VERIFY_ACTION_FAILED
通过两个命令查看这个证书:
openssl x509 -inform DER -in codesign1 -text
或者:
qlmanage -c public.x509-certificate -p codesign1
发现这张证书是Developer ID Certification Authority
,苹果自己的中间证书,但是不被系统信任。
导出为der证书:
openssl x509 -inform DER -in codesign1 -outform DER -out certificate.der
然后导入到这台mac的钥匙串“系统”中,显示证书有效,且被信任。与security verify-cert -c的结果不一致。
OK,这种苹果bug我见多了。
解决方式
从苹果的PKI网站: https://www.apple.com/certificateauthority/
把根证书都下载下来,也都挪到钥匙串“系统”中,重启,解决。
无效的排查挣扎
在命令行输入
defaults write com.apple.Safari IncludeInternalDebugMenu 1
然后重启safari,开启debug窗口查看,没有任何有效信息。