20201207のMacに関する記事は7件です。

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のバージョンが上がったりで見直しは定期的に必要になりますが、煩雑な作業をコマンドで処理することで運用形態に合わせた運用フローの自動化が進められると思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

個人的なMacセットアップ

個人用のメモ

homebrewのインストール

https://brew.sh/index_ja

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 drawio

brewでインストールするもの

$ brew install npm

入力ソース設定

キーボードの環境設定 >
[ユーザ辞書]
- 英字入力中にスペルを自動変換:オフ
- 文頭を自動的に大文字にする:オフ

[入力ソース]
- ライブ変換:オフ
- タイプミスを修正:オフ

Terminalの設定

zshにpreztoをインストール
https://github.com/sorin-ionescu/prezto

Iterm2にステータスバーを表示
Preferences > Profiles
[Session]
- Status bar enabled:オン
スクリーンショット 2020-12-06 22.56.20.png

Preferences > Appearance
[General]
- Status bar location:Bottom

カラースキーマはここからcloneして設定
https://github.com/aereal/dotfiles

dotfiles/colors/Japanesque/Japanesque.itermcolors

git

GitGub CLIの設定
https://cli.github.com/

vscode

インストールするライブラリ
- vim
- Ayu

settings.json
{
  "editor.tabSize": 2,
  "vim.insertModeKeyBindings": [
      {
        "before": ["j", "j"],
        "after": ["<Esc>"]
      }
  ],
"workbench.colorTheme": "Ayu Mirage",
"window.zoomLevel": 0
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/homebrew

PATHを通す

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/A

version上げ

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"
    }
  ]
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

どのキーをショートカットに割り当てたらいいのかわからない問題(for Mac)

注意: この記事はmacOS Sierra以降を使っている方が対象です


生産性向上といえばショートカットキーの活用です。  
しかし問題になるのがどのキーをショートカットに割り当てたらいいのかわからない問題です。
みんな大好きVSCODEでは簡単にショートカットを追加できます。追加しようと思ったキーが既に割り当てられていたら警告が出る安心設計です。しかし結局「どのキーが空いてるんだよ(´;ω;`)」となります。

この問題を解決する方法はKarabiner-ElementsCasplockの導入です。


Karabiner-Elementsは、macOS Sierra以降でキーボードをカスタマイズするための強力なユーティリティです。
(公式GitHubより直訳)

Karabiner-Elementsはこちらからダウンロードできます。
Karabiner-Elements

Capslockはこちらに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ボタンを押すとお手軽に入れられます。

image.png

次にKarabiner-Elementsを開き、Profilesタブをクリックします。

初めての方はDefault profileでOKですが、再設定したい場合は新しいprofileを作成すれば現在のprofileに手を加えずに安全に作業できます。

selectedでチェックが入っているのが現在の設定です。

image.png

complex_modificationsのタブを開いて左下の+Add ruleから機能を追加します。

image.png

CapsLock to Hyper/Escapeの右にあるEnableを押すと有効化されます。(他のHyper...はここでは有効化しません)

image.png

これでcapslockcmd+shift+ctrl+optの4キー同時押しになります。また、単独で押すとescキーとして動作します。

お好きなアプリケーションのショートカットを設定をして効率的な環境を作って下さい。

独自設定の方法

「便利そうだけど、もうcapslockctrlにアサインしてて慣れちゃってるんだよなー」という方。
自分もそうでしたが、今は頻繁に使うctrl+actrl+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+actrl+eだけcapslock+acapslock+eにアサインしています。

Hyper ScreenShot

capslock+3で全画面スクリーンショット、capslock+4で選択範囲スクリーンショットを取ります。保存ではなくクリップボードにコピーされますので、そのままqiitaやtwitterの投稿画面でpasteできます。

まとめ

お気づきの方も多いと思いますが、Capslock Enhancementをimportすると色んなHyper〇〇が一緒に入ります。  
便利なものもありますが、何でもかんでも有効化してしまうと結局はアプリごとに使えるショートカットが減ってしまいます。

あまり使わないものはできるだけ有効化しないことが便利な環境を作り上げるコツだと思います。


Karabiner-Elements 設定項目

こちらに私の設定ファイルを置いていますので参考にして下さい。(ついでにstarもお願いします)
また、「便利な設定ファイル作ったよ!」という方はコメント欄から教えて下さい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 install

make時のエラーが出るので

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

完了です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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」に遭遇時の対処法はネット上ではあまり見つからなかったため、今回投稿致しました。
同じような問題に遭遇した方の参考になれば幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

外部ネットワークから家の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を入力し、「接続」をクリックします。

スクリーンショット 2020-12-07 0.33.27.png

VNC接続の場合、そのままだと暗号化されないため、
SSHでポートフォワーディングするのがいいかなと思います。
次回そちらの記事書こうかと思います・・・

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む