首页/新闻资讯/正文详情

Salt macOS keychain 模块实战指南:用 Salt 管理 macOS 钥匙串中的证书

发布时间:2026/9/23 9:49:20 来源:云帆数科 栏目:资讯中心
Salt macOS keychain 模块实战指南:用 Salt 管理 macOS 钥匙串中的证书
Salt macOS keychain 模块实战指南用 Salt 管理 macOS 钥匙串中的证书【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址: https://gitcode.com/gh_mirrors/sa/saltSalt 的keychain执行模块salt/modules/mac_keychain.py专门用于在 macOS 系统上向钥匙串Keychain安装、卸载、查询证书并可读取证书友好名称、获取默认钥匙串及证书哈希。本文以该模块源码为主体结合对应的 状态模块 与测试用例讲解每个函数的参数语义、底层security/openssl命令实现、典型 CLI 用法并给出可复制的 State SLS 配置帮助你在大规模 macOS 主机上自动化管理证书生命周期。模块概览与平台限制keychain模块自 Salt 2016.3.0 版本引入见 模块源码其设计目标非常聚焦向 macOS 钥匙串安装证书。该模块通过__virtual__钩子强制限制运行平台仅在salt.utils.platform.is_darwin()返回 True即 macOS时加载否则加载失败并返回提示 Only available on Mac OS systems with pipes。因此在 Linux/Windows 的 minion 上调用该模块不会生效源码。与之一一对应的状态模块 salt/states/mac_keychain.py 也采用同样的平台校验逻辑。从架构上看模块内所有函数均通过__salt__[cmd.run]调用 macOS 自带的security命令行工具或openssl本质是对系统工具链的轻量封装因此其行为与 macOS 原生security命令保持一致。证书安装keychain.installinstall函数用于向指定钥匙串安装证书源码核心命令为security import cert -P password -k keychain参数说明参数类型默认值说明certstr必填要安装的证书通常为.p12文件路径passwordstr必填证书口令格式遵循 openssl 的 PASS PHRASE ARGUMENTS 规范keychainstr/Library/Keychains/System.keychain证书安装到的目标钥匙串allow_anyboolFalse为 True 时追加-A参数允许任何应用无警告访问导入的证书keychain_passwordstrNone当目标钥匙串可能处于锁定状态时传入导入前会先执行解锁底层行为与安全提示若传入keychain_password函数会先调用unlock_keychain(keychain, keychain_password)解锁钥匙串再执行导入源码allow_anyTrue时命令追加-A源码对应 macOSsecurity import的 allow any application to access 语义模块文档与源码均明确警告password与keychain_password会以明文形式出现在 job 返回信息中[源码](https://link.gitcode.com/i/e197e26a1a8c510784d97840a762d485#L45-L46, L59-L60)在安全敏感环境需谨慎使用。CLI 用法salt * keychain.install test.p12 test123单元测试 tests/pytests/unit/modules/test_mac_keychain.py 验证了默认命令拼接为security import /path/to/cert.p12 -P passw0rd -k /Library/Keychains/System.keychain并在传入allow_anyTrue、keychain_password时先解锁再追加-A与源码逻辑完全一致。证书卸载keychain.uninstalluninstall根据证书名称从钥匙串删除证书源码底层命令为security delete-certificate -c cert_name keychaincert_name要删除的证书名称通常取自行keychain.get_friendly_name或keychain.list_certs的结果keychain目标钥匙串默认系统钥匙串keychain_password同样支持先解锁再删除文档中的 CLI 示例沿用了keychain.install源码注释存在笔误实际语义为删除证书。对应单元测试 tests/pytests/unit/modules/test_mac_keychain.py 验证命令为security delete-certificate -c /path/to/cert.p12 passw0rd。证书清单keychain.list_certslist_certs列出指定钥匙串中全部已安装证书源码底层使用管道命令security find-certificate -a keychain | grep -o alis.* | grep -o [ -A-Za-z0-9.:() ]*keychain参数会经shlex.quote转义后拼入命令避免路径中的特殊字符破坏命令结构输出会去除两侧引号并按行拆分最终返回证书名friendly name的列表该命令显式传入python_shellTrue因为它依赖 shell 管道源码。功能测试 tests/pytests/functional/modules/test_mac_keychain.py 验证系统钥匙串中应至少包含com.apple.systemdefault等默认证书。日常运维中list_certs常与installed/uninstalled状态配合做幂等判断。获取证书友好名称keychain.get_friendly_nameget_friendly_name读取给定.p12证书的友好名称friendlyName结果可用于后续的安装/卸载/哈希比对源码。openssl pkcs12 [-legacy] -in cert -passin pass:password -info -nodes -nokeys 2 /dev/null | grep friendlyName:cert.p12证书路径password证书口令legacy布尔参数默认False。由于 OpenSSL 3.0 起默认不再支持旧版加密算法需对旧格式证书追加-legacy标志源码输出会剥离friendlyName:前缀并去除两端空白后返回。功能测试 tests/pytests/functional/modules/test_mac_keychain.py 演示了版本适配逻辑当openssl version低于 3.0.0 时传legacyFalse否则传legacyTrue。该函数是状态模块实现幂等安装的关键依赖。默认钥匙串管理get_default_keychain 与 set_default_keychain这两个函数分别读取与设置指定域的默认钥匙串源码get_default_keychain(userNone, domainuser)执行security default-keychain -d domainuser参数通过runas传给cmd.run以指定执行用户set_default_keychain(keychain, domainuser, userNone)执行security default-keychain -d domain -s keychaindomain合法取值为user | system | common | dynamic默认user。单元测试 tests/pytests/unit/modules/test_mac_keychain.py 验证了runas与-s参数的透传逻辑。钥匙串解锁keychain.unlock_keychainunlock_keychain(keychain, password)执行security unlock-keychain -p password keychain用于在导入/删除证书前解除钥匙串锁定源码。该函数是install/uninstall在传入keychain_password时的内部依赖同样地密码会以明文出现在 job 返回信息中。证书哈希比对keychain.get_hashget_hash(name, passwordNone)返回钥匙串中证书的哈希用于判断已安装证书与待安装证书是否为同一实体源码。其实现按输入类型分支当name以.p12结尾时执行openssl pkcs12 -in name -passin pass:password -passout pass:password提取证书否则将name视为钥匙串中的证书名执行security find-certificate -c name -m -p输出 PEM 内容随后用正则-----BEGIN CERTIFICATE-----(.*)-----END CERTIFICATE-----DOTALL|MULTILINE捕获证书正文并返回匹配失败则返回False。在状态模块中该函数被用于同名但不同哈希的证书替换场景见下文。结合状态模块声明式证书管理与执行模块配套的 salt/states/mac_keychain.py 提供了三个状态函数可直接写入 SLSkeychain.installed幂等安装/mnt/test.p12: keychain.installed: - password: test123installed(name, password, keychain/Library/Keychains/System.keychain, **kwargs)源码的执行流程若name包含http或salt前缀先通过__salt__[cp.cache_file]将证书从 Salt fileserver 或远程 URL 缓存到本地状态测试 test_install_cert_salt_fileserver 验证了salt://path/to/cert.p12场景调用keychain.list_certs与keychain.get_friendly_name获取当前证书列表与友好名称若友好名称已存在则用keychain.get_hash对比文件哈希与钥匙串哈希哈希一致幂等返回 friendly_namealready installed.哈希不一致先卸载旧证书再安装新证书源码对应测试 test_installed_cert_hash_different若证书不存在则执行keychain.install根据输出中是否包含imported判定成功与否。keychain.uninstalled幂等卸载/mnt/test.p12: keychain.uninstalled: - password: test123uninstalled(name, password, keychain..., keychain_passwordNone)源码支持两种name输入.p12文件路径含salt:///http前缀时先缓存或证书友好名称本身对已不在列表中的证书返回 already uninstalled.。keychain.default_keychain设置默认钥匙串/path/to/chain.keychain: keychain.default_keychain: - domain: system - user: frankdefault_keychain(name, domainuser, userNone)源码会先校验os.path.exists(name)不存在则直接失败对应测试 test_default_keychain_missing已设置为默认时幂等返回否则调用set_default_keychain并根据输出长度判断是否成功。测试与验证如何确认模块行为仓库为keychain模块提供了三个层次的测试可作为理解与验证行为的第一手资料单元测试tests/pytests/unit/modules/test_mac_keychain.py通过MagicMock断言每个函数拼接出的security/openssl命令行精确到参数顺序与引号转义是学习底层命令格式的速查表功能测试tests/pytests/functional/modules/test_mac_keychain.py标注了slow_test、destructive_test、skip_if_not_root、skip_unless_on_darwin等标记使用真实.p12测试文件tests/integration/files/file/base/certs/salttest.p12完成安装、卸载、friendly name 读取与默认钥匙串查询的端到端验证并利用setup/teardown在测试后清理证书状态测试tests/pytests/unit/states/test_mac_keychain.py覆盖已安装/未安装/哈希不同/文件服务器缓存等状态机分支验证返回字典的result、comment、changes结构。使用前提与限制平台模块仅在 macOSDarwin上加载管理目标必须是 macOS minion系统工具security为 macOS 内置命令get_friendly_name/get_hash依赖opensslOpenSSL 3.0 处理旧证书需legacyTrue功能测试在缺少openssl时会被跳过tests/pytests/functional/modules/test_mac_keychain.py权限操作系统钥匙串/Library/Keychains/System.keychain通常需要 root 权限功能测试因此标记了skip_if_not_root明文密码password与keychain_password会出现在 job 返回信息与日志中属于模块文档明确提示的安全注意事项应在不敏感环境或配合机密管理系统如 Salt Pillar eauth使用。【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址: https://gitcode.com/gh_mirrors/sa/salt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Karmada正式毕业!华为云携手社区共建Agentic Cloud坚实底座
Karmada正式毕业!华为云携手社区共建Agentic Cloud坚实底座

