Основной работой при создании утилиты cryptoarmpkcs было не разработка кода или графического интерфейса, а работа с ASN1-структурами. Именно в этих структурах хранятся сертификаты x509v3, электронные подписи документов (PKCS#7, CMS), запросы на сертификаты (PKCS#10, CSR), открытые и закрытые ключи, защищенные контейнеры PKCS#12/PFX, списки отозванных сертификатов CRL и штампы времени для электронной подписи, запросы и ответы OCSP и так далее и тому подобное. Постоянно приходилось просматривать уже имеющиеся структуры для понимания того как это делали другие, просматривать только что собранные самим AN1-структуры. Процесс понятен. Но поскольку я работаю на Linux (сейчас это Mageia, и код для Windows тоже готовлю на Linux), то под рукой из доступных средств разбора ASN1-структур были утилиты openssl и derdump из пакета NSS. Лично мои предпочтения были на стороне derdump. Именно она и стала прототипом рассматриваемой здесь утилиты derdump.tcl/tclderdump для просмотра ASN1-структур. И если вы сравните вывод утилиты derdump из пакета NSS и утилиты derdump.tcl, то вы практически не увидите различий:
Отличия касаются наименований oid-ов. Утилита имеет следующий синтаксис:
где
Формат hex был для меня просто жизненно необходим. Ведь для того, чтобы разобрать какой-нибудь кусок из распарсенного файла, приходилось переводить его в бинарный вид (der-кодировка) и сново пропускать через утилиту. Формат hex очень облегчил жизнь.
Конечно, пользоваться чистым кодом tcl (а впрочем как и любым другим скриптовым кодом, например, python) не совсем комфортно. Поэтому утилиты оформлена в дистрибутивы tclderdump для платформ Linux, Windows и OS X. Эти дистрибутивы самодостаточны: скачиваешь и запускаешь.
Однако вернемся к возможности просматривать ASN1-структуры, хранящиеся в шестнадцатеричном вид. Помимо выше упоминавшихся утилит для просмотра ASN1-структур есть еще хорошая утилита pyderasn, написанная на Python, которая в выводе использует символы точка и двоеточие, и было решено, что они тоже могут присутствовать в шестнадцатеричном коде. Ниже приводится результат распарсивания одного и того же сертификата x509 v.3 утилитами derdump.tcl и pederasn:
Но хотелось большего, а именно графического интерфейса и возможности распарсивать внутренние блоки налету. Было решено добавить этот функционал в утилиту cryptoarmpkcs, тем более, что ей есть куда развиваться, например, шифровать документы на сертификате адресата. И здесь опять не обойтись без просмотрщика ASN1-структур.
Для этих целей было решено переориентировать функциональную кнопку «Информация о токене». Мы именно переориентировали кнопку и закрепили за ней новый функционал «Просмотр ASN1-структуры», а информацию о подключенном токене по-прежнему можно получить, наведя курсор на имя токена справа от метки «Выберите токен/смарткарту»:
Здесь все просто. Выбираем файл с ASN1-структурой, указываем в каком он формате, решаем нужны ли нам дополнительные подробности и нажимаем кнопку «Просмотр ASN1-файла»:
Сравнивая правый и левый скриншоты, можно воочию видеть какую дополнительную информацию можно получить при нажатой кнопке «Дополнительная информация». Для сохранения структуры в разобранном виде достаточно нажать кнопку «Сохранить».
Если зажать левую клавишу мыши, то можно выделить интересующий нас блок. И, если теперь на выделенном блоке, нажать правую клавишу мыши, то появится меню со следующими пунктами:
И если выбрать пункт «Просмотреть выделенный блок», то появится окно с распарсенным блоком:
Если же нажать кнопку «копировать в буфер обмена», то выделенный блок будет скопирован в буфер обмена. Буфер обмена можно будет просмотреть, нажав кнопку «ASN1-буфера обмена». Пользователь может сам положить данные в буфер обмена своими средствами, а потом здесь их просмотреть.
И поскольку утилита часто обновляется, то добавлена возможность получения новых версий утилиты непосредственно из нею. Для этого достаточно навести курсор мыши на поле «PKCS#11, x509v3, PKCS#10, PKCS#7, CMS, PKCS#12, ASN1», нажать правую кнопку мыши и выбрать в появившемся меню пункт «О программе». В появившемся окне достаточно выбрать платформу и нажать левую клавишу мыши:
При успешном получении дистрибутива вы получите соответствующее сообщение о том, где сохранен полученный архив:
P.S. Для тех кто в первый раз хочет получить утилиты, это по-прежнему можно сделать здесь:
Отличия касаются наименований oid-ов. Утилита имеет следующий синтаксис:
$dertcl.tcl <входной файл> <выходной файл | stdout> <1 | 0> <der | pem | hex>
где
- <входной файл> — указывает путь к файлу с ASN1-структурой;
- <выходной файл> — указывает на файл, где будет сохранен результат разбора: если в качестве выходого файла указано stdout, то результат будет отправлен в стандартный вывод;
- третий параметр указывает на то, что надо выводить полную (1) информацию;
- четвертый параметр задает формат входного файла, где der – это бинарный файл, pem указывает на то, что файл содержит данные в кодировке base64 с заголовком «-----BEGIN … — » и концевиком «-----END … — » как это принято в openssl, и, наконец, hex говорит, что файл содержит шестнадцатеричный код. При этом он может содержать и спецсимволы (\r, \n, \t), пробелы и символы «.» и «:». Откуда появились символы точка и двоеточие станет понятно ниже.
Формат hex был для меня просто жизненно необходим. Ведь для того, чтобы разобрать какой-нибудь кусок из распарсенного файла, приходилось переводить его в бинарный вид (der-кодировка) и сново пропускать через утилиту. Формат hex очень облегчил жизнь.
Конечно, пользоваться чистым кодом tcl (а впрочем как и любым другим скриптовым кодом, например, python) не совсем комфортно. Поэтому утилиты оформлена в дистрибутивы tclderdump для платформ Linux, Windows и OS X. Эти дистрибутивы самодостаточны: скачиваешь и запускаешь.
Однако вернемся к возможности просматривать ASN1-структуры, хранящиеся в шестнадцатеричном вид. Помимо выше упоминавшихся утилит для просмотра ASN1-структур есть еще хорошая утилита pyderasn, написанная на Python, которая в выводе использует символы точка и двоеточие, и было решено, что они тоже могут присутствовать в шестнадцатеричном коде. Ниже приводится результат распарсивания одного и того же сертификата x509 v.3 утилитами derdump.tcl и pederasn:
Но хотелось большего, а именно графического интерфейса и возможности распарсивать внутренние блоки налету. Было решено добавить этот функционал в утилиту cryptoarmpkcs, тем более, что ей есть куда развиваться, например, шифровать документы на сертификате адресата. И здесь опять не обойтись без просмотрщика ASN1-структур.
Для этих целей было решено переориентировать функциональную кнопку «Информация о токене». Мы именно переориентировали кнопку и закрепили за ней новый функционал «Просмотр ASN1-структуры», а информацию о подключенном токене по-прежнему можно получить, наведя курсор на имя токена справа от метки «Выберите токен/смарткарту»:
Здесь все просто. Выбираем файл с ASN1-структурой, указываем в каком он формате, решаем нужны ли нам дополнительные подробности и нажимаем кнопку «Просмотр ASN1-файла»:
Сравнивая правый и левый скриншоты, можно воочию видеть какую дополнительную информацию можно получить при нажатой кнопке «Дополнительная информация». Для сохранения структуры в разобранном виде достаточно нажать кнопку «Сохранить».
Если зажать левую клавишу мыши, то можно выделить интересующий нас блок. И, если теперь на выделенном блоке, нажать правую клавишу мыши, то появится меню со следующими пунктами:
- копировать в буфер обмена;
- просмотреть выделенный блок.
И если выбрать пункт «Просмотреть выделенный блок», то появится окно с распарсенным блоком:
Если же нажать кнопку «копировать в буфер обмена», то выделенный блок будет скопирован в буфер обмена. Буфер обмена можно будет просмотреть, нажав кнопку «ASN1-буфера обмена». Пользователь может сам положить данные в буфер обмена своими средствами, а потом здесь их просмотреть.
И поскольку утилита часто обновляется, то добавлена возможность получения новых версий утилиты непосредственно из нею. Для этого достаточно навести курсор мыши на поле «PKCS#11, x509v3, PKCS#10, PKCS#7, CMS, PKCS#12, ASN1», нажать правую кнопку мыши и выбрать в появившемся меню пункт «О программе». В появившемся окне достаточно выбрать платформу и нажать левую клавишу мыши:
При успешном получении дистрибутива вы получите соответствующее сообщение о том, где сохранен полученный архив:
P.S. Для тех кто в первый раз хочет получить утилиты, это по-прежнему можно сделать здесь:
BugM
А зачем все это? Смотрю на я на всю эту серию статей и не понимаю зачем и кому оно вообще нужно? Кто потенциальный пользователь всего этого?
Серия курсовых с последующим превращением в диплом?
Подготовка для выхода на госзакупки?
Импортозамещение?
saipr Автор
А вы не в курсе, что везде внедряется электронная подпись? Что людям нужны средства, позволяющие подписывать документы, проверять сертификаты и теже подписи, да и просто посмотреть их. Не подскажете как это можно сделать? Речь идет, естественно, о российской криптографии.
Да нет, конечно. О каком импортозамещении может идти речь с ГОСТ-ой подписью!
А у нас что открытый код закупают? Если так, то подскажите Где!
Покажите мне такие курсовые и кто их делал.
А если кому-то поможет написать курсовую и диплом, то вообще здорово. Значит не зря был наш труд.
BugM
То есть вы это позиционируете как средство для подписи документов и проверки подписей?
Бухгалтеры, секретари и прочие продажники с закупщиками.
А реальным пользователям из этой группы показывать свой софт пробовали? Они добровольно ни в жизни не будут пользоваться софтом который им сразу показывает десяток непонятных слов и десяток непонятных кнопок. Куда жать непонятно, что делать непонятно. Нажмешь не туда и вообще какой-то ужас на экран вылазит.
Пользователям такого софта нужно максимум 2 кнопки: Подписать и Проверить подпись. Желательно одна: Подписать. А проверка должна делаться автоматически для всего сама. И эти кнопки должны быть в их CRM, СЭД, почте итд. Отдельную программу запускать ради одной кнопки сложно и не нужно.
А что опенсорс не закупают? В виде техподдержки, настройки, внедрения итд закупают еще как.
Я делал подобные. Там же ничего сложного. А интерфейс как раз намекает на студенческую поделку.
vin2809
У нас Хабр только для профессоров? Если нет, то почему нельзя выложить "изнанку", т.е. устройство чего-либо? Что здесь плохого?
У кого-то программирование может быть просто хобби и совсем не связано с процессом получения денег. Вот для них, например, и пишутся такие циклы статей.
Я двумя руками поддерживаю автора статьи, уважаю и шлю "+"...
BugM
Можно и нужно. Только тут "изнанки" не видно. Да что там изнанки, ссылки на код с ходу не видно. Подозреваю что он вообще закрыт.
Предлагать качать бинарник и при этом ратовать за безопасность и правильные стандарты такое себе.
saipr Автор
Зачем же подозревать. Ведь все ссылки даны (например эта ), возьмите и проверьте. Прочитайте еще раз внимательно.
А это что по-вашему:
И вообще в данном конкретном материале речь идет об инструменте для разбора ASN1-структур**. Он ни от чего не защищает, он помогает.
BugM
Я естественно говорю про исходники того бинарника который вы предлагаете скачать, а не про исходники другой приложеньки.
Ага, то есть это уже не утилита для подписи реальными пользователями, а демонстратор технологии. Тогда исходники и код в статье просто напрашиваются. Демонстрировать кишки сертификатов без кода странно.
saipr Автор
Почитайте и посмотрите внимательно.
Nova_Logic
Ну да, конечно-же вы
ненарушали лицензии.И, видимо, до сих пор
ненарушаете MPL: