mcpField
M
macos-keychain

macos-keychain

github.com/alphaonedev安全51 次安装
代码仓库

关于 macos-keychain

macos-keychain 是面向 macOS 脚本和应用的密钥链管理技能,可通过 `security` 命令行或 Security 框架处理敏感数据。它涵盖密码、证书、签名身份及安全飞地密钥,并支持细粒度访问控制。

主要功能

  1. 01存取通用密码
  2. 02管理证书与签名身份
  3. 03使用 Secure Enclave 密钥
  4. 04搜索、添加和删除条目
  5. 05配置细粒度访问控制

适用场景

  1. 01在脚本中安全存取 API 密钥
  2. 02管理应用签名证书
  3. 03在 CI/CD 中处理密钥链操作
  4. 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 提示用户)或项目不存在(返回默认值)。始终清理输出,防止机密泄露。

具体用法示例

  1. 在 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,避免在脚本中明文存储。

  2. 管理用于代码签名的证书:
    导入证书: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(关联到身份验证技能)。

评论

支持 Markdown