Mac Security工具使用总结
2015-09-22 12:13
573 查看
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检查执行的命令是否有泄漏
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是苹果系统里的一项保密机制,会自动透明地对主目录的内容进行实时加密和解密)
-p <password> 设置新创建的钥匙串的密码
-P 调用SecurityAgent图形化程序设置密码
-u 启动GUI输入钥匙串密码
-p <password> 指定钥匙串密码
不带任何参数时命令行交互方式提示输入密码
-a 锁定所有钥匙串
如果指定了具体钥匙串,则只锁定那一个钥匙串
什么参数都不带时,锁定默认钥匙串
-l 系统睡眠时锁定
-u 一定时间周期后锁定
-t <timeout_seconds> 闲置指定时间后锁定,省略这个选项则没有延时
-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 指定可以使用导入项目的程序,可以重复出现多次
-c <name> 按common name删除证书
-Z <hash> 按SHA1哈希值删除证书
-t 同时删除该证书的用户信任设置
要删除的证书必须能够唯一确定,如果未指定钥匙串则是用默认搜索列表中的所有钥匙串
-p 按指定用途策略查找,可重复出现以指定多项,可用值有: basic, ssl-client, ssl-server, smime, eap, ipsec, ichat, codesigning, sys-default, sys-kerberos-kdc ,macappstore, appleID
-s 为-p指定的策略提供参数
-v 只显示有效的,默认显示所有。
如果未指定keychain,则使用默认的搜索列表
-d 使用指定的preference domain
-s 设置钥匙串搜索列表
不带任何参数时,显示搜索列表
-a 输出访问控制列表
-i 交互式编辑访问控制列表
-d 输出项目中解密的数据
-r 输出项目中加密的原始数据
-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
如果identiy正好是40位16进制数,则按证书的SHA-1指纹查找
如果identity为单个横线 "-",则执行ad-hoc签名,不会用到identity。
首先查找keychain identity preference的full name
在keychain中查找Subject的common name,找到多个则失败。大小写敏感,完整匹配比部分匹配更好。多个keychain中包含同一个证书也是可以的。
关于codesign的更多用法可以查看帮助文档(命令行执行:man codesign)。
示例
~/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 123456 certsOfAppBuild.keychain security unlock-keychain -p 123456 certsOfAppBuild.keychain security -k certsOfAppBuild.keychain import xxx.p12 -P 111111 -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
相关文章推荐
- Swift数组字典基本定义控制流基本应用
- POJ(2186)强连通分量分解
- Android判断服务是否运行及定位问题实例分析
- 【软考】——软考视频总结
- 路由与网关的关系
- FOJ 2020 组合(组合数取素数摸模板:Lucas)
- Minimum Path Sum
- 【经典算法】:ASCII码打印的算法实现
- HDU_2686_Matrix(最小费用流)
- input输入字母自动大小写转换
- Android Studio 中 添加作者 时间 之类的 注释
- jQuery中的siblings
- 数据展现---Echarts
- TS流 PS流 ES流
- CPU进程与线程的关系和区别
- android R 文件消失
- Python脚本05 —— 从七牛服务器下载图片
- linux下shell编程基础
- 产品玩法全颠覆 联想new glass落地体现联想可穿戴战略精髓
- bootstrap table自动换行