22.04.2005 17:21:11альтернативное имя субьекта Ответов: 33
Gleb
Поддерживает ли Window’ая служба сертификации расширение сертификата "альтернативное имя субьекта"
 
Ответы:
25.04.2005 8:30:32uri
Сертификат с данным расширением будет издан MS CA, если запрос на сертиифкат, поступающий в службу содержит "альтернативное имя субьекта".
25.04.2005 10:48:55Алексей
День добрый,
Все дело в том, что запрос содержит данное поле и виндовый CA выдает сертификат по этому запросу, однако, в самом сертификате данное поле отсутствует. Причем, если обрабатывать этот запрос с помощью УЦ, то сертификат также выдается без данного расширения, при этом в базе ЦР сохраняется запрос, содержащий "альтернотивное имя субекта". Может быть все-таки дела в виндовом СА?
25.04.2005 10:53:54uri
Если у Вас стоит ПАК "КриптоПро УЦ", то на ЦС в модуле политики КриптоПро для службы MS CA, на вкладке "Расширения Х.509" нужно добавить и разрешить расширение 2.5.29.17 "Дополнительное имя субъекта" и тогда сертификат будет содержать данное раширение.
Не забудьте перезапустить службу СА после изменения настроек модуля политики.
25.04.2005 11:09:44Алексей
В том то и дело, что это расширение включено.
25.04.2005 11:19:15uri
значит все дело в запросе. Т.к. SubjectAltName является составным типом данных, то проверьте как В ыего закодировали.
Служба СА, со стандартным модулем политики ДОЛЖНА изготавливать сертификат с таким расширением по "правильному" запросу, а ЦС от ПАК "КриптоПро УЦ" МОЖЕТ, если настроен модуль политики КриптоПро.

