Статус: Участник
Группы: Участники
Зарегистрирован: 25.05.2012(UTC) Сообщений: 27   Откуда: Нижний Новгород Сказал «Спасибо»: 4 раз
|
Необходимо найти сертификат по издателю и серийному номеру (СertFindCertificateInStore, CERT_FIND_CERT_ID). В хранилище пользователя установлены сертификаты, среди которых встречается сертификат из вложения. С ним возникают проблемы - с кодировкой после вызова функции CertNameToStr() и следующем OID-ом. Приведу код на PHP, но особой разницы нет, так как функции являются полными аналогами CryptoApi. Код:
$certContext = null;
$serialNumber = '011BAA';
$systemStore = GostCsp\certOpenSystemStore(null, 'MY');
while(($certContext = GostCsp\certEnumCertificatesInStore($systemStore, $certContext))) {
if (strrev(hex2bin($serialNumber)) == $certContext->getCertInfo()->getSerialNumber()) {
$certStr = GostCsp\certNameToStr(
GostCsp\X509_ASN_ENCODING,
$certContext->getCertInfo()->getIssuer(),
GostCsp\CERT_X500_NAME_STR
);
// ВОПРОС №2
$certStr = str_replace('#1309536572766572204341', 'Server CA', $certStr);
$certName = GostCsp\certStrToName(
GostCsp\X509_ASN_ENCODING,
// ВОПРОС №1
iconv('utf-8', 'windows-1251', $certStr),
GostCsp\CERT_X500_NAME_STR
);
$certId = new GostCsp\CertId(
GostCsp\CERT_ID_ISSUER_SERIAL_NUMBER,
new GostCsp\CertIssuerSerialNumber(
$certName,
strrev(hex2bin($serialNumber))
)
);
$actualCertContext = GostCsp\certFindCertificateInStore(
$systemStore,
GostCsp\PKCS_7_ASN_ENCODING | GostCsp\X509_ASN_ENCODING,
0, GostCsp\CERT_FIND_CERT_ID, $certId, null
);
if (!is_null($actualCertContext)) {
echo base64_encode($certContext->getContent()) . "\n";
break;
}
}
}
1. Вопрос связан с кодировкой, так например если я не использую iconv(), то получаю $certName в неверной кодировке. Веротяно функция certStrToName() внутри себя делает перевод из windows-1251 в utf-8, и если я передаю туда сразу utf-8 - то неправильно кодирует (сравнивал с оригинальным blob из $certContext->getCertInfo()->getIssuer()). В чем может быть проблема, как её можно исправить и убрать дополнительный вызов iconv()? Цитата:0.^Ac1^X0^V^F^E*.^Cd^A^R^M10276007879941^Z0^X^F^H*.^C^C.^C^A^A^R^L0076050160301402^F^CU^D<----->^L+Московский проспект д.121#0!^F<----->*.H..^M^A<----->^A^V^Troot@nalog.tensor.ru1^K0<>^F^CU^D^F^S^BRU110/^F ^L$ООО Компания Тензор100.^F^CU^D^K^L'Удостоверяющий центр1^R0^P^F^CU^D^C^S<--->TENSORCA3
Цитата:0.^B^O1^X0^V^F^E*.^Cd^A^R^M10276007879941^Z0^X^F^H*.^C^C.^C^A^A^R^L0076050160301\0Z^F^CU^D<---->^LSРњРѕСЃРєРѕРІСЃРєРёР№ проспект Рґ.121#0!^F<-->*.H..^M^A<----->^A^V^Troot@nalog.tensor.ru1^K0<>^F^CU ^LFРћРћРћ Компания Тензор1[0Y^F^CU^D^K^LRУдостоверяющий центр1^R0^P^F^CU^D^C^S>TENSORCA3
2. Вторая проблема связана с тем, что в issuer присутствует 1.2.840.113549.1.9.2="#1309536572766572204341", и вопрос заключается в том, что могу я как-нибудь зарегестрировать данный OID наравне с Email, CN, чтобы он сам кодировался и декодировался этой функцией. Т.к. поиск сертификата не происходит, потому что cert name blob-ы отличаются друг от друга (Server CA и #1309536572766572204341). Как мне и могу ли я зарегестрировать свои OID, чтобы они автоматически кодировались и декодировались функциями CertStrToName(), CertNameToStr()? Цитата:CN=УЦ Федерального казначейства, O=Федеральное казначейство, C=RU, L=Москва, STREET="улица Ильинка, дом 7", OGRN=1047797019830, INN=007710568760, S=77 г. Москва, E=uc_fk@roskazna.ru, 1.2.840.113549.1.9.2=" 0.^A]1^X0^V^F<->*.H..^M^A<----->^B^S<-->Server CA1 0^^^F<------>*.H..^M^A<----->^A^V^Quc_fk@roskazna.ru1^\0^Z^F^CU^D^H^L^S77 г. Москва1^Z0^X^F^H*.^C^C.^C^A^A^R^L0077105687601^X0^V^F^E*.^Cd^A^R^M10477970198 ^L/Федеральное казначейство1?0=^F^CU^D^C^L6УЦ Федерального казначейства
Цитата:0.^Ak1&0$^F<--->*.H..^M^A<----->^B^L^W#13095365727665722043411 0^^^F<-->*.H..^M^A<----->^A^V^Quc_fk@roskazna.ru1^\0^Z^F^CU^D^H^L^S77 г. Москва1^Z0^X^F^H*.^C^C.^C^A^A^R^L0077105687601^X0^V^F^E*.^Cd^A^R^M104 ^L/Федеральное казначейство1?0=^F^CU^D^C^L6УЦ Федерального казначейства
Отредактировано пользователем 27 октября 2014 г. 16:24:36(UTC)
| Причина: Не указана Вложение(я):  charset.cer.txt (3kb) загружен 3 раз(а). oid.cer.txt (3kb) загружен 5 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|