OpenAICloudflare Developer Platform2026/03/27 0:00

Workers - New RFC 9440 mTLS certificate fields in Workers

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

openaijamodel: gpt-5-mini-2025-08-07

Workers:RFC 9440 形式の mTLS 証明書フィールドを追加

Key Points

  • RFC9440形式で証明書提供
  • request.cf.tlsClientAuthに4フィールド
  • 容量超過時は省略フラグ

Summary

Cloudflare Workers の request.cf.tlsClientAuth に、mTLS クライアント証明書を RFC 9440 形式で渡すための新しい 4 フィールドが追加されました。これにより Worker からオリジンへ証明書ヘッダをそのまま転送でき、カスタムのパースやエンコードが不要になります。

Key Points

  • 追加フィールド(request.cf.tlsClientAuth):
    • certRFC9440: クライアントのリーフ証明書(RFC 9440、:base64-DER:)。証明書未提示時は空。
    • certRFC9440TooLarge: リーフ証明書が 10KB を超えた場合に true(その際 certRFC9440 は省略)。
    • certChainRFC9440: 中間チェーンをカンマ区切りで RFC 9440 形式で格納。未送信またはチェーンが 16KB 超過時は空。
    • certChainRFC9440TooLarge: 中間チェーンが 16KB を超えた場合に true(その際 certChainRFC9440 は省略)。
  • 実運用での注意点:
    • certVerified / certRevoked 等の既存フラグで検証し、チェーンが大きすぎる場合は拒否するなどの処理を推奨。
    • オリジンへはそのままヘッダ(例: Client-Cert, Client-Cert-Chain)として転送可能。

Example

短いチェックと転送の例(要調整):

export default {
  async fetch(request) {
    const tls = request.cf.tlsClientAuth;
    if (!tls || !tls.certVerified || tls.certRevoked || tls.certChainRFC9440TooLarge) {
      return new Response('Unauthorized', { status: 401 });
    }
    const headers = new Headers(request.headers);
    headers.set('Client-Cert', tls.certRFC9440);
    headers.set('Client-Cert-Chain', tls.certChainRFC9440);
    return fetch(new Request(request, { headers }));
  }
};

Notes

  • 大きすぎる証明書やチェーンは個別の "TooLarge" フラグで検出できるため、オリジンへ転送する前に条件チェックを入れてください。

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

openaijamodel: gpt-5-mini-2025-08-07

Workers — Workers における新しい RFC 9440 mTLS 証明書フィールド

新しい RFC 9440 mTLS 証明書フィールド in Workers

公開日: 2026-03-27 · カテゴリ: Workers

Workers の request.cf.tlsClientAuth に対して、相互 TLS (mTLS) クライアント証明書を含むリクエスト向けに 4 つの新しいフィールドが利用可能になりました。これらのフィールドはクライアント証明書および中間チェーンを RFC 9440 ↗ 形式でエンコードします。これは Client-Cert および Client-Cert-Chain HTTP ヘッダーで使われる標準形式と同じため、Worker はカスタムのパースやエンコード処理を行わずにそのままオリジンへ転送できます。

新しいフィールド

  • certRFC9440 (String)
    • 説明: RFC 9440 形式のクライアント(リーフ)証明書(:base64-DER:)。クライアント証明書が提示されなかった場合は空。
  • certRFC9440TooLarge (Boolean)
    • 説明: リーフ証明書が 10 KB を超え、certRFC9440 から省略された場合に true
  • certChainRFC9440 (String)
    • 説明: RFC 9440 形式の中間証明書チェーン(カンマ区切り)。中間証明書が送られなかった場合、またはチェーンが 16 KB を超えた場合は空。
  • certChainRFC9440TooLarge (Boolean)
    • 説明: 中間チェーンが 16 KB を超え、certChainRFC9440 から省略された場合に true

例: クライアント証明書ヘッダーをオリジンに転送する

次の JavaScript の例は、証明書が検証済みでチェーンが完全である場合にだけヘッダーを転送します。

export default {
  async fetch ( request ) {
    const tls = request . cf . tlsClientAuth ;
    // Only forward if cert was verified and chain is complete
    if ( ! tls || ! tls . certVerified || tls . certRevoked || tls . certChainRFC9440TooLarge ) {
      return new Response ( "Unauthorized" , { status : 401 } ) ;
    }
    const headers = new Headers ( request . headers ) ;
    headers . set ( "Client-Cert" , tls . certRFC9440 ) ;
    headers . set ( "Client-Cert-Chain" , tls . certChainRFC9440 ) ;
    return fetch ( new Request ( request , { headers } )) ;
  },
};

詳細はドキュメント「Client certificate variables」および「Mutual TLS authentication」を参照してください。