web-dev-qa-db-ja.com

openssl:非DNSサブジェクトの別名を使用して証明書要求を生成します

Opensslを使用して、ホストのサブジェクト代替名(SAN)を含む証明書要求を作成するには、次のような構成ファイルを使用します(抜粋):

[req]
req_extensions = v3_req
[ v3_req ]
subjectAltName = @alt_names
[alt_names]
DNS = xyz.example.com

識別名またはユーザープリンシパル名を指定する必要がある場合、alt_namesユーザー証明書要求のセクション?
たとえば、私は試しました

[alt_names]
UPN = [email protected]

しかし、私はこのエラーを受け取りました:

Error Loading request extension section v3_req
5356:error:22075075:X509 V3 routines:v2i_GENERAL_NAME_ex:unsupported option:.\crypto\x509v3\v3_alt.c:557:name=userPrincipalName
5356:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:.\crypto\x509v3\v3_conf.c:93:name=subjectAltName, value=@alt_names
7
Paolo Tedesco

CAが許可するほとんどすべてのものを指定できます。

関連するRFCは RFC528 です。セクション4.2.1.6に記載されています。 「件名の別名」

サブジェクトの別名拡張により、IDを証明書のサブジェクトにバインドできます。これらのIDは、証明書のサブジェクトフィールドのIDに加えて、またはその代わりに含めることができます。定義されたオプションには、インターネット電子メールアドレス、DNS名、IPアドレス、およびUniform Resource Identifier(URI)が含まれます。完全にローカルな定義を含む他のオプションが存在します。複数の名前形式、および各名前形式の複数のインスタンスが含まれる場合があります。このようなIDを証明書にバインドする場合は常に、サブジェクトの別名(または発行者の別名)拡張を使用する必要があります。ただし、セクション4.1.2.4で説明されているように、domainComponent属性を使用して、サブジェクトフィールドにDNS名を表すこともできます(MAY)。このような名前がサブジェクトフィールドで表されている場合、実装をDNS名に変換する必要はありません。

そのセクションの残りの部分を読み、CAが何をサポートしているかをCAに確認する必要があります。 CAmustは、サブジェクトの別名がすべて正しいことを確認する必要があることに注意してください。

メールアドレスを使用するために、RFCはセクション4.1.2.6で述べています

電子メールアドレスで新しい証明書を生成する適合実装は、サブジェクトの別名拡張(セクション4.2.1.6)でrfc822Nameを使用して、そのようなIDを記述する必要があります。レガシー実装をサポートするために、サブジェクト識別名にemailAddress属性を同時に含めることは非推奨ですが許可されています。

したがって、UPIの代わりに、rfc822Nameを使用する必要があります。

8
Jenny D

いくつかのオプションを試した後(Jennyに感謝)、ソースコードを確認したところ、構成ファイルが次のいずれかの値を想定していることがわかりました。

  • eメール
  • URI
  • DNS
  • RID
  • IP
  • dirName
  • ほかの名前

だから私の場合、私は書いた

[alt_names]
email = [email protected]

そしてopensslはリクエストファイルを生成しました。

11
Paolo Tedesco