証明書の各拡張は、クリティカルまたは非クリティカルとして指定されます。証明書を使用するシステムは、認識できない重要な拡張、または処理できない情報を含む重要な拡張を検出した場合、証明書を拒否する必要があります。クリティカルでない拡張は、認識されない場合は無視される場合がありますが、認識される場合は処理する必要があります。
しかし、拡張子に関する情報(できれば短いリスト)を見つけることができません。 basicConstraints
が重要であることに気付きました。これは、基本的なものであり、証明書がCA:FALSE
は明らかに子証明書に署名できないはずです(ただし、制限付きCAのpathlen
は時々無視されるようだと私はどこかで読んだと思います)-しかし、これは証明書の最も基本的な部分の1つでもあります。おそらく、それがしばしば重要でないと指定されている理由でもあります。 keyUsage
はクリティカルの良い候補のように聞こえますが、extendedKeyUsage
とsubjectAltName
はどうですか?
どの拡張機能をa)クリティカルにするかb)非クリティカルにするc)関係ないかを示す短い概要はありますか?
「純粋なX.509」では、拡張が重要であるかどうかにかかわらず、準拠する実装は、認識した拡張を尊重することになっているため、拡張が重要であるかどうかは問題ではありません。 「クリティカル」フラグはnot標準の拡張機能用です。セキュリティに重要な場合は拡張機能をクリティカルにします(拡張機能を理解しない実装は証明書を拒否する必要があります)、または非クリティカルです。それ以外の場合(拡張機能を理解しない実装は、安全に無視できます)。
このルールには、CRL Distribution Points
拡張子を付けたわずかな例外があります。 CRLのダウンロード元を文書化すること、およびスコープセグメンテーションを実装することの2つの目的があります。この後者の役割は、拡張が重要な場合にのみアクティブになります。拡張機能が重要な場合、CRLにIssuing Distribution Point
拡張機能が含まれ、「配布ポイント」が証明書のCRL Distribution Point
拡張で指定されたものの1つ。拡張機能が重要でない場合、拡張機能はドキュメントの役割でのみ機能します。
実際には、セキュリティ全体に大きな穴を開けずに拡張を無視できるかどうか、および拡張機能をクリティカルにすることで、既存の実装がサポートの欠如のために証明書を拒否するようになるかどうか。たとえば、重要なName Constraints
拡張を使用すると、OpenSSLの古いバージョン(1.0より前のバージョン、すべてEOLであり、サポートされていない)から無条件に拒否される危険があります。しかし、それを非クリティカルにすると、同じOpenSSL 無視されます になります。 Name Constraints
拡張機能は、安全に無視できない拡張機能の典型的なケースであるため、常に重要としてマークする必要があります(ただし、 相互運用性の問題 使用すると問題が発生する可能性があります)。
RFC 528 は、証明書拡張ごとに、適合CAが拡張をクリティカルにする必要があるかどうかをリストします。これらは要件ですCAであり、バリデーターではありません。証明書を検証するシステムは、RFC 5280に次のように記載されていても(セクション4.2.1.2)、重要なSubject Key Identifier
拡張が含まれているという理由で証明書を拒否してはなりません。
適合CAは、この拡張を非クリティカルとしてマークする必要があります。
すべての拡張機能の詳細については、RFCを参照してください。これらは、CAの動作に関するガイドラインです。たとえば、Key Usage
は「重要である必要があります」、Basic Constraints
は「重要である可能性があります」、Name Constraints
は「重要である必要があります」などです...これらのルールに従うと、セキュリティは問題ありません(ただし、相互運用性のためにいくつかの変更が必要になる場合があります)。