Security是Mac系统中钥匙串和安全模块的命令行管理工具,(图形化工具为Keychain Access.app)。钥匙串(Keychain)实质上就是一个用于存放证书、密钥、密码等安全认证实体的仓库,在计算机中保存为一个.keychain的文件,默认存放在以下目录中(使用这几个目录中的钥匙串时不需要写路径,直接用文件名即可,Security工具会自动搜索):

  • ~/Library/Keychains/
  • /Library/Keychains/
  • /Network/Library/Keychains/

(iOS系统: /var/Keychains/keychain-2.db )

Security API文档:

https://developer.apple.com/library/mac/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html

命令行工具参考文档:

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/security.1.html

使用手册:

命令行执行 man  security

Security命令

语法如下:

security [-hilqv] [-p prompt] [command] [command options] [command args]

  • [subcommand] -h    帮助,无命令参数时查看所有命令,带命令参数时显示该命令的使用方法
  • -i    交互模式
  • -p <prompt>    进入交互模式,使用自定义提示符
  • -q      减少信息输出
  • -v      增加信息输出
  • -l      security退出前,调用/usr/bin/leaks -nocontext检查执行的命令是否有泄漏

子命令(command)

子命令列表如下,后面有关子命令的说明中都将忽略命令语法前面的security [-hilav] [-p prompt]。

  • help
  • create-keychain    创建钥匙串并加入搜索列表
  • list-keychains   显示或设置钥匙串搜索列表
  • default-keychain   显示或设置默认的钥匙串
  • login-keychain     显示或设置登录钥匙串
  • delete-keychain    删除钥匙串并从搜索列表移除
  • lock-keychain    锁定制定的钥匙串
  • unlock-keychain    解锁制定的钥匙串
  • set-keychain-settings    设置钥匙串配置
  • set-keychain-password   设置钥匙串密码
  • dump-keychain    显示一个或多个钥匙串的内容
  • create-keypair     创建非对称密钥对
  • add-generic-password    向钥匙串中添加通用密码项
  • find-generic-password    查找通用密码项
  • delete-generic-password   删除通用密码项
  • add-internet-password   向钥匙串中添加网络密码项
  • find-internet-password   查找网络密码项
  • delete-internet-password   删除网络密码项
  • add-certificates     向钥匙串种添加证书
  • find-certificate    查找证书
  • delete-certificate   从钥匙串种删除证书
  • find-identity     查找认证实体(证书+私钥)
  • set-identity-preference
  • get-identity-preference
  • create-db
  • export
  • import
  • cms     编码或解码CMS信息(PKCS#7)
  • install-mds    安装/重装MDS 数据库
  • add-trusted-cert    添加可信证书(只包含公钥,无私钥)
  • remove-trusted-cert  删除可信证书
  • dump-trusted-setting   显示信任配置
  • user-trust-settings-enable    显示或管理用户级别的信任配置
  • trust-settings-export   导出信任配置
  • trust-settings-import   导入信任配置
  • verify-cert    验证证书
  • authorize    授权操作
  • authorizationdb   变更授权策略数据库
  • execute-with-privileges   带特权执行工具
  • leaks     在本进程中运行/usr/bin/leaks
  • error     显示指定错误码的描述信息
  • create-filevaultmaster-keychain   创建一个带密钥对的钥匙串,用于FileVault恢复(FileVault是苹果系统里的一项保密机制,会自动透明地对主目录的内容进行实时加密和解密)

创建钥匙串

create-keychain [-P] [-p <password>]   [keychainFiles...]

  • -p <password>      设置新创建的钥匙串的密码
  • -P    调用SecurityAgent图形化程序设置密码

解锁钥匙串

unlock-keychain  [-u] [-p <password>]  [keychainFile]

  • -u   启动GUI输入钥匙串密码
  • -p  <password>     指定钥匙串密码
  • 不带任何参数时命令行交互方式提示输入密码

锁定钥匙串

lock-keychain  [-a | <keychainFile>]

  • -a    锁定所有钥匙串
  • 如果指定了具体钥匙串,则只锁定那一个钥匙串
  • 什么参数都不带时,锁定默认钥匙串

更改钥匙串配置

set-keychain-settings [-lu] [-t <timeout_seconds>]  [keychain]

  • -l   系统睡眠时锁定
  • -u  一定时间周期后锁定
  • -t <timeout_seconds>    闲置指定时间后锁定,省略这个选项则没有延时

向钥匙串中添加钥匙(认证实体)

import <inputfile>  [-k <keychain>] [-t <type>]  [-f format] [-w]  [-P passphrase] [options...]

  • -k <keychain>    指定要导入项目到哪个钥匙串中
  • -t  <type>     指定要导入的项目类型,可取值为: pub | priv | session | cert | agg
  • -f  <format>    指定导入项目的格式,可取值为:openssl | openssl1 | openssl2 | bsafe | raw | pkcs7 | pkcs8 | pkcs12 | netscape | pemseq
  • -w     标明包装了私钥,导入时要解开
  • -x     标明导入后,私钥无法提取私钥
  • -P  <password>    直接输入导入项目密码,默认会使用GUI输入密码
  • -a  指定键值对属性,可以重复出现多次
  • -A    所有程序可以使用导入的项目
  • -T  指定可以使用导入项目的程序,可以重复出现多次
security create-keychain -p   certsOfAppBuild.keychain
security unlock-keychain -p certsOfAppBuild.keychain
security -k certsOfAppBuild.keychain import xxx.p12 -P -T /usr/bin/codesign
...sign operation...
security delete-keychain certsOfAppBuild.keychian

删除证书

delete-certificate [-c name] [-Z hash] [-t]  [keychain...]

  • -c  <name>   按common name删除证书
  • -Z  <hash>    按SHA1哈希值删除证书
  • -t                  同时删除该证书的用户信任设置
  • 要删除的证书必须能够唯一确定,如果未指定钥匙串则是用默认搜索列表中的所有钥匙串

查找认证实体(证书+私钥)

find-identity [-p policy] [-s string] [-v] [keychain...]

  • -p    按指定用途策略查找,可重复出现以指定多项,可用值有: basic, ssl-client, ssl-server, smime, eap, ipsec, ichat, codesigning, sys-default, sys-kerberos-kdc ,macappstore, appleID
  • -s   为-p指定的策略提供参数
  • -v  只显示有效的,默认显示所有。
  • 如果未指定keychain,则使用默认的搜索列表
security find-identity -v -p codesigning    #显示默认搜索列表中有效地认证实体

显示或设置钥匙串搜索列表

list-keychain [-d user|system|common|dynamic] [-s [keychain...]]

  • -d    使用指定的preference domain
  • -s    设置钥匙串搜索列表
  • 不带任何参数时,显示搜索列表

输出钥匙串内容

dump-keychain  [-adir] [keychain...]

  • -a    输出访问控制列表
  • -i     交互式编辑访问控制列表
  • -d    输出项目中解密的数据
  • -r     输出项目中加密的原始数据

加密/解密CMS信息(PKCS#7)

cms  [-CDES] [<options>]

  • -C    创建CMS加密信息
  • -D    解密CMS信息
  • -E    创建CMS包裹信息
  • -S    创建CMS签名信息

解密选项

  • -c   <content_file>    使用分离的内容文件
  • -h  <level>   生产带CMS消息信息的邮件头
  • -n     压制内容输出

编码选项

  • -r  id,...     为指定接收人创建包裹,id可以是certificate nickname或email adderess
  • -G     包含签名时间属性
  • -H  <hash_type>      可取值为:MD2, MD4, MD5, SHA1, SHA256, SHA384, SHA512,默认为SHA1
  • -N  <certi_nickname>    使用指定的证书签名
  • -P   包含SMIMECapabilities属性
  • -T   CMS信息中不包含内容
  • -Y  <certi_nickname>   包含指定证书的EncryptionKeyPreference属性,使用NONE忽略
  • -Z  <hash>    使用主题ID查找证书

通用选项

  • -e  <envelope>    指定envelope文件,结合-D, -E使用
  • -k  keychain         指定使用的keychain
  • -i  <infile>    从文件作输入数据,默认输入为stdin
  • -o <outfile>   输出数据到文件,默认为stdout
  • -p <password>   指定key db密码,默认会提示输入
  • -s    逐字节传输数据
  • -v    显示调试信息
  • -u <certusage>   设置证书使用类型,默认为certUsageEmailSigner
    • 0  certUsageSSLClient
    • 1  certUsageSSLServer
    • 2  certUsageSSLServerWithStepUp
    • 3  certUsageSSLCA
    • 4  certUSageEmailSigner
    • 5  certUSageEmailRecipient
    • 6  certUsageObjectSigner
    • 7  certUsageUserCertImport
    • 8  certUsageVerifyCA
    • 9  certUsageProtectedObjectSigner
    • 10 certUsageStatusResponder
    • 11 certUsageAnyCA

 

security cms -D -i example.mobileprovision

codesign使用keychain中的Identity(证书+私钥)进行签名

指定Identity的选项为 -s  <identity>

  • 如果identiy正好是40位16进制数,则按证书的SHA-1指纹查找
  • 如果identity为单个横线 "-",则执行ad-hoc签名,不会用到identity。
  • 首先查找keychain identity preference的full name
  • 在keychain中查找Subject的common name,找到多个则失败。大小写敏感,完整匹配比部分匹配更好。多个keychain中包含同一个证书也是可以的。

关于codesign的更多用法可以查看帮助文档(命令行执行:man codesign)。

示例

codesign -s 'iPhone Developer: Thomas Kollbach (7TPNXN7G6K)'  Example.app
codesign -s 9c8b212f6a2c2382847b104e387a01b246d4ce42 Example.app

Mac Security工具使用总结的更多相关文章

  1. Mac Security工具使用总结find-identity

    Security是Mac系统中钥匙串和安全模块的命令行管理工具,(图形化工具为Keychain Access.app).钥匙串(Keychain)实质上就是一个用于存放证书.密钥.密码等安全认证实体的 ...

  2. mac github工具将命令当下来的代码拖入macgithub中就可以

    mac github工具将命令当下来的代码拖入macgithub中就可以,刚開始傻傻的就知道点击那个加入button,总是在当下来的文件夹下创建个文件夹.并且代码不能同步

  3. iTrash for Mac(卸载工具)破解版含注册机

    iTrash for Mac是一款专为Mac用户打造非常好用的卸载工具,itrash mac版简单好用,只需要把需要卸载的程序的拖拽到iTrash Mac版窗口内就可以删除应用程序.现为大家带来itr ...

  4. 虚拟多Mac地址工具Multimac

    虚拟多Mac地址工具Multimac   Mac地址采用唯一标识标记网络的各种设备.在同一个时间内,Linux系统中的网卡只能使用一个Mac地址.在渗透测试中,为了隐藏自己的身份,往往需要以不同的Ma ...

  5. 4款最受欢迎的Mac原型工具

    原型工具中Wireframe, Mockup和prototype之间的有什么不同? 无论你是一名刚入行的UX/UI设计师,还是入行多年的老手,在制作原型的过程中一定接触或听说过其中很重要的三个原型术语 ...

  6. mac版AIcc2019旋转扭曲工具在哪?AI cc 2019 for Mac旋转扭曲工具如何使用?

    想要旋转图片?ai mac通过线性的或非线性的算法,能使图像旋转.扭曲变形.今天小编要给大家分享的是如何查找使用mac版AIcc2019旋转扭曲工具,有需要的朋友快来学习学习吧! https://ww ...

  7. Mac下载工具folx如何下载常用的软件

    最近,多档综艺节目都开展得如火如荼,比如<中国新说唱>.<这就是街舞>等深受年轻人喜欢的综艺节目.虽然手机端也可观看,但可以的话,当然是使用电脑屏幕观看节目比较过瘾. 接下来, ...

  8. 三大Mac清理工具实用性测评,哪款好用?

    相信大多数MAC用户都较为了解,Mac虽然有着许多亮点的性能,但是让用户叫苦不迭的还其硬盘空间小的特色,至于很多人因为文件堆积以及软件缓存等,造成系统空间内存不够使用的情况.于是清理工具就成为了大多数 ...

  9. Mac 词典工具推荐:Youdao Alfred Workflow(可同步单词本)

    想必大家都有用过 Mac 下常见的几款词典工具: 特性 系统 Dictionary 欧路词典 Mac 版 有道词典 Mac 版 在线搜索 ✗ ✔ ✔ 屏幕取词 ☆☆☆ ★★☆ ★☆☆ 划词搜索 ★★★ ...

随机推荐

  1. 深入理解DOM节点类型第四篇——文档片段节点DocumentFragment

    × 目录 [1]特征 [2]作用 前面的话 在所有节点类型中,只有文档片段节点DocumentFragment在文档中没有对应的标记.DOM规定文档片段(document fragment)是一种“轻 ...

  2. 创建第一个 vlan network "vlan100" - 每天5分钟玩转 OpenStack(94)

    上一节我们在 ML2 配置中 enable 了 vlan network,今天将创建 vlan100 并讨论底层网络变化. 打开菜单 Admin -> Networks,点击 “Create N ...

  3. 计时器StopWatch示例

    计时器 StopWatch stwatch = new StopWatch(getClass().getSimpleName()); try{ stwatch.start(joinPoint.getS ...

  4. 浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!

    由于近段时间帮朋友开发一个能够查询正方教务系统的微信公众平台号.有所收获.这里总结下个人经验. 开讲前,先吐槽一下新浪云服务器,一个程序里的   同一个函数  在PC测试可以正常运行,在它那里就会挂的 ...

  5. ubunt14.04 安装JDK

    1.到 Sun 的官网下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择 ...

  6. spring整合hibernate的详细步骤

    Spring整合hibernate需要整合些什么? 由IOC容器来生成hibernate的sessionFactory. 让hibernate使用spring的声明式事务 整合步骤: 加入hibern ...

  7. Asp.Net 使用Npoi导出Excel

    引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...

  8. Android测试提升效率批处理脚本(二)

    前言: 前面放出过一次批处理,本次再放出一些比较有用的批处理(获得当前包名.查看APP签名信息等),好长时没来写博客了,简单化,请看正文,更多脚本尽请期待~~~(不定期) 目录 1.[手机录屏(安卓4 ...

  9. Mybatis-mapper-xml-基础

    今天学习http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html.关于mapper.xml的sql语句的使用. 项目路径:https://github.c ...

  10. 一个基于mysql构建的队列表

    通常大家都会使用redis作为应用的任务队列表,redis的List结构,在一段进行任务的插入,在另一端进行任务的提取. 任务的插入 $redis->lPush("key:task:l ...