近日,在KubeCon CloudNativeCon OpenInfra Summit PyTorch Conference China 2026,云原生计算基金会(CNCF)正式宣布,Karmada晋级为毕业项目。这一里程碑不仅标志着Karmada在技术能力、社区治理与安全实践各领域的高… · 2026/9/23 9:49:20

COMSOL激光热应力仿真建模与多物理场耦合分析
COMSOL激光热应力仿真建模与多物理场耦合分析

1. 激光热应力仿真概述激光加工技术在现代制造业中扮演着越来越重要的角色,从精密切割到表面处理,激光的热效应都会在材料内部产生复杂的热应力分布。作为一名长期使用COMSOL进行热力学仿真的工程师,我发现很多同行在建立激光热应力模型时都会… · 2026/9/23 9:49:20

Robot Framework 7.0.1 RC1 发布解析:回归修复、日本语本地化与回滚决策
Robot Framework 7.0.1 RC1 发布解析:回归修复、日本语本地化与回滚决策

Robot Framework 7.0.1 RC1 发布解析:回归修复、日本语本地化与回滚决策 【免费下载链接】robotframework Generic automation framework for acceptance testing and RPA 项目地址: https://gitcode.com/gh_mirrors/ro/robotframework 本文基于仓库内 doc/r… · 2026/9/23 9:49:20