Проверьте ваш запрос на стандартной службе СА...
25.04.2005 11:42:36Алексей
Вот дамп запроса:
File: A:\test.der
Time: 11:34:00, 04/25/2005
---------------------------------------------------------------------
0000 30 154: SEQUENCE {
0004 30 FF: SEQUENCE {
0007 02 1: INTEGER 0
000A 30 45: SEQUENCE {
000C 31 2C: SET {
000E 30 2A: SEQUENCE {
0010 06 9: OBJECT IDENTIFIER emailAddress (1 2 840 113549 1 9 1)
: (PKCS #9. Deprecated, use an altName extension instead)
001B 16 1D: IA5String ’vasija_durak@wewewebebebe.com’
: }
: }
003A 31 15: SET {
003C 30 13: SEQUENCE {
003E 06 3: OBJECT IDENTIFIER commonName (2 5 4 3)
: (X.520 id-at (2 5 4))
0043 1E C: BMPString ’’
: }
: }
: }
0051 30 5C: SEQUENCE {
0053 30 D: SEQUENCE {
0055 06 9: OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)
: (PKCS #1)
0060 05 0: NULL
: }
0062 03 4B: BIT STRING 0 unused bits, encapsulates {
0065 30 48: SEQUENCE {
0067 02 41: INTEGER
: 00 B9 38 05 E4 45 74 6E ..8..Etn
: D3 32 8F 67 29 78 71 38 .2.g)xq8
: 0F 30 EB 1E FA 08 7B 19 .0....{.
: 05 3F 4C AE F6 A1 6D AC .?L...m.
: 74 E0 BA F9 B1 29 5D C0 t....)].
: 1B 3E 3A 62 EE 0E 6B 60 .>:b..k`
: 84 6B 97 BA 71 AB 36 FE .k..q.6.
: 33 53 25 65 B3 32 B9 CD 3S%e.2..
: B5 .
00AA 02 3: INTEGER 65537
: }
: }
: }
00AF A0 55: [0] {
00B1 30 25: SEQUENCE {
00B3 06 A: OBJECT IDENTIFIER
: certReqExtensions (1 3 6 1 4 1 311 2 1 14)
: (Microsoft)
00BF 31 17: SET {
00C1 30 15: SEQUENCE {
00C3 30 13: SEQUENCE {
00C5 06 3: OBJECT IDENTIFIER extKeyUsage (2 5 29 37)
: (X.509 id-ce (2 5 29))
00CA 04 C: OCTET STRING, encapsulates {
00CC 30 A: SEQUENCE {
00CE 06 8: OBJECT IDENTIFIER
: emailProtection (1 3 6 1 5 5 7 3 4)
: (PKIX key purpose)
: }
: }
: }
: }
: }
: }
00D8 30 2C: SEQUENCE {
00DA 06 3: OBJECT IDENTIFIER subjectAltName (2 5 29 17)
: (X.509 id-ce (2 5 29))
00DF 31 25: SET {
00E1 30 23: SEQUENCE {
00E3 81 6: [1] ’Beavis’
00EB 82 4: [2] ’Comp’
00F1 86 13: [6] ’http://www.porno.ru’
: }
: }
: }
: }
: }
0106 30 D: SEQUENCE {
0108 06 9: OBJECT IDENTIFIER
: sha1withRSAEncryption (1 2 840 113549 1 1 5)
: (PKCS #1)
0113 05 0: NULL
: }
0115 03 41: BIT STRING 0 unused bits
: 3D AA 92 67 54 66 0F 6E =..gTf.n
: EB B5 CE 4A 28 F0 72 02 ...J(.r.
: 7A 59 CC FB 01 C6 A9 32 zY.....2
: 7F 5C 17 B0 90 13 0C 6C .\.....l
: 41 BA 4B AE AF D8 79 E8 A.K...y.
: F9 44 66 9B CE 1C 5E 47 .Df...^G
: 5B DA 8B AE B6 23 C9 DE [....#..
: 32 4E 5E 95 C3 34 1B 82
: }
25.04.2005 13:04:03uri
И что?
25.04.2005 13:14:24Алексей
:)
Данный запрос мы подсовываем как чисто виндовому, так и УЦ КриптоПро вроде с полем "альтернативное имя субьекта" все в порядке, однако в сертификате это поле не отображается.
25.04.2005 13:30:25uri
Повторяю, что Ваш запрос не корректный.

Написать программу формирования запроса за Вас не представляется возможным.

Попробуйте в качестве атрибута запроса 1.2.840.113549.1.9.14 (Расширения сертификатов)
а в раширении "Дополнительное имя субъекта" типа вот так:
2.5.29.17: Флаги = 0, Длина = __
Дополнительное имя субъекта
Другое имя:
1.2.643.1.12345.1=13 21

19.11.2007 17:37:38cybermerlin
вопрос сюда же (чтоб по плотнее была инфа)
на веб странице создается запрос на издание сертификата
пытаюсь добавить таким образом почтовый адрес

qwe = IControl.stringToBinary(2, "1@mail.ru")
sPKCS10 = IControl.addExtensionToRequest(1,"2.5.29.17", qwe)
sPKCS10 = IControl.CreatePKCS10(sDistinguishedName, sCertUsage)

но тут возникает беда
поля после выпуска сертификата не вижу (равно как и certutil ничего не показывает)
в чем моя ошибка?
20.11.2007 11:29:10cybermerlin
народ
местные гуру
чем dump делаете запросов - это раз
есть какой-н нормальный форум по PKI на котором ребята не щитают позорным ответить новичку в этой области???
я устал спрашивать тут про альтернативное имя
такое ощущение либо все треплются про то что они добавили в и выпустили сертификат с альтернативным именем
ибо ни одного сертификата из тысяч я не видел с этим полем
использовал обе функции

addextensions
addextentiontorequest

всем спасибо (разработчик фирмы ХХХ-PKI)
20.11.2007 14:11:27Kirill Sobolev
Дамп делается certutil либо dumpasn1 (можно скачать с нашего сайта).
Ошибка в том, что расширение SubjectAltName кодируется не простым байтовым копированием, а намного более сложнее. Для примера посмотрите объект CCertEncodeAltName в MSDN.
20.11.2007 16:51:33Юрий
Набросал тут функцию дабы проверить что это за зверь "alternativeName". Выкладываю тут так как может это кому и пригодится. Кодируется "issuerAltName". Кому нужно кодировать "subjectAltName" - поставьте идентификатор алгоритма "2.5.29.17".
//----------------------------------------------
void test_altName()
{
DWORD size = 0;
CERT_ALT_NAME_ENTRY alt_entry[1];
ZeroMemory(alt_entry, sizeof(CERT_ALT_NAME_ENTRY));

alt_entry[0].dwAltNameChoice = CERT_ALT_NAME_RFC822_NAME;
if(EncodeUTF8("2@2.ru", &alt_entry[0].pwszRfc822Name, &size))
return;

CERT_ALT_NAME_INFO alt_info;
ZeroMemory(&alt_info, sizeof(CERT_ALT_NAME_INFO));

alt_info.cAltEntry = 1;
alt_info.rgAltEntry = alt_entry;

BYTE* enc_alt_info;
if(Encode(X509_ASN_ENCODING, X509_ALTERNATE_NAME, &alt_info, &enc_alt_info, &size))
return;

//--- certificate extension
CERT_EXTENSION cert_ext[1];
ZeroMemory(cert_ext, sizeof(CERT_EXTENSION));

cert_ext[0].fCritical = FALSE;
cert_ext[0].pszObjId = "2.5.29.18";
cert_ext[0].Value.cbData = size;
cert_ext[0].Value.pbData = enc_alt_info;

CERT_EXTENSIONS cert_exts;
ZeroMemory(&cert_exts, sizeof(CERT_EXTENSIONS));

cert_exts.cExtension = 1;
cert_exts.rgExtension = cert_ext;

BYTE* enc_cert_exts;
if(Encode(X509_ASN_ENCODING, X509_EXTENSIONS, &cert_exts, &enc_cert_exts, &size))
return;

store_to_file("enc_alt_name.txt", enc_cert_exts, size);
}
//----------------------------------------------

По функциям, используемым в коде:
1) Encode(...) - корректный вызов CryptEncodeObject;
2) EncodeUTF8 - кодирование в UTF8 посредством MultiByteToWideChar
20.11.2007 17:17:21Юрий
И вот как это выглядит внутри сертификата (в данном случае сертификат самоподписаный):
415 64: [3] {
417 62: SEQUENCE {
419 15: SEQUENCE {
421 3: OBJECT IDENTIFIER basicConstraints (2 5 29 19)
426 1: BOOLEAN TRUE
429 5: OCTET STRING, encapsulates {
431 3: SEQUENCE {
433 1: BOOLEAN TRUE
: }
: }
: }
436 43: SEQUENCE {
438 3: OBJECT IDENTIFIER issuerAltName (2 5 29 18)
443 36: OCTET STRING, encapsulates {
445 34: SEQUENCE {
447 6: [1] '2@2.ru'
455 24: [2] 'http://www.microsoft.com'
: }
: }
: }
: }
: }
: }
20.11.2007 17:47:16cybermerlin
>> Кому нужно кодировать "subjectAltName" - поставьте идентификатор алгоритма "2.5.29.17"

а чего не идентификатор алгоритма "2.5.29.7" ??
в msdn написано что 17 - subject_alt_name2
что это за две вариации альтернативных имен кто-н знает??
20.11.2007 19:32:58Юрий
OID от лукавого :)

2.5.29.17 - это в соответствие с RFC 3280. Может в MS опечатались просто. Или, как всегда, пытались придумывать "новый стандарт".
20.11.2007 19:36:24Юрий
Ан нет - это просто устаревший OID:
http://www.oid-info.com/cgi-bin/display?oid=2+5+29+7&submit=Display&action=display
20.11.2007 22:41:47cybermerlin
прикольно про OID репозитарий - спасибо дополнительное ))
23.11.2007 14:07:32cybermerlin
а EncodeUTF8
в на где валяется??


я в Delphi пытаюсь накорябать (ибо на скриптах походу дальше никуда не двинуть)
28.11.2007 17:26:12cybermerlin
>Kirill Sobolev
вы писали:
Ошибка в том, что расширение SubjectAltName кодируется не простым байтовым копированием, а намного более сложнее. Для примера посмотрите объект CCertEncodeAltName в MSDN.
-----------------------------------
The addExtensionToRequest method adds an extension to the request. This method was first defined in the ICEnroll4 interface.

Sub addExtensionToRequest( _
ByVal Flags As Long, _
ByVal strName As String, _
ByVal strValue As String _
)
Parameters
Flags
[in] Specifies whether the extension is critical. If True, the extension being added is critical. If False, it is not critical.
Note that TRUE is defined (in a Microsoft header file) for C/C++ programmers as one, while Visual Basic defines the True keyword as negative one.

As a result, Visual Basic developers must use one (instead of True) to set this parameter to TRUE. However, to set this parameter to FALSE, Visual Basic developers can use zero or False.

strName
[in] Object Identifier (OID) that represents the extension name.
strValue
[in] Base64-encoded or binary extension value.
------------------------------------------
но разве IControl.stringToBinary(2, "1@mail.ru")
не должно по идее работать??

29.11.2007 3:06:38av3j6nlyoj
y1zhf10c8r <a href = http://www.198234.com/910611.html > rjcrortbfbdl7j </a> [URL=http://www.947314.com/699214.html] dixffzk8j9 [/URL] 16mibji8
29.11.2007 3:06:43av3j6nlyoj
y1zhf10c8r [URL=http://www.947314.com/699214.html] dixffzk8j9 [/URL] 16mibji8
29.11.2007 3:06:48av3j6nlyoj
y1zhf10c8r http://www.1080683.com/160259.html 16mibji8
29.11.2007 3:06:53av3j6nlyoj
y1zhf10c8r qt7eowso4 16mibji8
29.11.2007 10:50:02cybermerlin
мдааа
замечательный ответ
типааа "иди ннаа" :'((((
29.11.2007 10:54:48LexSTV
это во всех отверах всех тем появилось, вирусяка видимо :-)
29.11.2007 11:38:17Kirill Sobolev
нет, stringToBinary лишь позволяет переводить данные из одной кодировки в другую (base64 c заголовком, без, бинарные, hex). А Вам нужно положить туда ASN.1 структуру.
30.11.2007 16:09:50cybermerlin
ага с этим ясно
а вот Юрий пишет

>По функциям, используемым в коде:
>1) Encode(...) - корректный вызов CryptEncodeObject;

а можно посмотреть синтаксис функции??
и ее код бы посмотреть
в msdn молчек на эту тему
30.11.2007 18:07:24Kirill Sobolev
не может быть
http://msdn2.microsoft.com/en-us/library/aa379921.aspx
30.11.2007 18:18:00cybermerlin
читать умею ))
----CryptEncodeObject()---- <> Encode()
30.11.2007 18:20:03cybermerlin
полагаю он переназначение сделал
но какой смысл - если все в том же виде параметры передаваемые остались

в чем секрет-то?
30.11.2007 20:35:49Юрий
Насчет CryptEncodeObject: нужно просто один раз написать код, использующий эту функцию, и сразу станет понятно, аачем я сделал такое "переназначение" :)
03.12.2007 11:41:44Kirill Sobolev
или воспользоваться функцией CryptEncodeObjectEx