web-dev-qa-db-ja.com

OpenSSL x509目的フラグ「任意の目的」これは何ですか?

以下を使用して証明書の詳細を確認します。

openssl x509 -noout -text -purpose -in mycert.pem

たくさんの目的フラグを見つけました(私が発見したのは、証明書に添付されたさまざまな拡張機能によって設定されています)。

これらの目的フラグの1つは、「任意の目的」です。このフラグと、それが設定されている理由または理由に関するドキュメントが見つからないようです。

私がこの目的に関する詳細情報をどこで見つけられるか、そしてそれが何を意味するか知っている人はいますか?

おかげで、

5
Nick

Any Purpose : YesAny 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として使用しようとすると、拒否されます。

3
SlowTurtle

X.509証明書では、他のほとんどの場合と同様に、用語が明示的に定義されていない場合、すぐ周囲のコンテキストから意味を継承します。その文脈が「人生」である場合、「あらゆる目的」というフレーズは文字通りそれを意味します。

したがって、発行元CAの証明書ポリシー、サブスクライバー契約、および証明書利用者契約を確認し、フラグについて何も言わない場合は、ボックスに記載されていることを意味します。

1
mlp

通常はルートCAに「AnyPurpose」を設定します(これはルートであり、他の中間またはサブCAに証明書を発行できることを意味します)。次に、中間CAを発行するときに制限を設定します...

私のルートCAは次のとおりです。

  • AnyPolice 2.5.29.32.0、
  • CA:True 2.5.4.37、
  • AnyPurpose 2.5.29.15、
  • DigitalSignature 2.5.4.37.3、
  • CRL配布ポイント2.5.29.31、

例の中間TLSCAで、次のように設定します。

  • Web ServerAuth TLS 1.3.6.1.5.5.7.3.1、
  • Web ClientAuth 1.3.6.1.5.5.7.3.2

これは、ルートCAからのすべての属性からの継承からのTLS CAを制限します(ここで作成された制限的なOIDは、TLS証明書への署名のみを許可し、pathlen:0でサブCAを禁止します)。

すべては、PKIインフラストラクチャの設定方法によって異なります。

私のネットワークでは、目的ごとに1つの中間CAを実行します。例:

  • Eメールの中間CA
  • TLS用の中間CA
  • ソフトウェアの中間CA
  • Identityの中間CA
  • コンポーネントの中間CA

このように、メール証明書に問題がある場合は、他のすべての中間CAで問題がないのに、EメールCAを取り消すだけで済みます。

大きな認証局は、たとえばEVへの専用の中間CAを持っています。

注:これは個人のPKIのためのものであり、RFCに従って大規模な認証局が行うようなベストプラクティスを実行したい場合は、さらに多くのOIDを含めてすべてをセットアップするなど、追加の種類がたくさんあります...

たとえば、次のリンクでいくつかの標準を読むことができます。

https://cabforum.org/wp-content/uploads/Baseline_Requirements_V1.pdf

別の例として、EV証明書の場合、OIDをセットアップするための追加の手順がたくさんあります。

  • ドメイン検証済み2.23.140.1.2.1
  • 組織検証済み2.23.140.1.2.2

そして、私のセットアップはそれらを必要としないので、これを機能させるために必要なOIDを検索してテストすることに時間を費やしませんでした

1
Wisdown

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」に対応するビットマップ値はありません...

1
Boris

差出人: http://en.wikipedia.org/wiki/Digital_certificate

キー-使用法:公開キーの目的(暗号化、署名、証明書署名など)。

Opensslドキュメントの-purposeフラグを参照してください: http://www.openssl.org/docs/apps/x509.html#CERTIFICATE_EXTENSIONS

0
tajh

ほとんどの証明書は、クライアント認証、サーバー認証、鍵交換、コード署名などの制限された目的(または一連の目的)で発行されます。承認されていない目的で使用される場合(たとえば、メール証明書を使用してコードに署名するなど)、それらは無効です。

任意の目的の拡張は、証明書が常に使用上の制約を通過する必要があることを意味します。これは、すべての使用法に対して有効であると言うのと同じです。

0
Falcon Momot

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同じものではありません。

0
Adam Williamson