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" フラグで検出できるため、オリジンへ転送する前に条件チェックを入れてください。