LoginSignup
4
3

More than 3 years have passed since last update.

クライアント証明書を要求するAPIの作成から公開まで

Last updated at Posted at 2019-09-25

はじめに

APIにアクセスしてくるクライアントを認証するためにクライアント証明書を使いたいケースもあります。IBM API ConnectではAPI定義にクライアント認証を選択し、使用する証明書を登録しておくと、簡単にクライアント証明書を使った認証を要求するAPIを作成することが可能です。ここでは特定のヘッダーを使ってクライアント認証するケースを紹介します。

前提条件

  • 環境
    1. IBM API Connect (IBM Cloud版で、執筆時点V5.0.8.xと思われます)のLite(無料)版。
    2. 当たり前ですがIBM Cloudのアカウントはあるものとします。
    3. カタログ設定、開発者ポータル設定はできているものとします。

手順

手順は以下の流れです。

1. クライアント証明書を作成
1. まずは鍵を作成

  openssl genrsa -out CLIENT_CERT.key 2048

2. この鍵を元にCSRを作成

  openssl genrsa -out CLIENT_CERT.key 2048

3. このCSRに署名してクライアント証明書を発行

  openssl x509 -sha256 -req -days 3650 -in CLIENT_CERT.csr -signkey CLIENT_CERT.key -out CLIENT_CERT-ca.crt

2. IBM Cloudにログインし、API ConnectのAPI ManagerのAPI定義画面(ドラフト)に遷移
image.png

3. APIを新規作成し、以下を設定
 1. 基本パスの設定
image.png

 2. アプリケーションの認証を有効化
image.png

 3. セキュリティ定義のクライアントIDの設定はそのまま
image.png

image.png

 4. パスを設定、メソッドはデフォルトのGETのままで、パラメータにX-Client-Certificateヘッダーを設定
image.png

image.png

 5. アセンブルを開く
  1. 今回はバックエンドを呼ばず固定レスポンスを折り返すモックAPIとするので、invokeを消す
  2. 変数設定ポリシーをドラッグ&ドロップする
  3. message.status.codeに200、message.bodyに{"Status": "Authenticated"}を設定し、固定レスポンスを作成
image.png

 6. APIを保存したら、製品(新規でもデフォルトでも良いですが、ここでは既存の製品を使用)に追加してカタログにステージング&公開
image.png

ここではTestProductを選択して追加
image.png

TestProduct製品をTestカタログにステージング
image.png

Testカタログにステージングされた製品を公開
image.png

公開ステータスに変わる
image.png

4. 開発者ポータルにログインし、公開した製品があることを確認
image.png

5. アプリケーションを作成する
image.png

 1. アプリの名前(タイトル)を入れる
 2. 証明書のセクションに1で作成した証明書の中身をコピペしてSubmit
image.png

 3. クライアントIDとシークレットが表示されるのでメモ
image.png

 4. 3.6で公開された製品をサブスクライブする

available APIsをクリックすると製品一覧に飛ぶ
image.png

先ほどのTestProductを選択してSubscribeをクリック
image.png

サブスクライブしたいアプリとして先ほど作成したアプリを選択してSubscribe
image.png

サブスクライブ成功メッセージが出るのを確認
image.png

作成したアプリのページに戻るとサブスクリプション一覧に先ほどのTestProductがあることを確認
image.png

6. APIにアクセスしてみる。先ほど設定したX-Client-Certificateヘッダの値に、作成した証明書の中身をコピペで入れてリクエストする。ここではPostmanを使用。
   1. エンドポイントに設定したパス、メソッドを選択、
   2. X-IBM-Client-Idヘッダーに5.3でメモしたクライアントIDをセット
   3. 3.4で設定したX-Client-Certificateヘッダに1で作成した証明書の中身(PEM形式)をコピペ
   4. 呼び出しをクリックしてリクエスト実行
   5. 200 OKの{"Status": "Authenticated"}が返ることを確認
image.png
   6. 証明書の値を書き換えてリクエストすると、401 Unauthorizedエラーになることを確認(証明書が無効と怒られる)
image.png

   7. 証明書のヘッダーの中身を空にしてリクエストすると、401 Unauthorizedエラーになることを確認(MTLSを使用してないと怒られる)
image.png

まとめ

クラウド版のAPI Connectにて、クライアント認証を要求するAPIが簡単に公開できることがわかりました。オンプレ版のAPI Connectの場合だとGateway側のMTLS設定も可能のため、MTLS通信におけるクライアント証明書によるクライアント認証も可能です。

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3