web-dev-qa-db-ja.com

X.509証明書の「共通名」属性で許可される文字列は何ですか?

OID "2.5.4.3"のASN.1表記で定義されている、X509証明書のDNの共通名フィールドでは、許可される値は何ですか?

制限は最大64文字ですが、すべての文字を使用できますか?数字?
例えば。 .sは許可されますか? IPアドレス(x.x.x.x)は、ASN定義ごとに有効なシーケンスですか?
ドメイン名は許可されていますか?

35
Cratylus

識別名の共通名属性は次のようにエンコードされます。

X520CommonName ::= CHOICE {
      teletexString     TeletexString   (SIZE (1..ub-common-name)),
      printableString   PrintableString (SIZE (1..ub-common-name)),
      universalString   UniversalString (SIZE (1..ub-common-name)),
      utf8String        UTF8String      (SIZE (1..ub-common-name)),
      bmpString         BMPString       (SIZE (1..ub-common-name)) }

どこ ub-common-nameは64です。最後の3つのエンコーディングでは、すべての Unicode コードポイントを使用できます(0xFFFFを超えるコードポイントにbmpString); UTF-8が推奨されるエンコードです(少なくとも標準ではそうなっています)。

X.509に関する限り( RFC 5280 を参照)、DN要素の内容は、同等の比較を超えて無関係です。つまり、一貫して行う限り、任意の文字シーケンスを配置できます。 RFC 5280では、UTF-8でエンコードされた名前要素の大文字と小文字を区別しない比較が義務付けられており、これはUnicodeの一般的なコンテキストでは簡単ではありません。RFC 4518 および 3454 。また、「一般名」は頻繁にユーザーに表示されます(少なくともディスプレイと物理ユーザーを持つX.509証明書を使用するシステムでは)。したがって、おそらく意味のある、または少なくとも怖くない文字列を使用する必要があります。人間の場合は、非ラテンスクリプトを避けようとすることがあります。

「共通名」属性にDNS名を入れることは、HTTPSサーバー証明書の一般的な方法です。 RFC 2818 を参照してください(サーバー証明書にはサーバー名が含まれ、クライアントはURL内のサーバー名と一致します;通常、Subject Alt Name拡張がそのために好まれますが、共通名はクライアントによっていくらか広くサポートされています)。

53
Thomas Pornin

