- 投稿日:2020-12-07T22:36:21+09:00
macOS/iOS Keychain と Security framework のCLIで証明書を管理しよう
はじめに
macOS/iOS アプリを開発していると、定期的に証明書の更新が必要になりますね。
証明書を作った後に、手元の開発マシンに証明書を登録したり、CIとして運用されているビルドマシンに証明書を登録したり、といったように証明書を登録するところはいくつかあり、それぞれに対して手作業のメンテナンスが発生することがあります。
運用形態に合わせてできるところから自動化して管理していこうと、まずは macOS で証明書の操作やキーチェーンの管理などのセキュリティフレームワークをコマンドラインから実行して試してみました。
具体的には
/usr/bin/security
コマンドについて試しています。※
macOS Catalina Version 10.15.7
の環境で試しています。コマンド操作してみよう
まずは
man
コマンドを使ってできることを見てみます。$ man security security(1) BSD General Commands Manual security(1) NAME security -- Command line interface to keychains and Security framework SYNOPSIS security [-hilqv] [-p prompt] [command] [command_options] [command_args] DESCRIPTION A simple command line interface which lets you administer keychains, manipulate keys and certificates, and do just about anything the Security framework is capable of from the command line. By default security will execute the command supplied and report if anything went wrong. If the -i or -p options are provided, security will enter interactive mode and allow the user to enter multiple commands on stdin. When EOF is read from stdin security will exit. Here is a complete list of the options available: -h If no arguments are specified, show a list of all commands. If arguments are provided, show usage for each the specified commands. This option is essentially the same as the help command. -i Run security in interactive mode. A prompt (security> by default) will be displayed and the user will be able to type commands on stdin until an EOF is encountered. -l Before security exits, run /usr/bin/leaks -nocontext on itself to see if the command(s) you executed had any leaks. -p prompt This option implies the -i option but changes the default prompt to the argument specified instead. -q Will make security less verbose. -v Will make security more verbose. SECURITY COMMAND SUMMARY security provides a rich variety of commands (command in the SYNOPSIS), each of which often has a wealth of options, to allow access to the broad functional- ity provided by the Security framework. However, you don't have to master every detail for security to be useful to you. Here are brief descriptions of all the security commands: help Show all commands, or show usage for a command. list-keychains Display or manipulate the keychain search list. default-keychain Display or set the default keychain. login-keychain Display or set the login keychain. create-keychain Create keychains. delete-keychain Delete keychains and remove them from the search list. lock-keychain Lock the specified keychain. unlock-keychain Unlock the specified keychain. set-keychain-settings Set settings for a keychain. set-keychain-password Set password for a keychain. show-keychain-info Show the settings for keychain. dump-keychain Dump the contents of one or more keychains. create-keypair Create an asymmetric key pair. add-generic-password Add a generic password item. add-internet-password Add an internet password item. add-certificates Add certificates to a keychain. find-generic-password Find a generic password item. delete-generic-password Delete a generic password item. set-generic-password-partition-list Set the partition list of a generic password item. find-internet-password Find an internet password item. delete-internet-password Delete an internet password item. set-internet-password-partition-list Set the partition list of a internet password item. find-key Find keys in the keychain set-key-partition-list Set the partition list of a key. find-certificate Find a certificate item. find-identity Find an identity (certificate + private key). delete-certificate Delete a certificate from a keychain. delete-identity Delete a certificate and its private key from a keychain. set-identity-preference Set the preferred identity to use for a service. get-identity-preference Get the preferred identity to use for a service. create-db Create a db using the DL. export Export items from a keychain. import Import items into a keychain. cms Encode or decode CMS messages. install-mds Install (or re-install) the MDS database. add-trusted-cert Add trusted certificate(s). remove-trusted-cert Remove trusted certificate(s). dump-trust-settings Display contents of trust settings. user-trust-settings-enable Display or manipulate user-level trust settings. trust-settings-export Export trust settings. trust-settings-import Import trust settings. verify-cert Verify certificate(s). authorize Perform authorization operations. authorizationdb Make changes to the authorization policy database. execute-with-privileges Execute tool with privileges. leaks Run /usr/bin/leaks on this process. smartcards Enable, disable or list disabled smartcard tokens. list-smartcards Display available smartcards. export-smartcard Export/display items from a smartcard. error Display a descriptive message for the given error code(s).上記は一部ですが、できることがたくさんあります。今回はその中の一部ですが、試したことを順を追って書いてみます。
キーチェーンのサーチリストを表示する
$ security list-keychain "/Users/user/Library/Keychains/login.keychain-db" "/Library/Keychains/System.keychain"デフォルトキーチェーンを表示する
$ security default-keychain "/Users/user/Library/Keychains/login.keychain-db"ログインキーチェーンを表示する
$ security login-keychain "/Users/user/Library/Keychains/login.keychain-db"キーチェーンを作成する
今回は
test.keychain
キーチェーンを作成してみることにします。$ security create-keychain -p password test.keychain上記の作成コマンドを実行しただけだとサーチリストに表示されません。
$ security list-keychain "/Users/user/Library/Keychains/login.keychain-db" "/Library/Keychains/System.keychain"lsコマンドでファイルが作成されていることが見えます。
$ ls -l /Users/user/Library/Keychains/キーチェーンのサーチリストに追加します。
これを実行するとGUIのKeychain access にも表示されるようになりました。$ security list-keychains -d user -s login.keychain-db test.keychain-dbキーチェーンのサーチリストを見ると、上記の追加コマンドで引数に指定した順で表示されていました。
$ security list-keychain "/Users/user/Library/Keychains/login.keychain-db" "/Users/user/Library/Keychains/test.keychain-db" "/Library/Keychains/System.keychain"キーチェーンの中身を表示する
$ security dump-keychain test.keychain-dbキーチェーンに証明書をインポートする
アプリのビルドに使うためにコードサインを指定して証明書をインポートします。
$ security unlock -p password "/Users/user/Library/Keychains/test.keychain-db" $ security import Certificates.p12 -k "/Users/user/Library/Keychains/test.keychain-db" -P "" -T /usr/bin/codesign 1 identity imported. $ security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k password "/Users/user/Library/Keychains/test.keychain-db"キーチェーンから証明書をエクスポートする
初回の一回だけ許可するポップアップダイアログで許可する必要がありました。キーチェーン単位で1回ポップアップダイアログが表示されるようでした。2回目以降はコマンドだけで実行できました。
$ security unlock-keychain -p password "/Users/user/Library/Keychains/test.keychain-db" $ security export -k "/Users/user/Library/Keychains/test.keychain-db" -f pkcs12 -P "" -o ./mycerts.p12キーチェーンから証明書を削除する
common name を指定して削除する場合は、
$ security unlock -p password "/Users/user/Library/Keychains/test.keychain-db" $ security delete-certificate -c name "/Users/user/Library/Keychains/test.keychain-db"または、SHA-256 または SHA-1 ハッシュ値を指定して削除する場合は、
$ security unlock -p password "/Users/user/Library/Keychains/test.keychain-db" $ security delete-certificate -Z SHA-1 "/Users/user/Library/Keychains/test.keychain-db"このハッシュ値は、コマンド操作で取得する方法は見つけることができず、GUI の Keychain Access から証明書の詳細を見ると Fingerprints に表示されている値で実行できました。
キーチェーンを削除する
$ security delete-keychain "/Users/user/Library/Keychains/test.keychain-db"おわりに
OSのバージョンが上がったりで見直しは定期的に必要になりますが、煩雑な作業をコマンドで処理することで運用形態に合わせた運用フローの自動化が進められると思います。
- 投稿日:2020-12-07T22:09:55+09:00
個人的なMacセットアップ
個人用のメモ
homebrewのインストール
brew caskでインストールするもの
$ brew cask install google-chrome $ brew cask install iterm2 $ brew cask install docker $ brew cask install visual-studio-code $ brew cask install tableplus $ brew cask install macvim $ brew cask install kindle $ brew cask install spotify $ brew cask install drawiobrewでインストールするもの
$ brew install npm入力ソース設定
キーボードの環境設定 >
[ユーザ辞書]
- 英字入力中にスペルを自動変換:オフ
- 文頭を自動的に大文字にする:オフ[入力ソース]
- ライブ変換:オフ
- タイプミスを修正:オフTerminalの設定
zshにpreztoをインストール
https://github.com/sorin-ionescu/preztoIterm2にステータスバーを表示
Preferences > Profiles
[Session]
- Status bar enabled:オン
Preferences > Appearance
[General]
- Status bar location:Bottomカラースキーマはここからcloneして設定
https://github.com/aereal/dotfilesdotfiles/colors/Japanesque/Japanesque.itermcolors
git
GitGub CLIの設定
https://cli.github.com/vscode
インストールするライブラリ
- vim
- Ayusettings.json{ "editor.tabSize": 2, "vim.insertModeKeyBindings": [ { "before": ["j", "j"], "after": ["<Esc>"] } ], "workbench.colorTheme": "Ayu Mirage", "window.zoomLevel": 0 }
- 投稿日:2020-12-07T19:20:05+09:00
M1 macにhomebrewをいれる
概要
Homebrewがversion2.6でm1 macに対応しましたね!?
Today I’d like to announce Homebrew 2.6.0. The most significant changes since 2.5.0 are macOS Big Sur support on Intel, brew commands replacing all brew cask commands, the beginnings of macOS M1/Apple Silicon/ARM support and API deprecations.
https://brew.sh/2020/12/01/homebrew-2.6.0/ARM版はまだ完全版じゃないため、Intel版(Rosetta使用)と並行して使えるように、
/opt/homebrew
にインストールするようにとのことmacOS Homebrew running natively on M1/Apple Silicon/ARM has partial functionality. We recommend installing into /opt/homebrew and forbid installing into /usr/local (to avoid clashing with the macOS Intel install and allow their usage side-by-side). We currently recommend running Homebrew using Intel emulation with Rosetta 2.
実行環境
Big Sur 11.0.1 MacBook Pro (13-inch, M1, 2020)インストール方法
ここを参考にインストールします。
先述通り/opt/homebrew
に置くようにとのことなので、まずはディレクトリ作成からsudo mkdir /opt/homebrew sudo chown -R $(whoami) /opt/homebrew curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C /opt/homebrewPATHを通す
macのデフォルトシェルがzshになっているためzshrcに入れました
touch ~/.zshrc echo 'export PATH=$PATH:/opt/homebrew/bin' >> ~/.zshrc source ~/.zshrcインストールできてるか確認
which brew /opt/homebrew/bin/brew brew --version Homebrew >=2.5.0 (shallow or no git repository) Homebrew/homebrew-core N/Aversion上げ
2.5になってたのでバージョンを上げます
brew update brew --version Homebrew 2.6.0-104-g24f7898 Homebrew/homebrew-core (git revision 694814; last commit 2020-12-07)動作確認
ちゃんとarm版がインストールされました?
brew install jq file /opt/homebrew/bin/jq /opt/homebrew/bin/jq: Mach-O 64-bit executable arm64 echo '{"mac":[{"id":1,"name":"intel"},{"id":2,"name":"arm"}]}' | jq . { "mac": [ { "id": 1, "name": "intel" }, { "id": 2, "name": "arm" } ] }
- 投稿日:2020-12-07T16:10:37+09:00
どのキーをショートカットに割り当てたらいいのかわからない問題(for Mac)
注意: この記事はmacOS Sierra以降を使っている方が対象です
生産性向上といえばショートカットキーの活用です。
しかし問題になるのがどのキーをショートカットに割り当てたらいいのかわからない問題
です。
みんな大好きVSCODEでは簡単にショートカットを追加できます。追加しようと思ったキーが既に割り当てられていたら警告が出る安心設計です。しかし結局「どのキーが空いてるんだよ(´;ω;`)」となります。この問題を解決する方法は
Karabiner-Elements
とCasplock
の導入です。
Karabiner-Elementsは、macOS Sierra以降でキーボードをカスタマイズするための強力なユーティリティです。
(公式GitHubより直訳)Karabiner-Elementsはこちらからダウンロードできます。
Karabiner-ElementsCapslockはこちらにREADMEがあります。
Vonng/Capslock: Make Capslock Great Again!敬虔なmac信者の方なら当たり前に使っているツールですが、Capslockを活用すればさらに便利です。
ざっくり言うと、capslock
を押すことがcmd+shift+ctrl+opt
の4キーを同時押ししたことになります。
例えばVSCODEのショートカット設定でcmd+shift+ctrl+opt+x
というショートカットを登録すれば、実際にはcapslock+x
で使えるというわけです。基本設定の方法
まずKarabiner-Elementsをインストールしていない方はこちらからどうぞ。
次にkarabiner-elements-complex_modificationsから
Capslock Enhancement
をインポートします。右のimportボタンを押すとお手軽に入れられます。次にKarabiner-Elementsを開き、Profilesタブをクリックします。
初めての方は
Default profile
でOKですが、再設定したい場合は新しいprofileを作成すれば現在のprofileに手を加えずに安全に作業できます。
selected
でチェックが入っているのが現在の設定です。
complex_modifications
のタブを開いて左下の+Add rule
から機能を追加します。
CapsLock to Hyper/Escape
の右にあるEnable
を押すと有効化されます。(他のHyper...はここでは有効化しません)これで
capslock
がcmd+shift+ctrl+opt
の4キー同時押しになります。また、単独で押すとesc
キーとして動作します。お好きなアプリケーションのショートカットを設定をして効率的な環境を作って下さい。
独自設定の方法
「便利そうだけど、もう
capslock
はctrl
にアサインしてて慣れちゃってるんだよなー」という方。
自分もそうでしたが、今は頻繁に使うctrl+a
とctrl+e
だけcapslock
にアサインしています。ctrl+c
も結構使うけどそれはそのまま元のctrl
キーを使っています。
なので一度、独自の設定をしてみることをオススメします。独自設定の方法はこちらに詳しく書いてあるので参照して下さい。
Karabiner-Elementsの設定項目をまとめました - Qiita
ただし、記事にも書いてあるのですが、
karabiner.json
ではなく/assets/complex_modifications/
の中に新しいjsonファイルを作ったほうがわかりやすくて失敗しませんのでオススメです。設定例
以下は私が実際に使用している
Karabiner-Elements
の設定です。コマンドキーを単体で押したときに、英数・かなキーを送信する
USキーボードの場合、英数とかなを切り替えるのに左右のcmdキーで切り替えます。
Quit application by pressing command-q twice
うっかり
cmd+q
を押してしまうとアプリが終了してしまうのを防止します。cmd+q
を2回押すことで終了できるようになります。Hyper Navigation
ここからは私の独自設定です。こちらのgistに設定方法が書いてありますので、同じ設定にしたい場合はダウンロードして使うことができます。
vimに慣れている方は
hjkl
でカーソル移動を行いますが、私は何回も挫折しました。感覚的に上と下が横並びというのが慣れません。なのでjikl
をアサインしています。もちろんcapslock
との同時押しです。さらに左shift
同時押しで選択もできます。Hyper Control
ctrl+a
とctrl+e
だけcapslock+a
とcapslock+e
にアサインしています。Hyper ScreenShot
capslock+3
で全画面スクリーンショット、capslock+4
で選択範囲スクリーンショットを取ります。保存ではなくクリップボードにコピーされますので、そのままqiitaやtwitterの投稿画面でpasteできます。まとめ
お気づきの方も多いと思いますが、Capslock Enhancementをimportすると色んな
Hyper〇〇
が一緒に入ります。
便利なものもありますが、何でもかんでも有効化してしまうと結局はアプリごとに使えるショートカットが減ってしまいます。あまり使わないものはできるだけ有効化しないことが便利な環境を作り上げるコツだと思います。
こちらに私の設定ファイルを置いていますので参考にして下さい。(ついでにstarもお願いします)
また、「便利な設定ファイル作ったよ!」という方はコメント欄から教えて下さい。
- 投稿日:2020-12-07T08:03:38+09:00
Swftools(pdf2pwf)のMacへのインストール
Swftoolsのインストール方法 for Mac
pdfをswfに変換する必要があったのでオープンソースの変換ツールを入れた時のメモ書きを投稿します。
gitからソースを取得
https://github.com/matthiaskramm/swftools
から取得
git clone git://github.com/matthiaskramm/swftools swftools足りないライブラリをインストール
brew install freetype brew install giflibビルドとインストール
./configure make make installmake時のエラーが出るので
xpdf/GlobalParams.cc:925:12: error: ordered comparison between pointer and zero ('char *' and 'int') if(pos1>=0) ~~~~^ ~ xpdf/GlobalParams.cc:927:17: error: ordered comparison between pointer and zero ('char *' and 'int') else if(pos2>=0) ~~~~^ ~ 2 errors generated.ソースの修正
https://github.com/macports/macports-ports/commit/be0a05d923809a5bad3af8bef7eca051de7016a1
GlobalParams.ccのソースを!= NULLに修正
make clean make make installインストールできたか実際に変換してみる
pdfをswfに変換
pdf2swf infile.pdf -o outfile.swf完了です。
- 投稿日:2020-12-07T02:41:42+09:00
Laravelプロジェクト作成時に"Could not find package laravel/laravel with stability stable."と出る
筆者の環境
- macOS Catalina バージョン10.15.6
- PHP 7.4.13
- Composer 2.0.8
発生問題
久しぶりに新規Laravelプロジェクトをローカルに作成しようと思い、いつも通りターミナルから以下のコマンドを打つと…
$ composer create-project laravel/laravel laravel_sample --prefer-dist以下のエラーが。
[InvalidArgumentException] Could not find package laravel/laravel with stability stable.仕方がないのでlaravel/installerを使おうと思い、以下のようにlaravel/installerをインストールするコマンドを打つと…
$ composer global require "laravel/installer"以下のエラーが。
[InvalidArgumentException] Could not find package laravel/installer. Did you mean one of these? laravel/installer codemyviews/vanilla-installer解決策
結論、Composer自体を完全にアンインストールし、インストールし直したら無事エラーも起きずLaravelプロジェクトが作成でき、laravel/installerもインストールできました…(詳細な原因は分からず…)
アンインストール手順については以下の記事を参考させて頂きました。
(アンインストール時に必要となる.composerとcomposer.pharのパスはMacでは、「/Users/ユーザ名/.composer」、「/usr/local/bin/composer/composer.phar」となります。)[PHP]Composer自体を完全にアンインストールする方法 | akamist blog
問題の原因は特定できませんでしたが、ひとまずアンインストールすることで解決できました。
「Could not find package laravel/laravel with stability stable」に遭遇時の対処法はネット上ではあまり見つからなかったため、今回投稿致しました。
同じような問題に遭遇した方の参考になれば幸いです。
- 投稿日:2020-12-07T00:38:11+09:00
外部ネットワークから家のiMACに繋ぐ方法
内容
外出先MacBoook,Windows等から自宅iMacへ接続方法になります。
(ローカルネットワーク上の画面共有でなく、外部ネットワークからの接続を想定)接続方法
接続方法は調べた限り2つあるかと思います。
・ssh接続(ターミナルからの接続になります。Lunuxからでも入れます。)
・リモートログイン(WindowsのRDPみたいな感じです。Windowsからでも入れます。)iMac側の設定
どちらの接続方法もiMAC(自宅)側で以下2つの設定をします。
・リモートログインの許可
・ルータファイヤーウォールの許可
それぞれ設定値を見ていきます。1.SSH接続
・リモートログインの許可
Mac側でリモート接続の許可をします。
システム環境設定>共有>リモートログインをオンにします。・ルータファイヤーウォールの接続許可
接続元から接続先(iMac)へ22番ポートへの接続許可をします。
・接続方法
ssh接続を行います。
コマンドプロンプトで以下のコマンドを入力します。ssh 接続先ユーザ名@ホスト名orIPアドレス
2.リモートログイン
・リモートログインの許可
システム環境設定>共有>リ画面共有をオンにします。
*Windowsなどから接続する場合は、
「コンピュータ設定」「VNC使用者が画面を操作することを許可」を設定します。・ルータファイヤーウォールの接続許可
接続元から接続先(iMac)へ5900番ポートへの接続許可をします。
・接続方法
VNC接続を行います。
Finderから移動>サーバへ接続で接続先のグローバルIPを入力し、「接続」をクリックします。VNC接続の場合、そのままだと暗号化されないため、
SSHでポートフォワーディングするのがいいかなと思います。
次回そちらの記事書こうかと思います・・・