3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CIS(IBM Cloud Internet Service)でmTLSを構成する(3) - クライアント証明書情報をHTTPヘッダに含める

Last updated at Posted at 2020-04-16

#1. はじめに
この記事は、以下の記事の続編です。

mTLSを単純に構成しただけではクライアント情報はOrigin Serverには含まれていないため、クライアント証明書の情報をCIS Edge Functions(Cloudflare Workers相当)を使って、クライアント証明書情報を付与する。

#2. mTLS構成直後のHTTPリクエストヘッダー一覧

Apache+CGIで全てのHTTPリクエストヘッダを出力するを構成して、まずどのようなHTTPヘッダがOriginサーバーに渡ってきているかを確認してみる。
実質上、クライアントを判別する情報は、CF_CONNECTING_IPX_FORWARDED_FORに含まれるクライアントのIPアドレスぐらいしかない。
image.png

#3. CIS Edge Functionsを使ってクラアイント証明書をHTTPヘッダに付与する。

##3-1. Actionの追加
image.png
Action nameは任意。コードは、こちらのサンプルコードがそのまま動くので、そのまま貼り付ける。

サンプルスコード
addEventListener("fetch", event => {
    event.respondWith(handleRequest(event.request));
});

function getHeaders(headers) {
    let heads = {};
    for (let h of headers.entries()) {
        heads[h[0]] = h[1];
    }
    return heads;
}

function handleRequest(request) {
    let headers = {};
    if (request.cf && request.cf.tlsClientAuth.certPresented) {
        const tlsHeaders = {
            'X-CERT-ISSUER-DN': request.cf.tlsClientAuth.certIssuerDN,
            'X-CERT-SUBJECT-DN': request.cf.tlsClientAuth.certSubjectDN,
            'X-CERT-ISSUER-DN-L': request.cf.tlsClientAuth.certIssuerDNLegacy,
            'X-CERT-SUBJECT-DN-L': request.cf.tlsClientAuth.certSubjectDNLegacy,
            'X-CERT-SERIAL': request.cf.tlsClientAuth.certSerial,
            'X-CERT-FINGER': request.cf.tlsClientAuth.certFingerprintSHA1,
            'X-CERT-VERIFY': request.cf.tlsClientAuth.certVerified,
            'X-CERT-NOTBE': request.cf.tlsClientAuth.certNotBefore,
            'X-CERT-NOTAF': request.cf.tlsClientAuth.certNotAfter
        };
        Object.assign(headers, tlsHeaders);
    }
    Object.assign(headers, getHeaders(request.headers));
    return fetch(request, {
        headers: new Headers(headers)
    });
}
image.png

##3-2 Triggerの追加
image.png
image.png

#4. テスト

CA証明書およびクライアント証明書の情報がHTTPリクエストヘッダに登録されてOriginサーバーに渡ってきていることがわかる。
image.png

参考までに、CA証明書とクライアント証明書作成時のCSR情報を再掲する。

ca-csr.json
{
  "CN": "Access Testing CA",
  "key": {
    "algo": "rsa",
    "size": 4096
  },
  "names": [
    {
      "C": "US",
      "L": "Austin",
      "O": "Access Testing",
      "OU": "TX",
      "ST": "Texas"
    }
  ]
}
client-csr.json
{
  "CN": "James Royal",
  "hosts": [""],
  "key": {
    "algo": "rsa",
    "size": 4096
  },
  "names": [
    {
      "C": "US",
      "L": "Austin",
      "O": "Access",
      "OU": "Access Admins",
      "ST": "Texas"
    }
  ]
}
3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?