Security是Mac系統中鑰匙串和安全模塊的命令行管理工具,(圖形化工具為Keychain Access.app)。鑰匙串(Keychain)實質上就是一個用於存放證書、密鑰、密碼等安全認證實體的倉庫,在計算機中保存為一個.keychain的文件
使用手冊:
命令行執行
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檢查執行的命令是否有泄漏
子命令列表如下
- 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圖形化程序設置密碼
向鑰匙串中添加鑰匙(認證實體)
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 #顯示默認搜索列表中有效地認證實體
問題:
security find-identity 0 valid identities found
不能用root運行!
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