Python и GUI за помощни програми от командния ред на услугите за мрежова сигурност

Пакетът NSS в момента поддържа стандарта PKCS#11 v.2.40. AOL, Red Hat, Sun Microsystems/Oracle Corporation, Google и други компании и индивидуални сътрудници допринесоха за развитието на NSS. Mozilla е предоставила хранилище за изходния код.

Пакетът NSS се използва широко, включително в продуктите на Mozilla, включително браузъра Firefox (включително на платформата Android), пощенския клиент Thunderbird и интегрирания пакет Seamonkey.

Пакетът NSS, както и OpenSSL, предоставят възможност за използване на помощни програми от командния ред за прилагане на различни PKI функции (генериране на ключове, издаване на сертификат x509v3, управление на електронен подпис, поддръжка на TLS и др.). За разлика от OpenSSL, където PKI функциите се изпълняват от една помощна програма openssl, пакетът NSS предоставя цял набор от помощни програми. И така, за работа със сертификати има помощна програмаcertutil,; за работа със защитени контейнери PKCS#12 се използва помощната програмаpk12util; за работа с електронен подпис се използват помощните програмиp7sign, p7verify, p7contentи др. Ако говорим за операционни системи от семейството на Linux, тогава пакетът NSS е включен в задължителната доставка и всички тези помощни програми са предварително инсталирани.

Както вече споменахме, NSS има вградено хранилище, което включва три бази данни:

Имайте предвид, че такива хранилища съществуват във всички проекти, изградени на NSS, включително Firefox, Thunderbird, Seamonkey.

Сега беше необходимо да се избере инструментариум за проектиране на графичен интерфейс. Първо беше прегледан пакетът Rapid-TK:

услугите

Като цяло пакетът остави добро впечатление, което оправдава името му на пакета: Rapid - бърз. Отбелязваме обаче два недостатъка. Първото неудобство се дължи на факта, че самоикони на джаджи, а не самите джаджи (вижте фигурата). И за да видите реалната картина, трябва да изпълнявате проекта много често. Вторият недостатък е свързан с разположението на уиджетите в прозореца. Rapid-TK използва Pack (разположение на посока) като пакет, което прави много трудно подравняването на джаджи в прозорец, за разлика от пакетите за мрежа (решетка, подобна на морска битка) и пакети за място (координати). Въпреки че използването на рамка ви позволява да постигнете желания ефект:

услугите

Въпреки това, след началото на дизайна, стана ясно, че броят на джаджи и прозорци в проекта нараства и използването на технологията Notebook (тетрадка, бележник) би било оптимално:

услугите

И тогава се очакваше неприятна изненада: конструкторът Rapid-TK не поддържа работа с Notebook, въпреки че самата джаджа е свързана. И тогава беше открит конструкторът на Page - автоматичен GUI генератор за Python. Доста неочаквана и приятна изненада беше, че конструкторът на Page е базиран на Visual Tcl. Това стана най-силният аргумент:

програми

Ако се вгледате внимателно, прозорците на конструктора Page са като двойните прозорци на конструктора Visual Tcl. И все пак имаше една уловка: създаденият от генератора Python скрипт не искаше да бъде изпълнен поради използването на „великия, мощен, правдив и свободен български език!“ (I.S. Тургенев). Но всичко беше решено просто, оказа се достатъчно да добавите следния код към файла gui_pyton_gen.tcl след ред 418:

Сега, ако погледнете генерирания код на Python, тогава вторият ред в него ще бъде тази директива:

Какво друго? Конструкторът на Page не предполага, че проектът ще бъде многопрозоречен (вижте Rapid по-горе). В нашия случай многопрозорецът, от една страна, е заменен от Бележник. От друга страна, на първо място това се отнася за въвеждане на ПИН-код или парола, ниеизползва приспособление Labelframe, което след това беше скрито (self1.LabelPSW6.place_forget()):

услугите

след това се появи, за да въведете ПИН или парола:

услугите

В този случай проблемът се решава просто. Създава се нов проект в конструктора на Page и полученият код се „обработва“, включен в главния клон. За да видите всички тънкости на разработването на графичен потребителски интерфейс за помощни програми на командния ред в Python на Tkinter, просто инсталирайте конструктора на Page, заредете проекта nss_my и внимателно го анализирайте. Като характеристика на този проект, ето екранна снимка на извличане на оригиналния файл от файл с прикачен подпис (помощна програма p7content):

помощни

И накрая, искаме да получим не Python скрипт, а двоичен код като изход. За да направим това, използвахме проекта Nuitka, който преобразува скрипт на Python в C код и след това го превежда. Ефектът надмина всички очаквания. Инсталирайте пакета Nuitka, поставете двата Python скрипта nss_my.py и nss_my_support.py, генерирани от конструктора на Page, в папката bin и изпълнете командата:

В крайна сметка ще получите двоичния модул nss_my.exe. Не се отчайвайте от края, не се колебайте да го пуснете. Като плъгин PKCS#11, поне по време на фазата на тестване, е удобно да се използва облачен токен.

И тук можете да получите грант за тестов период на Yandex.Cloud. Необходимо е само да въведете "Habr" в полето "секретна парола".