ましめも

技術系メモ

MacでGUIを使ってオレオレルート認証局を作る

GUIを使ってオレオレルート認証局を作り、楽に証明書を発行したい!

オレオレ認証局を作ること自体は簡単だが、SANs証明書(マルチドメイン証明書)を発行するのは実はかなりめんどくさい!めったに作らないので手順も覚えられない!

qiita.com

実は Mac には標準に組み込まれているキーチェーンでGUIベースでオレオレ認証局を開設し SANs証明書を払い出す仕組みがあるので、今回はそれを利用して開設する。 Windows を使っている人はわからないのでご自身で調べてください><

オレオレ認証局を開設するメリット

常時SSL化が当たり前となった今、ローカル環境や開発環境等でもSSL化しテストすることが多くなってきたと思う。

たとえ商用の環境でなかったとしても、やっぱりこういうエラーは出てほしくないし無視したくない。

f:id:mashijp:20190414175200p:plain f:id:mashijp:20190414175239p:plain

f:id:mashijp:20190414175455p:plain

例えばよくある事故として、「開発時は」証明書の信頼チェックをオフにしオレオレ証明書を使えるようにしているつもりが、実際にエンドユーザーにリリースしたアプリケーションでもチェックをスキップしたままになっていた、などがある。

このような事故を防ぐために&ブラウザ等で毎回証明書を無視する画面を見なくてすむよう、「真面目に」オレオレ証明書を発行しようと思う。 (あらゆる環境で正規の証明書を発行できる人は正規のものを使うにこしたことはないのでそうしてほしい)

f:id:mashijp:20190414180710p:plain

目指したい姿はこんな感じ。オレオレルート認証局を作り、使いたい環境でルート証明書を信頼するようにしておく。 一度オレオレルート認証局を作ってしまえば、あとは 本番環境等と同じ手順で証明書を発行できるようになる。

本番環境

  1. 秘密鍵を払い出し、CSRを発行する
  2. 認証局CSR を渡し、証明書を発行する
    • いわゆるマルチドメイン証明書にしたい場合はこのときに複数のドメインを設定する (SANs)
  3. 証明書を使う

オレオレ環境

  1. 秘密鍵を払い出し、CSRを発行する
  2. オレオレルート認証局で証明書を発行する
    • いわゆるマルチドメイン証明書にしたい場合はこのときに複数のドメインを設定する (SANs)
  3. 証明書を使う

キーチェーンを使うメリット

最初に書いたとおり、Macを使っているなら、オレオレルート認証局をキーチェーンで開設することができる。そのメリットは以下の通り。

  • GUI
  • ルート認証局秘密鍵が自動的にそれなりに安全なところで保存される
  • OS上の信頼設定もできる

ルート認証局を開設する手順

手順がかなり長いように見えるが、SSL大好きマン以外は【スキップ可能】のところは無視してそのまま進んでもらっていい(多分普段の開発で困ることはないと思う)。

1) 認証局作成ウィザードを起動する

f:id:mashijp:20190414165032p:plain

キーチェーンを起動し、メニューから起動できる

2) 認証局を作成

f:id:mashijp:20190414165411p:plain

  • 固有名のタイプ: 自己署名ルート証明書
  • ユーザー証明書: SSLサーバ
    • ここで何が変わるかは分からない…
  • 「デフォルトを無効化」にチェックを入れる
    • ここにチェックを入れるとカスタマイズが可能になる
  • メールの送信元は適当

3) 証明書情報(1)

f:id:mashijp:20190414165851p:plain

  • 有効期間: 好きに設定する
    • 長くないと不便だと思う人が多いと思うのでここでは10年にする
  • インビテーションに署名: 外す
    • 割愛するが今回の用途では不要なので外す (どっちでもいい)

4) 証明書情報(2)

f:id:mashijp:20190414170134p:plain 好きに入力してほしい

5) このCAの鍵ペア情報【スキップ可能】

f:id:mashijp:20190414170224p:plain 好きなものを選ぶ。2019年現在、世の中の主要ルート証明書RSA 2048bit。こだわりがないなら変えないほうがいい。

6) このCAのユーザーが使う鍵ペア情報を指定【スキップ可能】

f:id:mashijp:20190414170424p:plain これも特に変えなくていい

7) このCAが使う鍵用途拡張領域【スキップ可能】

f:id:mashijp:20190414170608p:plain

なんとなく本物のルート証明書っぽくしたいので以下のようにしてみた。詳しい方、間違ってたら教えてください。 多分オレオレ証明書として使う分にはここの設定をどう変えても普通に動くと思う。

  • この拡張領域は重要 にチェックを入れる
  • 証明書署名、CRL署名 にチェックを入れる

多分ここの部分に相当すると思うんだけど… f:id:mashijp:20190414170750p:plain

