2011-02-27 57 views
29

通用名稱 X509證書的DN字段,如OID爲「2.5.4.3」的ASN.1表示法中所定義的,允許的值是什麼?X.509證書中「公用名稱」屬性允許使用哪些字符串?

我知道限制是多達64個字符,但都是允許的字符?數字?
例如是否允許.?每個ASN定義的IP地址(x.x.x.x)是否有效?
是否允許使用域名?

+2

該標準允許通用名稱中的任何字符串。字符串的含義取決於其解釋。 – 2011-02-28 03:14:04

+1

@GregS:所以如果是這樣的話,爲什麼這是一個評論,而不是一個答案? – Cratylus 2011-02-28 08:17:13

+0

@GregS:你在回答哪個標準?因爲我對在ASN表示法中聲明的類型感興趣 – Cratylus 2011-02-28 08:19:45

回答

46

的專有名稱的通用名稱屬性編碼爲:

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後三個編碼允許使用所有Unicode代碼點(使用UTF-16超越0xFFFF的代碼點與bmpString); UTF-8是首選編碼(至少標準是這樣說的)。

就X.509而言(見RFC 5280),DN元素的內容與等號比較無關;這意味着只要你一直這麼做,你可以放置任何你想要的字符序列。 RFC 5280要求對UTF-8編碼的名稱元素進行不區分大小寫的比較,這在Unicode的一般上下文中並不容易:請參閱7.1節,該鏈接指向RFC 45183454。此外,「常用名」通常會顯示給用戶(至少在使用X.509證書的系統上有顯示器和實際用戶),所以您可能希望使用一個有意義或至少不太可怕的字符串對於一個人來說,你可以嘗試避免非拉丁腳本。

將HTTPS服務器證書的常用做法是在「公用名稱」屬性中添加DNS名稱:請參閱RFC 2818(服務器證書包含服務器名稱,客戶端與URL中的服務器名稱匹配;通常,主題替代名稱擴展名首選,但通用名稱得到了客戶端的廣泛支持)。

+0

非常全面和很好的參考答案。 – 2011-05-25 17:05:56

+0

這回答了我長久以來一直在問的問題,而且根本沒有找到答案。對RFC的引用特別有用。 – 2012-04-24 22:22:06

+0

任何人都可以使用通用名稱以外的DNS名稱提供指向網站的鏈接嗎? (因此網站名稱必須在SAN中) – 2017-10-06 14:40:10

6

如果您的主要問題是要知道您是否可以(或應該)在主題DN的通用名稱中輸入IP地址,則答案爲否。

這與X.509格式無關,而是與說明如何解釋他們閱讀的規格有關。

當涉及到HTTPS,RFC 2818說以下有關IP地址:

在某些情況下,URI被指定爲IP地址,而不是一個 主機名。在這種情況下,iPAddresssubjectAltName必須在證書中出現 ,並且必須與URI中的IP完全匹配。

這意味着CN不應該用於IP地址,並且SAN條目類型必須是IP地址,而不是DNS。 (有些瀏覽器,將無法完全實現這一點,所以他們可能會更寬容。Java的默認主機名驗證將以嚴格的。)證書身份認證

最佳做法現在也在RFC 6125定義,但它認爲IP addresses out of scope (有必要閱讀本部分中有關使用IP地址的論點)。 如果您通過excerpts of RFCs regarding other protocols,有些IP地址有類似的限制(例如LDAP)。

+0

DNS對SAN擴展有效。 – TravisThomas 2017-03-29 20:10:30

+0

@TravisThomas確實(在'dNSName'擴展名中)。只是爲了澄清,我正在專門處理有關IP地址問題的部分內容(因爲其他答案已經存在)。 – Bruno 2017-03-30 08:34:41

5

雖然上面的答案涵蓋了您通常會在那裏找到的內容,但不要忘記,因爲這是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----- 
+0

由於證書錯誤,無法加載到該站點的鏈接。 – 2017-10-06 14:51:24

3

什麼字符串中的「通用名」的X.509證書屬性被允許?

我真的不能回答在那裏發生的事情,但我可以告訴你什麼呢進去:服務器名稱,如主機名(www.example.com),內部名稱(如www)和IP地址(如127.0.0.1或100.100.100.100)。

在通用名稱(CN)中放置DNS名稱或服務器名稱已由IETF和CA /瀏覽器論壇棄用。儘管已棄用,但目前並未禁止。 CA/B很重要,因爲這是瀏覽器遵循的 - 瀏覽器按照IETF做的而不是

IETF棄用了RFC 6125第2.3節的做法,而CA/B棄用了基準要求第9.1.1節中的做法。

所有的服務器名稱都在主題備用名稱(SAN)中。將服務器名稱放入SAN是CA/B基準要求第9.2.1節要求的。 IETF在發佈RFC 5280時更爲寬容,但在RFC 6125第6.4.4節的驗證過程中要求它。

+0

真棒回答!你能分享一個鏈接到任何沒有在CN的DNS名稱的網站嗎? – 2017-10-06 14:49:25

+1

@JeffPuckett - 嘗試Crypto ++網站(http://www.cryptopp.com)。 CN被完全省略。不過,我認爲這是一種僥倖。我詢問了*「Crypto ++」*的通用名稱,但我認爲處理髮布的軟件會過濾名稱,因爲某些腳本可能會將plus'es解釋爲正則表達式。 Derp ... – jww 2017-10-06 15:07:14

+0

謝謝你,太棒了!如果您碰巧遇到有價值或DNS名稱以外的任何內容,請再次ping我。 – 2017-10-06 15:10:08