上記の回答は、通常そこにあるものをカバーしていますが、これはX.509なので、実際にはほとんど何でも入れることができることを忘れないでください。たとえば、以下の証明書は「お気に入りの飲み物」である0.9.2342.19200300.100.1.5を使用しています( http://www.alvestrand.no/objectid/0.9.2342.19200300.100.1.5.html を参照) 。 Opensslはこれを理解するため、一般名はCN=example.com/[email protected]/favouriteDrink=tequilaとして表示されます。証明書の共通名に含めることができる他の多くのフィールドがあります。

Openssl x509 -textを使用して、説明したとおりに証明書が表示されることを確認できます。

-----BEGIN CERTIFICATE-----
MIIDOzCCAiOgAwIBAgIBCzANBgkqhkiG9w0BAQUFADCBqzEmMCQGA1UEAxMdV2Vz
dHBvaW50IENlcnRpZmljYXRlIFRlc3QgQ0ExEzARBgNVBAgTCkxhbmNhc2hpcmUx
CzAJBgNVBAYTAlVLMR0wGwYJKoZIhvcNAQkBFg5jYUBleGFtcGxlLmNvbTFAMD4G
A1UEChM3V2VzdHBvaW50IENlcnRpZmljYXRlIFRlc3QgUm9vdCBDZXJ0aWZpY2F0
aW9uIEF1dGhvcml0eTAeFw0xMTA3MzEyMTAxMTdaFw0yMTA3MjgyMTAxMTdaMFAx
FDASBgNVBAMTC2V4YW1wbGUuY29tMR8wHQYJKoZIhvcNAQkBFhB0ZXN0QGV4YW1w
bGUuY29tMRcwFQYKCZImiZPyLGQBBRMHdGVxdWlsYTCBnzANBgkqhkiG9w0BAQEF
AAOBjQAwgYkCgYEAuCqI3aNbSkRpA9VuGOmeVQ010Oaawsz4tcW2FQChJDOv6PuT
ucy5IijvaVewotDjnuVzPpBVW5EmC8Qapradomhb6FtFPyH/hGSnhLtht3Ln6stJ
ZkAjvr/wjWDy+3Gy/P5r5weUNWVm2AaQgk2xumx49EIXyzwOEHAhqTE7iEECAwEA
AaNIMEYwCQYDVR0TBAIwADA5BggrBgEFBQcBAQQtMCswKQYIKwYBBQUHMAGGHWh0
dHA6Ly9vY3NwLmV4YW1wbGUuY29tOjg4ODgvMA0GCSqGSIb3DQEBBQUAA4IBAQBL
oz035PphO4yUx7FJVaZjxLgTM4wLrcn2ONGm015/ECO+1Uxj3hWb6/EIDDKV/4e8
x0HDF69zyawYLD1th5tBcZLkV/Dat/Tzkt3boLOCGo2I1P+yjqxlb7BZCk7PEs3+
zjWF2hMcXtAwOIrsRuvXp4eTGwigKLAt/H02US/fa2dXFbOnz91V7oH8ZvynIl/n
hpELPzVWX/pBnHEGA9Bi0jviCKuvQisfaJ8XCiA73qH6CkSoZ2fClnrs+pJNj8i6
vtcMx8htn7FsyB3puVww86JSQ+VDKlQkFbPVla/4Aavzwz8djjVYEWwSgm+tw3jB
zUP/k5Aln5cXNo50KOip
-----END CERTIFICATE-----
6
Richard Moore

主な問題が、サブジェクトDNの共通名にIPアドレスを入れることができる(または入れるべきである)かどうかを知ることである場合、答えはノーです。

これは、X.509形式ではなく、読み取った内容の解釈方法に関する仕様に関連しています。

HTTPSに関しては、 RFC 2818 はIPアドレスについて次のことを示しています。

場合によっては、URIはホスト名ではなくIPアドレスとして指定されます。この場合、iPAddresssubjectAltNameが証明書に存在し、URIのIPと完全に一致する必要があります。

これは、CNがIPアドレスにまったく使用されるべきではなく、SANエントリタイプはDNSではなくIPアドレスごとでなければならないことを意味します。(一部のブラウザは、これを完全に実装しません、したがって、より寛容かもしれません。Javaデフォルトのホスト名検証は厳密になります。)

証明書ID検証のベストプラクティスも RFC 6125 で定義されていますが、 IPアドレスが範囲外 (IPアドレスの使用に対する引数についてはこのセクションを読む価値があります) 。 他のプロトコルに関するRFCの抜粋 を通過すると、IPアドレスに関する同様の制約があるものがあります(LDAPなど)。

6
Bruno

X.509証明書の「共通名」属性で許可される文字列は何ですか?

私はそこに何が入っているのか本当に答えることはできませんが、何がnotに入るのかを伝えることができます:サーバー名、たとえばホスト名(www.example.com)、内部名(wwwなど)、 IPアドレス(127.0.0.1や100.100.100.100など)。

DNS名またはサーバー名を共通名(CN)に配置することは、IETFとCA/Browserフォーラムの両方で非推奨になりました。廃止されましたが、現在は禁止されていません。 CA/Bは、ブラウザーが従うものであるため重要です-ブラウザーはIETFに従うnotを行います。

IETFはRFC 6125のセクション2.3の慣行を廃止し、CA/Bはベースライン要件のセクション9.1.1の慣行を廃止しました。

すべてのサーバー名は、サブジェクトの別名(SAN)に含まれます。サーバー名をSANに配置することは、CA/Bベースライン要件、セクション9.2.1で必要です。IETFは、RFC 5280の発行中により寛容ですが、セクション6.4.4の検証中にそれを必要とします。 RFC 6125の。

5
jww