參考 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