キーチェーンとそのコマンドたち


きっかけ

最近キーチェーンを調べなければならないシーンがあったのですが、circleCI上での話だったのでCUIしか使えず。。。
GUIでしかキーチェーンの操作したことがなかった僕はとても困ったので記事にしました。

キーチェーン概要

赤い枠の部分がキーチェーンたちで、「ログイン」が1個のキーチェーンになってます。
そして青い枠で、選択されているキーチェーン内にある項目の何を表示するかの絞り込みを行ってます。

システムが認識できるキーチェインは2つで、
システムのキーチェインが1つとユーザーのキーチェインが1つのみになります。たぶん。。

キーチェイン作成

security create-keychain {{キーチェーンパス}}

キーチェイン一覧

security list-keychains

システム側とユーザー側とで設定されているキーチェイン2つを表示します。
-d u オプションでユーザーのキーチェーンが確認できます。

読み込むキーチェインを追加します。

security list-keychains -s {{キーチェーンパス}}

キーチェインに証明書を追加します。

security import {{証明書パス}} -k {{キーチェーンパス}} -P {{password}} -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild

-Tオプションで、パスワードなしで許可するアプリを設定します。複数指定可能です。

キーチェインの設定を行います。

security set-keychain-settings -t 3600 -l {{キーチェーンパス}}

-lオプションは、スリープした時にキーチェーンをロックします。
-t 3600オプションは、3600秒後にキーチェーンをロックします。

実際にやってみよう!

キーチェーン一覧

まずはキーチェーン一覧を見てみます。
/Users/maruiyugo/Library/Keychains/login.keychain-dbが画像の「ログイン」というキーチェーンです。
/Library/Keychains/System.keychainが「システム」キーチェーンですね。

$ security list-keychains
    "/Users/maruiyugo/Library/Keychains/login.keychain-db"
    "/Library/Keychains/System.keychain"

キーチェーン作成と設定

marui.keychain-dbキーチェーンを作成し、キーチェーンの読み込みを行いました。
最後にキーチェーンのリストを表示させています。
するとlogin.keychain-dbmarui.keychain-dbに入れ替わったではありませんか!
キーチェーンアクセスをみても「ログイン」が「marui」になっています。

$ security create-keychain ~/Library/Keychains/marui.keychain-db
    password for new keychain:
    retype password for new keychain:
$ security list-keychains -s ~/Library/Keychains/marui.keychain-db
$ security list-keychains
    "/Users/maruiyugo/Library/Keychains/marui.keychain-db"
    "/Library/Keychains/System.keychain"

パスワードの保存などはまだしていないため中身は空っぽです。

キーチェインに証明書を追加

適当なp12ファイルを追加してみました。

$ security import {{p12}} -k ~/Library/Keychains/marui.keychain-db -P {{password}} -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild

一覧にp12ファイルが表示されました。

キーの中身を見てみると、オプションで指定した「codesign」「security」「productbuild」が許可されています。

まとめ

キーチェーンは今まで流されるままに使っていたので、今回調べて詳しくなれてよかったです。
記事がよかった!とかためになった!とか思ったら、励みになるのでLGTMおしてください!ないてよろこびます(๑>◡<๑)