Сейчас на форуме: asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Вопросы новичков —› сертификаты в браузере. как автоматически выбрать нужный и зайти на сайт?
Посл.ответ Сообщение

Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 30 мая 2012 12:12
· Личное сообщение · #1

при заходе на определенный сайт появляется список сертификатов, выбирая нужный заходишь под тем логином. насколько я знаю в php есть такая возможность как дописать параметры к ссылке браузера типа:
ввв.мыл.ру/login=vasya?password=123
и таким образом можно избежать процедуру авторизации на главной страничке сайта. можно ли подобным образом автоматически выбирать сертификат заходя на определенную ссылку? типа:
https://ввв.сайт.ру/sertificat=test.p12

есть вариант производить поиск по хенделу окна, потом находить все дочерние по пути до окна с выбором сертификатов, а после выбирать посредством SendMessage и LVM_SETITEMSTATE... но я никак не могу заставить выбирать какой-либо сертификат в этом окошке, а во вторых - браузеры бывают разные, соответственно и названия окошек, по которым производить поиск будут разные - хоть одно окно не найдет - все, система уже не пашет. потом сам список сертификатов не соответствует порядку в программе. то есть это придется еще читать название сертификата и сравнивать его название.



Ранг: 85.4 (постоянный), 51thx
Активность: 0.090
Статус: Участник

Создано: 31 мая 2012 17:24
· Личное сообщение · #2

работа с сертификатами происходит еще до контакта с веб-сервером, очевидно сертификат вы выбираете в etoken'e и пишите нехорошую программу для кражи денег? мои домыслы



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 31 мая 2012 18:12
· Личное сообщение · #3

SeregaZ
Дописывание параметров запроса - это стандарт HTTP и к пхп не имеет никакого отношения. Параметры будут обработаны скриптом только в том случае если он работает с _GET запросами, если он явно обрабатывает только _POST запросы он их вообще не увидит.
С сертификатами вообще другая песня и их выбор происходит еще до контакта с контентом сайта, на этапе хендшейка. Работать с сертификатами мимо пользователя - зло.

-----
старый пень




Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 01 июня 2012 09:04 · Поправил: SeregaZ
· Личное сообщение · #4

вас тут послушать жить вобще нельзя - жизнь это зло... пришлось делать метод через ж... путем winapi. пока дошел до момента нахождения окон выбора сертификата в эксплорере и гуглхроме, и уже есть чтение названий сертификатов из этого окна, и есть даже определение какой именно выделен. осталось добавить выделение нужного пункта и нажатия "ок".

насчет кражи денег - это сайт сдачи налоговой отчетности. при заходе на него, вылазит окошко с выбором установленных сертификатов. оно понятно если фирма всего одна, а если фирм 10-20? и названия фирм там не пишет, а пишет РНН - 12 непонятных цифр. увязать в своей голове 10 двенадцатицифровых значений с определенной фирмой трудновато

вот моя програмка сидит в трее, тыркаем - открывается меню, в нем список этих самых фирм, но только в виде названий, а не рнн. за каждым названием будет закреплен рнн и при выборе определенной фирмы открывается браузер хром или эксплорер, заходит на тот сайт и выбирает соответствующий выбранной фирме рнн, и жмет вход.

опционально думаю может быть то цифровое название рнн менять на текстовое - название фирмы прям в том поле... неизвестно правда как там потом будет происходить вход... не повредится ли чего





ну и раз пошла такая пьянка еще вопрос: налоговая изначально выдает ключик в виде файла.bin плюс 3-4 папки с файлами, а для входа на тот сайт его еще необходимо соответствующим образом сконвертировать - форма на сайте это делает используя java. типы сертификатов и сами сертификаты для меня китайская грамота... как узнать как именно происходит конвертация? этот java апплет отсылает ключ на сервер (формат gost) и получает оттуда (формат rsa.p12), или же сам апплет, локально, без пересылки производит конвертирование? я к чему веду - было бы здорово научить мою программу производить это конвертирование. почему думаю что может быть эта операция производится локально - так как есть вторая система для сдачи отчетности - отдельный клиент. так вот он делает аналогичный сертификат, но несколько иной нежели браузерный но тоже p12 - вот он производит конвертацию локально.




третий вопрос: есть сертификат RSA.p12 - чтобы его зарегистрировать достаточно тыркнуть на нем, запустится мастер импорта сертификатов, и далее далее далее и сертификат в итоге зарегистрирован. суть проблемы - при нахождении на компьютере специальной программы тумар (какое-то там дополнительное шифрование и абракадабра с сертификатами - используется обычно в интернет банкиках), подобное стандартное регистрирование RSA.p12 + далее далее далее - не работает. приходится выбирать вручную физическое расположение сертификата: Личные-Реестр (при тумаре там в этом Личные две папки - Реестр и Тумар - вот она и путается куда сувать новый сертификат). это все была преамбула - теперь собственно вопрос: есть ли какие консольные команды для регистрации этого RSA.p12? типа "RSA.p12 /silent /path=Личные\Реестр" чтобы он установился без ручного выбора того пути. бухгалтерши обычно бестолковые... и сами не могут это сделать

