• Mac Security工具使用总结


    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 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
  • 相关阅读:
    Recommended Books for Algo Trading in 2020
    Market Making is simpler than you think!
    Top Crypto Market Makers of 2020
    Top Crypto Market Makers, Rated and Reviewed
    爬取伯乐在线文章(五)itemloader
    爬取伯乐在线文章(四)将爬取结果保存到MySQL
    爬取伯乐在线文章(三)爬取所有页面的文章
    爬取伯乐在线文章(二)通过xpath提取源文件中需要的内容
    爬取伯乐在线文章(一)
    爬虫去重策略
  • 原文地址:https://www.cnblogs.com/pixy/p/4817579.html
Copyright © 2020-2023  润新知