03.08.2005 15:16:18Вывод OID на ASP Ответов: 15
Gleb
Здравствуйте, подскажите пожалуста как на ASP со стороны сервера определить OID 2.5.29.17 (Дополнительное имя субъекта) соответсятвенно его затем вывести на экране пользователя вместе со значением
 
Ответы:
04.08.2005 10:57:37Kirill Sobolev
Получаете расширение SUBJECT_ALT_NAME через CAPICOM, потом декодируете с помощью CCertEncodeAltName
04.08.2005 12:13:55Gleb
А пример какойнибудь не подскажете а то у меня никак не получается...:\
04.08.2005 12:46:49Kirill Sobolev
А что именно не получается?
04.08.2005 17:00:38Gleb
При коннекте по https требуется чтобы на сервере брался сертификат клиента, который подключился, и

брать от туда ОИД любой неважно (например Дополнит.имя субъекта) и вывести это значение у него в

Браузере, пробовал по разному но что-то никак не получается...

Dim certif
certif=Request.ClientCertificate("Certificate") -взятие клиенского сертификата

Dim objUtil
Set objUtil=CreateObject("CAPICOM.Utilities.1") -создание объекта для перекодировки сетификата
Dim CertB64
CertB64=objUtil.Base64Encode(certif) -перекодировка
Response.Write CertB64 -вывод

Dim objCert
set objCert=CreateObject("CAPICOM.Certificate.2") -создание объекта сертификата
objCert.Import(certif) -импорт сертификата
Dim objOid
set objOid=CreateObject("CAPICOM.OID.1") -создание объекта ОИДа
set objOid=objCert

const Oid=2.5.29.17

If Oid=objOid.Name Then
Response.Write objOid.Name & objOid.Value
End If
04.08.2005 17:11:53Kirill Sobolev
что-то я ничего не понял )))
вот это
set objOid=objCert
работать не будет.
надо смотреть свойство Extensions и там уже искать расширение с нужным OID. Потом его раскодировать с помощью CCertEncodeAltName
04.08.2005 17:45:28Gleb
Хорошо а как тогда правильно импортировать?
Dim certif
Set certif=Request.ClientCertificate("Certificate") -сертификат клиента, который подключился
Response.Write "<br> Cert: "&certif&"<br>"

Dim objUtil
Set objUtil=CreateObject("CAPICOM.Utilities")
Dim CertB64
CertB64=objUtil.Base64Encode(certif) -его перекодировка
Response.Write CertB64

Dim objCert
set objCert=CreateObject("CAPICOM.Certificate")
objCert.Import(CertB64) попытка импортировать...

Пишет что импорт не срабатывает, как мне его тогда импортировать?
04.08.2005 18:00:25Kirill Sobolev
Request.ClientCertificate("Certificate") - это string containing the binary stream of the entire certificate content in ASN.1 format.
Почему там Set?
Что содержит CertB64?
А вообще импортировать надо именно так.
05.08.2005 10:17:18Gleb
CertB64 получается содержит декодированный сертификат в Base64,
а Set я убрал все равно не работает, пишет что в строке objCert.Import(CertB64) ощибка..
05.08.2005 10:35:22Kirill Sobolev
точно содержит? проверяли?
05.08.2005 10:48:35Gleb
ДА проверял, просто выводил на экран что получается, при декодировании; А сейчас взял экспортировал сертификат ручками, и получается то что делает скрипт не совпадает с тем что должно быть на самом деле =);
Запихал в переменную что получил ручками заработал и импорт и проверка расширений, буду трудиться над ОИДами;

В результате всего возникла проблема как декодировать сертификат в BASE64?
05.08.2005 11:17:25Kirill Sobolev
Здесь есть пример от MS
http://support.microsoft.com/default.aspx?scid=kb;en-us;216829
05.08.2005 13:27:21Gleb
оbjCert=CreateObject("CAPICOM.Certificate")
for i = 1 to objCert.Extensions.Count

Dim Tmp
Tmp = objCert.Extensions(i).EncodedData.Format(True) - декодированные значения расширений


If objCert.Extensions(i).OID.Value="2.5.29.37" Then - Если ОИД 2.5.29.37 то вывести значение
Response.Write objCert.Extensions(i).OID.FriendlyName & " (" & objCert.Extensions(i).OID.Value &

")"
End If

С этим все впорядке - работает, но если я хочу сравнить например с ОИДом 1.2.643.2.2.34.2 -

временный доступ (а не с 2.5.29.37 -улечшенный ключ) то это просто не срабатывает, видимо потому что

эти значения входят в Расширение Улучшенный ключ;

Подскажите как быть?
05.08.2005 13:35:51Kirill Sobolev
Certificate.ExtendedKeyUsage.EKUs - коллекция "Улучшенных ключей"
05.08.2005 14:46:15Gleb
:))))))))
Все вроде пока заработало, правда с перекодировкой еще не возился...

Спасибо 2^64!!! :)))
05.08.2005 15:46:44Gleb
:))))))))
Все вроде пока заработало, правда с перекодировкой еще не возился...

Спасибо 2^64!!! :)))