Certmgr.exe ( http://msdn.microsoft.com/en-us/library/e78byta0(v=vs.80).aspx ) не предлагать. там требуется нет фреймворк. у них его может не быть. хотя я бы согласился бы на портейбл версию Certmgr.exe

вот подойдет! --> Link <-- но как и чем и где сделан ехе файл...



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 01 июня 2012 14:32
· Личное сообщение · #5

SeregaZ
Может просто при наведении мыши на элемент списка показывать хинт с названием лица, вместо того чтоб самому подменять пользователя? И бухгалтеру понятно будет и тебе мороки меньше.
По поводу импорта сертификатов - посмотри WinAPI - там несложно и самому написать импортер.
Что касается конвертирования, вопрос нужно изучать глубжее. По умолчанию виндовс, скорей всего, ничего не знает ни о ГОСТ, ни о формате хранилища в bin. Результат в р12 - это уже стандартный формат, но как они ГОСТ в РСА переделывают - загадка.

-----
старый пень




Ранг: 85.4 (постоянный), 51thx
Активность: 0.090
Статус: Участник

Создано: 01 июня 2012 15:00
· Личное сообщение · #6

Очевидно что у вас не чистый ssl/tls, а какое-то заново изобретенное колесо в виде надстроек или чего-то такого, раз сертификаты спрашивают после подключения к веб-серверу. Про самостоятельную конвертацию сертификатов без реверса аплета можно забыть. P12 сертификат в моем понимании это склееный публичный и приватный ключи клиента, чтобы из сгенерить нужно знать приватный ключ сервера, а его вам никто не даст (мне так кажется почему-то )

Установка DER сертификата:
CertOpenStore - CertAddCertificateContextToStore - CertCloseStore

Вот тут есть хороший кодес:
http://www.wasm.ru/forum/viewtopic.php?id=39961



Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 02 июня 2012 07:20 · Поправил: SeregaZ
· Личное сообщение · #7

а теперь как для ребёнка

при регистрации через стандартный - Мастер импорта сертификатов - выбирается путь, куда сертификат будет сохранен (Личные\Реестр), читается содержимое RSA.p12, соответствующим образом распаковывается и сохраняется в C:\Documents and Settings\Администратор\Application Data\Microsoft\SystemCertificates\My\Certificates под именем типа 9930806CDBCD9E2C993B3A7D8A8FABCADFD88898

теперь как это повторить? CertOpenStore и CertCloseStore исходя из названия открывает и закрывает хранилище. какое такое хранилище? тот мой файл RSA.p12 или же открывает то место в виндовсе, где все сертификаты хранятся?

--> Link <-- вот тут подробный С++ пример. я, к сожалению, далек от технического английского и все что там написано для меня китайская грамота. нужны русские комментарии и пояснения

скопировал фрагмент с того сайта, все на буржуйском. напишу перевод, и сразу вопросы по параметрам.
Code:
  1. // Open the My system store using CertOpenStore.
  2.  
  3. if(hSystemStore = CertOpenStore(
  4.      CERT_STORE_PROV_SYSTEM, // System store will be a 
  5.                              // virtual store
  6.                              // я так понял тут определяется тип, что-то вроде куда мы сохраняем. 
  7.                              // в файл или в память
  8.                              // и мне походу надо CERT_STORE_PROV_PHYSICAL
  9.                              // в этом случае он даст указать путь со слешем
  10.  
  11.      0,                      // Encoding type not needed 
  12.                              // with this PROV
  13.  
  14.      NULL,                   // Accept the default HCRYPTPROV
  15.  
  16.      CERT_SYSTEM_STORE_CURRENT_USER,
  17.                              // Set the system store location in the
  18.                              // registry
  19.                              // Выбор куда мы сохраняем. но это не путь. где Личные\Реестр указывается?
  20.  
  21.      L"MY"))                 // Could have used other predefined 
  22.                              // system stores
  23.                              // including Trust, CA, or Root
  24.                              // вот тут больше похоже на путь, но мне надо 
  25.                              // в английском варианте Личные\Реестр что-то типа Personal\Registry
  26.                              // нашел список возможных вариантов выходит или MY\.Default или UserDS\.UserCertificate
  27. {
  28.    printf("Opened the MY system store. \n");
  29. }
  30. else
  31. {
  32.    MyHandleError( "Could not open the MY system store.");
  33. }
  34. //-------------------------------------------------------------------


***

по CertAddCertificateContextToStore там только один пример, и судя по коменту он не подходит. "добавляет сертификат из Моего хранилища в новое хранилище в памяти". мне по идее надо что-то типа "читает сертификат из файла и добавляет его в Мое хранилище, или в системное хранилище... куда он должен то..."
Code:
  1. // Add the certificate from the My store to the new memory store.
  2.  
  3. if(CertAddCertificateContextToStore(
  4.       hMemoryStore,                // Store handle
  5.                                             // куда мы сохраняем. тут вроде в память, а надо видимо hSystemStore - в систему
  6.       pDesiredCert,                // Pointer to a certificate
  7.                                             // тут по идее должен быть путь до файла с сертификатом
  8.       CERT_STORE_ADD_USE_EXISTING,
  9.                                             // а вот USE_EXISTING мне видимо не подойдет - использовать существующий
  10.                                             // мне надо что-то типа CERT_STORE_ADD_CREATE_NEW - создать новый
  11.       NULL))
  12. {
  13.    printf("Certificate added to the memory store. \n");
  14. }
  15. else
  16. {
  17.    MyHandleError("Could not add the certificate "
  18.        "to the memory store.");
  19. }
  20. //-------------------------------------------------------------------


***

по закрытию CertCloseStore все понятно.
Code:
  1. if(hSystemStore)
  2.     CertCloseStore(
  3.         hSystemStore, 
  4.         CERT_CLOSE_STORE_CHECK_FLAG);


в свойствах уже установленного ключа написано:
Версия V3
Алгоритм подписи sha1RSA
Открытый ключ RSA (512 Bits)
Алгоритм отпечатка sha1

что необходимо в коде поправить, чтобы все правильно понималось? в смысле всякие непонятные кодировки и прочее...

***

и из того примера один непонятный момент... blob.pbData = (BYTE*)pfx; что это такое, и как подобное получить? у меня не с++...


 eXeL@B —› Вопросы новичков —› сертификаты в браузере. как автоматически выбрать нужный и зайти на сайт?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати