以下を使用して証明書の詳細を確認します。
openssl x509 -noout -text -purpose -in mycert.pem
たくさんの目的フラグを見つけました(私が発見したのは、証明書に添付されたさまざまな拡張機能によって設定されています)。
これらの目的フラグの1つは、「任意の目的」です。このフラグと、それが設定されている理由または理由に関するドキュメントが見つからないようです。
私がこの目的に関する詳細情報をどこで見つけられるか、そしてそれが何を意味するか知っている人はいますか?
おかげで、
Any Purpose : Yes
のAny Purpose CA : Yes
行とopenssl x509 -purpose
行は特別です。これはopenssl固有であり、拡張機能をチェックしない古いソフトウェアバージョンで使用した場合に証明書が検証される対象を表します。
これらの特定の目的のフラグをオフまたは無効にすることはできません。 opensslソースからの目的チェックは、openssl/crypto/x509v3 /v3_purp.cで静的X509_PURPOSExstandard [] = {…}として定義されています。 X509_PURPOSE_ANYチェック検証関数は1を返します。
このフラグに関する公式ドキュメントに最も近いのは、おそらくv3_purp.cを作成したStephen N. Henson博士によるこれらの投稿です- http://marc.info/?l=openssl-users&m=9621942681148 および- http://openssl.6102.n7.nabble.com/quot-critical-CA-FALSE-quot-but-quot-Any-Purpose-CA-Yes-quot-td29933.html 。
スティーブを引用するには:
'「任意の目的」設定は、何でも通過させ、チェックをまったく実行しないものです。もともとは、他に選択肢がなく、結果に耐えられる場合に壊れた証明書を使用する方法としてそこに置かれていました...それ以来、「任意の目的」が設定されている場合でも、コードでCAチェックが必須になっています。したがって、実際にその証明書をCAとして使用しようとすると、拒否されます。
X.509証明書では、他のほとんどの場合と同様に、用語が明示的に定義されていない場合、すぐ周囲のコンテキストから意味を継承します。その文脈が「人生」である場合、「あらゆる目的」というフレーズは文字通りそれを意味します。
したがって、発行元CAの証明書ポリシー、サブスクライバー契約、および証明書利用者契約を確認し、フラグについて何も言わない場合は、ボックスに記載されていることを意味します。
通常はルートCAに「AnyPurpose」を設定します(これはルートであり、他の中間またはサブCAに証明書を発行できることを意味します)。次に、中間CAを発行するときに制限を設定します...
私のルートCAは次のとおりです。
例の中間TLSCAで、次のように設定します。
これは、ルートCAからのすべての属性からの継承からのTLS CAを制限します(ここで作成された制限的なOIDは、TLS証明書への署名のみを許可し、pathlen:0でサブCAを禁止します)。
すべては、PKIインフラストラクチャの設定方法によって異なります。
私のネットワークでは、目的ごとに1つの中間CAを実行します。例:
このように、メール証明書に問題がある場合は、他のすべての中間CAで問題がないのに、EメールCAを取り消すだけで済みます。
大きな認証局は、たとえばEVへの専用の中間CAを持っています。
注:これは個人のPKIのためのものであり、RFCに従って大規模な認証局が行うようなベストプラクティスを実行したい場合は、さらに多くのOIDを含めてすべてをセットアップするなど、追加の種類がたくさんあります...
たとえば、次のリンクでいくつかの標準を読むことができます。
https://cabforum.org/wp-content/uploads/Baseline_Requirements_V1.pdf
別の例として、EV証明書の場合、OIDをセットアップするための追加の手順がたくさんあります。
そして、私のセットアップはそれらを必要としないので、これを機能させるために必要なOIDを検索してテストすることに時間を費やしませんでした
KeyUsageはv3拡張であり、証明書に存在する場合と存在しない場合があります。
Id-ce-keyUsage値の有用な(少し古い場合)要約: http://www.alvestrand.no/objectid/2.5.29.15.html [新しく追加された値は7 = encipherOnlyおよび8 = decipherOnly]
トリックは、この "OID = 2.5.29.15 keyUsage拡張機能"が特定の証明書に/ある場合とない場合があります。
OpenSSLがおそらくPURPOSE_ANYで推定しているのは、この拡張機能が/存在しない/であり、したがって、何に使用するか、または使用しないかを決定するのは「独自のポリシー次第」であるということです。それ以外の場合、「ANY」に対応するビットマップ値はありません...
差出人: http://en.wikipedia.org/wiki/Digital_certificate
キー-使用法:公開キーの目的(暗号化、署名、証明書署名など)。
Opensslドキュメントの-purposeフラグを参照してください: http://www.openssl.org/docs/apps/x509.html#CERTIFICATE_EXTENSIONS
ほとんどの証明書は、クライアント認証、サーバー認証、鍵交換、コード署名などの制限された目的(または一連の目的)で発行されます。承認されていない目的で使用される場合(たとえば、メール証明書を使用してコードに署名するなど)、それらは無効です。
任意の目的の拡張は、証明書が常に使用上の制約を通過する必要があることを意味します。これは、すべての使用法に対して有効であると言うのと同じです。
OpenSSLの「目的」は、v3証明書のKey-Usage拡張機能を直接反映したものではありません。
OpenSSLは一連の「目的」自体を定義し、特定の証明書が、証明書の拡張(キーの使用法や拡張されたキーの使用法の拡張を含むがこれらに限定されない)に基づいて、選択された目的と一致するかどうかを判断するロジックを備えています.
「任意の目的」は、_-purpose any
_を_openssl verify
_に渡す場合、またはOpenSSLコンテキストの目的を「任意」の値に設定するコードを記述した場合に得られるものです。 SSL_CTX_set_purpose()
。
ほとんどの目的は_man x509
_セクション_CERTIFICATE EXTENSIONS
_に記載されています-証明書が特定の目的に対して有効である必要があるプロパティについて説明しています-しかし、これはany
の目的を文書化していません。ソースでは、_crypto/x509v3/v3_purp.c
_の上部にある_X509_PURPOSE_ANY
_に対して実行されるチェック関数はno_check()
であり、単に1を返します。これにより、目的のチェックが事実上無効になります。
証明書がany
の目的に有効であるない状況を設計できるかどうかはわかりません。また、目的をany
に設定することと、目的をまったく設定しないことの違いがわからないため、目的のチェックが完全にバイパスされます。
具体的には、OpenSSLの_X509_PURPOSE_ANY
_/"Any Purpose"/_-purpose any
_の概念は、RFC 5280 anyExtendedKeyUsage KeyPurposeIdとnot同じものではありません。