Здравствуйте.
какие символы являются допустимыми для поля названия организации?
Существуют ли требования и регламент для набора символов, которые могут использоваться в данном поле?
Допустимые символы поля O=
Названия организаций берутся из ГБД ЮЛ. При обработке данных полученных из ГБД ЮЛ символы переноса строки, при наличии, удаляются. Других корректировок нет.
Добавлю немного технических подробностей, может быть будет полезно.
Итак, речь идет о структуре сертификата, а значит о RFC 5280, в частности нас интересует поле Subject. В документе сказано что Subject - это Name, описание приведено в разделе про поле Issuer:
Name ::= CHOICE { -- only one possibility for now --
rdnSequence RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=
SET SIZE (1..MAX) OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue }
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY -- DEFINED BY AttributeType
DirectoryString ::= CHOICE {
teletexString TeletexString (SIZE (1..MAX)),
printableString PrintableString (SIZE (1..MAX)),
universalString UniversalString (SIZE (1..MAX)),
utf8String UTF8String (SIZE (1..MAX)),
bmpString BMPString (SIZE (1..MAX)) }
Упомянутый выше O= - это один из RelativeDistinguishedName, элемент RDNSequence. Соответственно значение может быть закодировано одним из 5 способов.
Посмотрим как это реализовано в сертификатах НУЦ (на примере тестового сертификата из SDK):
$ openssl asn1parse -i -inform PEM -in AUTH_RSA256_b1b357b6761e1c8381bddb2d6262ee754ead7770.cer
0:d=0 hl=4 l=1598 cons: SEQUENCE
4:d=1 hl=4 l=1062 cons: SEQUENCE
8:d=2 hl=2 l= 3 cons: cont [ 0 ]
10:d=3 hl=2 l= 1 prim: INTEGER :02
13:d=2 hl=2 l= 20 prim: INTEGER :5DB4D0ED77B78B42B123E552EDB206B5BCDBACBF
35:d=2 hl=2 l= 13 cons: SEQUENCE
37:d=3 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption
48:d=3 hl=2 l= 0 prim: NULL
50:d=2 hl=2 l= 45 cons: SEQUENCE
52:d=3 hl=2 l= 11 cons: SET
54:d=4 hl=2 l= 9 cons: SEQUENCE
56:d=5 hl=2 l= 3 prim: OBJECT :countryName
61:d=5 hl=2 l= 2 prim: PRINTABLESTRING :KZ
65:d=3 hl=2 l= 30 cons: SET
67:d=4 hl=2 l= 28 cons: SEQUENCE
69:d=5 hl=2 l= 3 prim: OBJECT :commonName
74:d=5 hl=2 l= 21 prim: UTF8STRING :ҰКО 3.0 (RSA TEST)
97:d=2 hl=2 l= 30 cons: SEQUENCE
99:d=3 hl=2 l= 13 prim: UTCTIME :220118044535Z
114:d=3 hl=2 l= 13 prim: UTCTIME :230118044535Z
129:d=2 hl=3 l= 173 cons: SEQUENCE
132:d=3 hl=2 l= 30 cons: SET
134:d=4 hl=2 l= 28 cons: SEQUENCE
136:d=5 hl=2 l= 3 prim: OBJECT :commonName
141:d=5 hl=2 l= 21 prim: UTF8STRING :ТЕСТОВ ТЕСТ
164:d=3 hl=2 l= 21 cons: SET
166:d=4 hl=2 l= 19 cons: SEQUENCE
168:d=5 hl=2 l= 3 prim: OBJECT :surname
173:d=5 hl=2 l= 12 prim: UTF8STRING :ТЕСТОВ
187:d=3 hl=2 l= 24 cons: SET
189:d=4 hl=2 l= 22 cons: SEQUENCE
191:d=5 hl=2 l= 3 prim: OBJECT :serialNumber
196:d=5 hl=2 l= 15 prim: PRINTABLESTRING :IIN123456789011
213:d=3 hl=2 l= 11 cons: SET
215:d=4 hl=2 l= 9 cons: SEQUENCE
217:d=5 hl=2 l= 3 prim: OBJECT :countryName
222:d=5 hl=2 l= 2 prim: PRINTABLESTRING :KZ
226:d=3 hl=2 l= 24 cons: SET
228:d=4 hl=2 l= 22 cons: SEQUENCE
230:d=5 hl=2 l= 3 prim: OBJECT :organizationName
235:d=5 hl=2 l= 15 prim: UTF8STRING :АО "ТЕСТ"
252:d=3 hl=2 l= 24 cons: SET
254:d=4 hl=2 l= 22 cons: SEQUENCE
256:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName
261:d=5 hl=2 l= 15 prim: UTF8STRING :BIN123456789021
278:d=3 hl=2 l= 25 cons: SET
280:d=4 hl=2 l= 23 cons: SEQUENCE
282:d=5 hl=2 l= 3 prim: OBJECT :givenName
287:d=5 hl=2 l= 16 prim: UTF8STRING :ТЕСТОВИЧ
...
Для organizationName используется UTF8STRING :АО "ТЕСТ", то есть технически в сертификате может быть записана любая UTF-8 строка. Естественно важно иметь в виду сказанное выше - то, что данные из ГБД ЮЛ перед записью в сертификат проходят дополнительную обработку.
Но это еще не конец истории, так как вопрос стоит о значении поля O=, то есть, вероятно, не совсем о том, как значение записано в сертификате, а о том, каким оно может быть тогда, когда из поля Subject сертификата формируют строковое представление. Обратимся к RFC 2253, а именно к разделу Converting an AttributeValue from ASN.1 to a String. Как видите, тут определены правила экранирования символов. Далее в том же документе описан алгоритм восстановления оригинального значения из строкового представления.
Приятно видеть такой анализ глубокий.
Я придерживаюсь мнения. что мусор, который может быть записан в ГБД ЮЛ, не является поводом тащить этот мусор в систему сертификатов.
А вопрос случился из-за того, что строка в УТФ-8 не смогла попасть правильно в базу данных, где по умолчанию используется кодировка УТФ-8.
пример
ТОВАРИЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ «КОМПАНИЯ «РОГА КОПЫТА ОПТОМ»
т.е. символы “«” и “»” не должны были находится в Subject
Мы не можем в одностороннем порядке менять названия зарегистрированные в ГБД ЮЛ. Символы “«” и “»” поддерживаются в UTF-8. Если вы считаете, что их название мусор, то обратитесь к владельцам организации либо к ГБД ЮЛ.