macOS-security命令

參考 https://www.cnblogs.com/elesos/p/7093535.html 

https://www.cnblogs.com/pixy/p/4817579.html

含義:

Security是Mac系統中鑰匙串和安全模塊的命令行管理工具,(圖形化工具爲Keychain Access.app)。
鑰匙串(Keychain)實質上就是一個用於存放證書、密鑰、密碼等安全認證實體的倉庫,在計算機中保存爲一個.keychain的文件。

使用手冊:

man security

語法:

 

security [-hilqv] [-p prompt] [command] [command_options] [command_args]

  • [subcommand] -h 幫助,無命令參數時查看所有命令,帶命令參數時顯示該命令的使用方法
  • -i 交互模式
  • -p 進入交互模式,使用自定義提示符
  • -q 減少信息輸出
  • -v 增加信息輸出
  • -l security退出前,調用 /usr/bin/leaks -nocontext檢查執行的命令是否有泄漏

子命令列表如下

  • 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



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章