HTTPS 証明書の Common Name の検証がしれっと禁止されていた件について

2022年09月05日 月曜日


【この記事を書いた人】
IIJ Engineers Blog編集部

開発・運用の現場から、IIJのエンジニアが技術的な情報や取り組みについて執筆する公式ブログを運営しています。

「HTTPS 証明書の Common Name の検証がしれっと禁止されていた件について」のイメージ

こんにちは。IIJ Engineers Blog編集部です。

IIJの社内掲示板では、エンジニアのちょっとした技術ネタが好評となって多くのコメントが付いたり、お役立ち情報が掲載されています。
今回は、すでにお気づきの方もいるかもしれませんが、いつの間にか HTTPS 証明書の Common Name の検証が禁止 になっていた件について紹介します。


HTTPS 証明書の検証手続きは、RFC2818 で「Subject Alternative Name があればそれで、なければ Common Name を見よ」となっていました。

If a subjectAltName extension of type dNSName is present, that MUST
be used as the identity. Otherwise, the (most specific) Common Name
field in the Subject field of the certificate MUST be used
. Although
the use of the Common Name is existing practice, it is deprecated and
Certification Authorities are encouraged to use the dNSName instead.

https://datatracker.ietf.org/doc/html/rfc2818

その後 TLS における証明書の取扱い一般を規定した RFC6125 が出て、Common Name の利用は推奨されないもののまだ使って良いことになっていました。

As noted, a client MUST NOT seek a match for a reference identifier
of CN-ID if the presented identifiers include a DNS-ID, SRV-ID,
URI-ID, or any application-specific identifier types supported by the
client.

Therefore, if and only if the presented identifiers do not include a
DNS-ID, SRV-ID, URI-ID, or any application-specific identifier types
supported by the client, then the client MAY as a last resort check
for a string whose form matches that of a fully qualified DNS domain
name in a Common Name field of the subject field (i.e., a CN-ID)
. If
the client chooses to compare a reference identifier of type CN-ID
against that string, it MUST follow the comparison rules for the DNS
domain name portion of an identifier of type DNS-ID, SRV-ID, or
URI-ID, as described under Section 6.4.1, Section 6.4.2, and
Section 6.4.3.

https://datatracker.ietf.org/doc/html/rfc6125

さて。この6月に RFC9110 が publish されました。タイトルは “HTTP Semantics”。HTTP/1.x, HTTP/2, HTTP/3 の共通部分をまとめた RFC だと聞いていたので publish されるまであまり真面目に見てませんでしたが、ふと見てみたらヘッダに Obsoletes: 2818, 7230, … とあります。2818? Semantics なのに 2818? 気になったので “certificate” で検索してみたら、HTTPS 証明書の検証手順が規定されているではありませんか。

4.3.4. https Certificate Verification

(snip)

A reference identity of type CN-ID MUST NOT be used by clients. As
noted in Section 6.2.1 of [RFC6125], a reference identity of type CN-
ID might be used by older clients.

というわけで、HTTPS クライアントが Common Name を見る動作は RFC9110 で禁止され、完全に廃止されていました。えええ、いつの間に。これで Common Name を見ているクライアントの動作は RFC 違反ということになります。ブラウザはまぁ結構前からそういう動きをしているのでいいとして、それ以外の HTTP(S) クライアントやライブラリはどうなんでしょうね。Common Name を見ているひとはまだまだ多そうな気がしますが。

なお、RFC6125 は draft-ietf-uta-rfc6125bis-07 という名前で改訂作業が進行中です。こちらでは(も) Common Name による検証は廃止されています。これが RFC 化されることをもって Common Name の検証が正式に廃止されるものだと思っていたので、RFC9110 に書いてあったのは想定外で驚きました。

IIJ Engineers Blog編集部

2022年09月05日 月曜日

開発・運用の現場から、IIJのエンジニアが技術的な情報や取り組みについて執筆する公式ブログを運営しています。

Related
関連記事