关于 macos-keychain
macos-keychain 是面向 macOS 脚本和应用的密钥链管理技能,可通过 `security` 命令行或 Security 框架处理敏感数据。它涵盖密码、证书、签名身份及安全飞地密钥,并支持细粒度访问控制。
主要功能
- 01存取通用密码
- 02管理证书与签名身份
- 03使用 Secure Enclave 密钥
- 04搜索、添加和删除条目
- 05配置细粒度访问控制
适用场景
- 01在脚本中安全存取 API 密钥
- 02管理应用签名证书
- 03在 CI/CD 中处理密钥链操作
- 04为硬件保护密钥提供存储
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill macos-keychain安装后在 Claude Code 中输入/macos-keychain确认已加载。
详细介绍
macos-keychain
用途
此技能通过 security CLI 提供管理 macOS 钥匙串的工具,可安全存储 API 密钥、密码、证书和代码签名信息,并与 Secure Enclave 交互以增强安全性。
适用场景
当应用需要在 macOS 上存储或检索敏感数据时,请使用此技能,例如在脚本中存储 API 密钥、管理应用签名所需的证书,或通过 Secure Enclave 处理硬件保护的机密。它适用于自动化、CI/CD 流水线或需要 macOS 专属安全功能的应用。
主要功能
- 使用钥匙串服务存储和检索通用密码。
- 管理用于应用代码签名或验证连接的证书和身份。
- 与 Secure Enclave 交互,存储需要硬件保护的密钥。
- 通过精细的访问控制添加、删除或搜索钥匙串项目。
- 加密存储 API 密钥,确保数据按用户或应用隔离。
使用模式
始终在脚本中通过 subprocess 运行 security 命令,以 security 为前缀并使用相应操作标志。以编程方式访问时,请使用 Swift/Objective-C 中的 Security 框架。留意钥匙串访问提示并处理用户交互。使用 $KEYCHAIN_ITEM_NAME 等环境变量传入动态值,避免将机密硬编码。
常用命令/API
大多数任务请使用 security CLI;对于应用,可使用 SecItemAdd 和 SecItemCopyMatching 等 Security 框架 API。
-
添加通用密码:
security add-generic-password -a username -s service -w password -T ""
这会为某项服务存储密码;服务字符串请使用$SERVICE_NAME。 -
查找通用密码:
security find-generic-password -a username -s service -w
输出密码;可将其通过管道传入变量,例如在 Bash 中:pass=$(security find-generic-password -s myapp -w)。 -
删除项目:
security delete-generic-password -a username -s service
删除该条目;使用-h查看标志帮助。 -
添加证书:
security add-certificate -k login.keychain cert.pem
导入 PEM 证书;使用-k指定钥匙串。 -
对于 Secure Enclave,生成密钥:
security create-key -t secp256r1 -a -p
创建密钥对;可在应用中通过 SecKeyGeneratePair 使用。 -
Swift API 示例(Security 框架):
let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword]
let status = SecItemCopyMatching(query as CFDictionary, nil)
这会查询通用密码项目。 -
导出证书:
security export -k login.keychain -t identities -o cert.p12 -P passphrase
导出为 P12 格式;可用于代码签名。
配置格式:钥匙串项目使用基于字典的查询(例如,在 API 中使用 [String: Any]),其中包含 kSecAttrAccount 等用户名键。CLI 输出为纯文本或 plist;可使用 plutil 解析结构化数据。
集成说明
在脚本中通过 subprocess 调用 security 命令进行集成(例如,在 Python 中:subprocess.run(['security', 'add-generic-password', ...]))。对于应用,请导入 Security.h 并使用 SecItemAdd 等函数;确保授权文件包含 "keychain-access-groups"。使用环境变量传递机密,例如将 $API_KEY 传给命令。避免将密钥存储在代码中;应在运行时从钥匙串获取。若要跨应用访问,请在授权文件中设置相同的访问组。
错误处理
检查命令退出码;例如,在 Bash 中使用 if [ $? -ne 0 ]; then echo "Error: Keychain operation failed"; fi。对于 CLI,请检查 stderr 中是否包含 "SecKeychainItem not found" 等消息。在 Swift API 中处理 OSStatus 错误(例如,如果 SecItemAdd 返回 errSecDuplicateItem,则记录错误并重试)。对 Objective-C 中的框架调用使用 try-catch。常见问题包括:权限被拒绝(通过 UI 提示用户)或项目不存在(返回默认值)。始终清理输出,防止机密泄露。
具体用法示例
-
在 Keychain 中存储 API 密钥:
在 Bash 脚本中,使用:security add-generic-password -a myapp-user -s myapi -w $API_KEY -T ""
然后检索密钥:apiKey=$(security find-generic-password -a myapp-user -s myapi -w)
使用环境变量中的$API_KEY,避免在脚本中明文存储。 -
管理用于代码签名的证书:
导入证书:security add-certificate -k login.keychain mycert.pem
验证:security find-certificate -c "My Cert Name"
在构建脚本中,导出证书以进行签名:security export -k login.keychain -t identities -o signing.p12。
图关系
- 相关工具:macos-filesystem(用于证书文件处理)、security-tools(用于更广泛的安全操作)、encryption-services(通过 Secure Enclave 集成)。
- 所属集群:macos(直接关联)、secrets-management(通过标签关联)。
- 标签关联:keychain(核心)、secrets(与保险库工具重叠)、security(关联到身份验证技能)。