Carpe Diem

備忘録

署名

JWTの署名検証で使う公開鍵をX.509証明書で管理する

概要 JWTをアクセストークンとして利用する場合、署名(秘密鍵)は認証サーバで、署名検証(公開鍵)はリソースサーバで行うのが良いです。 そのため認証サーバは公開鍵をリソースサーバに公開する必要があります。 Googleなどの大規模サービスを見ると、生…

GPGでgitのcommitに署名する

概要 GitHubではMergeコミットなどで といったマークを見ます。これは署名されたcommitを示すものなのですが、 なぜ必要なのか どうやったら署名できるのか を今回説明します。 環境 macOS 10.14.5 Mojave gpg 2.2.10 なぜ署名が必要か? gitのコミットは co…

HashiCorp VaultのPKI(公開鍵基盤)でルート証明書・中間証明書・サーバ証明書を発行

概要 HashiCorp VaultにはPKI(公開鍵基盤)の機能もあります。 これを使って ルートCA 中間CA を用意し、 ルート証明書 (root certificate) 中間証明書 (intermediate certificate) サーバ証明書 (primary certificate) を作成します。 環境 Vault 0.10.3

SSL/TLS周りで必要な知識

概要 SSL/TLSでは ルート証明書 (root certificate) 中間証明書 (intermediate certificate) サーバ証明書 (primary certificate) など色々なファイルや用語があり、混乱しやすいのでまとめます。 認証局(CA)について ルートCA 認証局です。 この認証局が発…

HashiCorp VaultでSSHをCA認証に

背景 AWSを運用しているとEC2のsshのキーペア管理が難しいです。 GCPであればメタデータにsshキーを登録すれば自動で各VMにsshできる仕組みがありますが、AWSは各インスタンスにsshのキーペアを1つだけ登録するようになっているため、複数人で運用するには…

署名と暗号強度について

概要 署名ロジックを選ぶ際に、どのアルゴリズムにするか、どれくらいの鍵長が適切なのかが分からなかったので調べてまとめました。 対象 共通鍵暗号(対称暗号) AES 公開鍵暗号 RSA ECC

GolangでJWTの具体的な実装

概要 以前JWTを認証用トークンに使う時に調べたこと - Carpe Diemで紹介した内容の具体的な実装の紹介です。 環境 golang 1.8.1 署名アルゴリズムと鍵長は以下とします。 署名アルゴリズム 鍵長 RSA-SHA256 4096bit 成果物 今回の完成形はこちら github.com

JWTを認証用トークンに使う時に調べたこと

概要 JWTを認証用トークンに使う時に調べたことをまとめます。 JWTとは JWTはJWSやJWEの構造の中にエンコードして埋め込まれるJSON形式のclaimのセットです。 一般的にはJWS形式のJWTが使われるのでそれを前提に進めます。 JWS形式のJWTは以下のフォーマット…

GolangでGooglePlayの課金レシートの署名検証

概要 GooglePlayでは課金処理の実行時に署名を発行してくれるため、そのレシートが正規のレシートかどうかを検証する事が可能です。 今回はGolangでその検証ロジックを実装してみます。 環境 Golang 1.6 必要な情報 以下の3つが必要になります。 1. アプリ…

OpenID Connect の署名検証

概要 OpenID Connectで必須なJWTの検証方法です。 以前書いた「Node.jsでOpenID Connect認証」を前提としています。 検証方法は主に2つあります。 Googleの検証用エンドポイントを使う 公開鍵を使い自分で検証する 公開鍵の方はさらに2つやり方があるので…

OpenIDやOAuthやらの比較

概要 色んな種類がありますが、各手法の流れ、メリット・デメリットを整理するためにまとめました。 今回比較するのは以下の4つです。 OpenID OAuth2.0を用いた認証(Authorization Flow) OAuth2.0を用いた認証(Implicit Flow) OpenIDConnect シーケンス…