8) このCAのユーザーが使う鍵用途拡張領域【スキップ可能】

f:id:mashijp:20190414171014p:plain

  • この拡張領域は重要 にチェックを入れる
  • 署名、鍵の暗号化 にチェックを入れる

9) このCAが使う拡張鍵用途拡張領域【スキップ可能】

f:id:mashijp:20190414171158p:plain

そのまま進む

10) このCAのユーザーが使う拡張鍵用途拡張領域【スキップ可能】

f:id:mashijp:20190414171236p:plain - この拡張領域は重要 のチェックを外す - SSLクライアント認証、SSLサーバ認証 にチェックを入れる

11) このCAが使う基本成約拡張領域【スキップ可能】

f:id:mashijp:20190414171352p:plain そのまま進む

12) このCAのユーザーが使う基本成約拡張領域【スキップ可能】

f:id:mashijp:20190414171446p:plain - 基本成約拡張領域を含める にチェックを入れる

13) このCAが使うサブジェクト代替名拡張領域【スキップ可能】

f:id:mashijp:20190414171528p:plain そのまま

14) ユーザーが使うサブジェクト代替名拡張領域【スキップ可能】

f:id:mashijp:20190414171629p:plain

15) 保存場所の指定【スキップ可能】

f:id:mashijp:20190414171647p:plain

16) 完成!

f:id:mashijp:20190414171713p:plain

オレオレルート証明書の信頼設定

f:id:mashijp:20190414173820p:plain

発行した証明書を選び、上記のように「常に信頼する」になっていれば使える状態のはずだが、なぜか発行したてのルート証明書は信頼されないことがある? その場合は、一回「信頼しない」にし画面を閉じたあともう一度開いて「常に信頼する」に設定しておく。

f:id:mashijp:20190414173840p:plain

Mac以外の環境で信頼するようにしたい場合は、ルート証明書を書き出し、その証明書を信頼するようそれぞれのOS/デバイスで設定すればよい。

続き

mashi.hatenablog.com

この手順で作った僕の認証局の証明書を貼っておく。みんな僕のことすごく信頼していると思うので、みんなのOSで信頼するように設定しておいてね*1! (^^)

-----BEGIN CERTIFICATE-----
MIIDWTCCAkGgAwIBAgIBATANBgkqhkiG9w0BAQsFADBOMRkwFwYDVQQDDBBtYXNo
aSBSb290IENBIFIyMQswCQYDVQQGEwJKUDEkMCIGCSqGSIb3DQEJARYVd2VibWFz
dGVyQG1hc2hpanAubmV0MB4XDTIwMTEwMTAxMzA0N1oXDTMwMTAzMDAxMzA0N1ow
TjEZMBcGA1UEAwwQbWFzaGkgUm9vdCBDQSBSMjELMAkGA1UEBhMCSlAxJDAiBgkq
hkiG9w0BCQEWFXdlYm1hc3RlckBtYXNoaWpwLm5ldDCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBANJ6LVh2asGdpJsNKwub634xu5lXqMUcCCIh6urzkXTd
zFazh3S39QfMUZvUpAblGQPnXM9uLqlDRjj2Pqnj4tCiigNP28XjCbXAN3uM8vPa
nufjjZaGSUtbQGLtVJgdCdmD0WWBjEQLDboIqTQbwS/287yiaSfSiscqzqBAvGy1
r+ZkYCKb4F9M/ZgMDvBDBl5MSTENx7BQsoHyniaD0yBWUl7uiZ23wv2KQGp6Hq3T
7+NmdsRX3AMwXPysfLL+IBPV0NBK6biKWTeVH6JYaBBe13svDhZDDgcqm7OHsPpi
OXbRtfElC8yutks63s7zyIzW/Ypp24E4ATN2T1dhiAUCAwEAAaNCMEAwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAqQwHQYDVR0lBBYwFAYIKwYBBQUHAwIG
CCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4IBAQAKCDZedLoFoC2+P1ILyf57KQle
PakiQibwYE680ye+XD0mseOHAp2xAvonPNkLXi639m/5rxxflOP9nA8P6DiuPOQq
xgeCdYK0NSPVqpW2NSYu2NrOCHWRGKc6eKwXkPjIcklAf2QvRTJwb48BPpOCwZGo
aXR0CrSTo/N6J53AA6JlnjK0hZWxir8m49hMRXvuI/jkCf3uartQO8tDQQAaXSzr
py3zGZzGt+Tw+upv29LwPBEvJmXsxyolRQkEScazYZPDXgpwA7mXeP1fX6Kr8hIR
yQ0CHDvdOOXxn1OPTWEgVphQyo3Vidv1dwwT0jbfAAvbEQajF06PUraSSeua
-----END CERTIFICATE-----