| ||||
| ||||
Здравствуйте, подскажите пожалуста как на ASP со стороны сервера определить OID 2.5.29.17 (Дополнительное имя субъекта) соответсятвенно его затем вывести на экране пользователя вместе со значением | ||||
Ответы: | ||||
| ||||
Получаете расширение SUBJECT_ALT_NAME через CAPICOM, потом декодируете с помощью CCertEncodeAltName | ||||
| ||||
А пример какойнибудь не подскажете а то у меня никак не получается...:\ | ||||
| ||||
А что именно не получается? | ||||
| ||||
При коннекте по 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 | ||||
| ||||
что-то я ничего не понял ))) вот это set objOid=objCert работать не будет. надо смотреть свойство Extensions и там уже искать расширение с нужным OID. Потом его раскодировать с помощью CCertEncodeAltName | ||||
| ||||
Хорошо а как тогда правильно импортировать? 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) попытка импортировать... Пишет что импорт не срабатывает, как мне его тогда импортировать? | ||||
| ||||
Request.ClientCertificate("Certificate") - это string containing the binary stream of the entire certificate content in ASN.1 format. Почему там Set? Что содержит CertB64? А вообще импортировать надо именно так. | ||||
| ||||
CertB64 получается содержит декодированный сертификат в Base64, а Set я убрал все равно не работает, пишет что в строке objCert.Import(CertB64) ощибка.. | ||||
| ||||
точно содержит? проверяли? | ||||
| ||||
ДА проверял, просто выводил на экран что получается, при декодировании; А сейчас взял экспортировал сертификат ручками, и получается то что делает скрипт не совпадает с тем что должно быть на самом деле =); Запихал в переменную что получил ручками заработал и импорт и проверка расширений, буду трудиться над ОИДами; В результате всего возникла проблема как декодировать сертификат в BASE64? | ||||
| ||||
Здесь есть пример от MS http://support.microsoft.com/default.aspx?scid=kb;en-us;216829 | ||||
| ||||
о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 -улечшенный ключ) то это просто не срабатывает, видимо потому что эти значения входят в Расширение Улучшенный ключ; Подскажите как быть? | ||||
| ||||
Certificate.ExtendedKeyUsage.EKUs - коллекция "Улучшенных ключей" | ||||
| ||||
:)))))))) Все вроде пока заработало, правда с перекодировкой еще не возился... Спасибо 2^64!!! :))) | ||||
| ||||
:)))))))) Все вроде пока заработало, правда с перекодировкой еще не возился... Спасибо 2^64!!! :))) | ||||