web-dev-qa-db-ja.com

x509拡張機能:「extnValue」は空にできますか?

X509証明書を解析するスクリプトを書いています。 x509 v3証明書には、OID、criticalフラグ、およびextnValueと呼ばれるoctetStringを含むASN.1シーケンスである拡張があります。

basicConstraints拡張子の場合、extnValueは詳細を含む別のASN.1シーケンスであると想定されます。

代わりに空のシーケンスを持つ証明書に遭遇しました。文字通りバイト0x30 0x00これは、予想されるデータのセット(認証局のブール値とパス長の整数)の代わりに、長さがゼロのASN.1シーケンスに解析されます。

この品質の野生の証明書を見つけたという事実は、それがis有効であることを意味しますが、スクリプトがエラーをスローする代わりに正しく処理できるように、これに関する具体的なプロトコルルールを見つけたいと思っていました。

4
pinhead

extnValueは空ではなく、30 00は空のシーケンスです。

https://tools.ietf.org/html/rfc5280#section-4.2.1.9 は、Basic Constraints拡張値のエンコーディングが

BasicConstraints ::= SEQUENCE {
    cA                      BOOLEAN DEFAULT FALSE,
    pathLenConstraint       INTEGER (0..MAX) OPTIONAL }

したがって、空のシーケンスは論理的に{ cA: FALSE, pathLenConstraint: Not Present }

証明書はASN.1 DERエンコーディングを使用するため、DEFAULTの値は指定しないでください。また、pathLenConstraintcAに設定する場合はFALSEを指定しないでください。したがって、30 00は、「この証明書は認証局を表していない」ための唯一の有効な形式です。

4
bartonjs