「Client-Cert HTTP Header」という提案仕様が、IETF HTTP WGのWGアイテムとして採用されそうなので、予習しておきます。
背景
TLSレイヤでクライアントの証明書を用いてクライアントを認証することができます。この、クライアント認証はもちろんTLSレイヤで行われます。
一方で、Webサービスを提供するとき、ロードバランサでTLSを終端することはよくあります。このとき、クライアント証明書に基づくアクセス制御を、ロードバランサではなくバックエンドのサーバで行いたい場合があります。そのためには、ロードバランサからバックエンドにクライアント証明書の情報を伝達する必要があります。その方法を標準化するのが「Client-Cert HTTP Header」という提案仕様です。
一つのユースケースとしては「RFC 8705 OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens」のような例が挙げられるでしょう。
Client-Certヘッダ
Client-Certヘッダは、TLSの終端を行う中間装置がHTTPリクエストを中継する際に追加されます。
値としては、DERエンコード証明書をBase64でエンコードしたものになります。
例
Client-Cert: MIIBqDCCAU6gAwIBAgIBBzAKBggqhkjOPQQDAjA6MRswGQYDVQQKDBJM ZXQncyBBdXRoZW50aWNhdGUxGzAZBgNVBAMMEkxBIEludGVybWVkaWF0ZSBDQTAeFw0y MDAxMTQyMjU1MzNaFw0yMTAxMjMyMjU1MzNaMA0xCzAJBgNVBAMMAkJDMFkwEwYHKoZI zj0CAQYIKoZIzj0DAQcDQgAE8YnXXfaUgmnMtOXU/IncWalRhebrXmckC8vdgJ1p5Be5 F/3YC8OthxM4+k1M6aEAEFcGzkJiNy6J84y7uzo9M6NyMHAwCQYDVR0TBAIwADAfBgNV HSMEGDAWgBRm3WjLa38lbEYCuiCPct0ZaSED2DAOBgNVHQ8BAf8EBAMCBsAwEwYDVR0l BAwwCgYIKwYBBQUHAwIwHQYDVR0RAQH/BBMwEYEPYmRjQGV4YW1wbGUuY29tMAoGCCqG SM49BAMCA0gAMEUCIBHda/r1vaL6G3VliL4/Di6YK0Q6bMjeSkC3dFCOOB8TAiEAx/kH SB4urmiZ0NX5r5XarmPk0wmuydBVoU4hBVZ1yhk=
TLSの終端装置が受け取った時点ですでにこのClient-Certがあった場合は一旦消してから、ヘッダを追加します。