PHP-CS-Fixer `indentation_type` 规则详解:统一缩进风格,强制 PSR-2 缩进规范
PHP-CS-Fixer `indentation_type` 规则详解:统一缩进风格,强制 PSR-2 缩进规范

PHP-CS-Fixer indentation_type 规则详解:统一缩进风格,强制 PSR-2 缩进规范 【免费下载链接】PHP-CS-Fixer A tool to automatically fix PHP Coding Standards issues 项目地址: https://gitcode.com/gh_mirrors/ph/PHP-CS-Fixer 导读 indenta… · 2026/9/23 10:37:37

效果图制作工具选型:3大痛点下的最佳实践指南
效果图制作工具选型:3大痛点下的最佳实践指南

效果图制作工具选型:3大痛点下的最佳实践指南 看了一堆教程还是不会写项目?别慌,这不是你笨,是你还没搞懂工具选型的底层逻辑。效果图制作领域工具林立,从渲染引擎到建模软件,每个环节都有无数选择。新手最容易陷入的误区,就是盲目追求“最强”,而忽… · 2026/9/23 10:37:31

3步吃透安装描述文件,图解原理避坑指南
3步吃透安装描述文件,图解原理避坑指南

3步吃透安装描述文件,图解原理避坑指南 面试被问原理答不上来,是不是瞬间大脑空白?很多开发者对“安装描述文件”只知其名,不知其所以然。今天咱们不整虚的,直接上 图解原理 ,把这块硬骨头啃下来。 安装描述文件(Profile)在… · 2026/9/23 10:37:24

Led背光板调试避坑指南:3个致命错误让屏幕惨白,保姆级教程救你
Led背光板调试避坑指南:3个致命错误让屏幕惨白,保姆级教程救你

Led背光板调试避坑指南:3个致命错误让屏幕惨白,保姆级教程救你 上周帮同事调一块智能终端的Led背光板,他抓耳挠腮两小时,屏幕惨白一片,亮度调节完全失效。我一看日志,笑出了声:GPIO配置模式设反了,输出低电平反而点亮了背光。这就是典型的… · 2026/9/23 10:37:24

3个坑避坑创见u盘源码,保姆级教程解析核心逻辑
3个坑避坑创见u盘源码,保姆级教程解析核心逻辑

3个坑避坑创见u盘源码,保姆级教程解析核心逻辑 报错一堆看不懂 StackTrace?别慌。今天这篇保姆级教程,带你深挖创见u盘背后的代码逻辑。 入口定位:从 USB 识别到文件系统… · 2026/9/23 10:37:24

I2C开漏结构与多主仲裁的物理层本质解析
I2C开漏结构与多主仲裁的物理层本质解析

1. 为什么I2C的两根线,比你想象中更“脆弱”也更聪明我第一次在FPGA上调试I2C时,用逻辑分析仪抓到的波形让我愣了三分钟:SCL线上明明没发脉冲,SDA却自己跳变;主机发完地址后,从机没应答,但总线居… · 2026/9/23 10:37:18

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码