PythonおよびNetwork Security ServicesコマンドラインユーティリティGUI

画像 Network Security Services( NSS )は、セキュアなクライアントおよびサーバーアプリケーションのクロスプラットフォーム開発で使用される一連のライブラリです。 NSSを使用して構築されたアプリケーションは、v1.0からTLS v1.3までのTLS、PKCS#5、PKCS#7、CMS、PKCS#11、PKCS#12、S / MIME、X.509 v3証明書、OCSPおよびその他の標準を使用できますセキュリティ保証。 暗号化およびPKIの分野での機能的な能力の観点から、NSSはOpenSSLとしか比較できません。 しかし同時に、NSSパッケージには、OpenSSLよりも明白な利点が1つあります。つまり、ルート証明書、サードパーティのユーザー証明書、接続されたハードウェアアクセラレータに関する情報、トークン、 PKCS#11インターフェイスを備えたスマートカードを格納するリポジトリがあります。



NSSは現在、PKCS#11 v.2.40をサポートしています。



AOL、Red Hat、Sun Microsystems / Oracle Corporation、Google、その他の企業および個人の貢献者がNSSの開発に貢献しました。 Mozillaは、ソースコード用のストレージを提供しました。



NSSパッケージは、Firefoxブラウザー(Androidプラットフォームを含む)、Thunderbirdメールクライアント、統合SeamonkeyパッケージなどのMozilla製品を含め、広く使用されています。



NSSパッケージとOpenSSLは、コマンドラインユーティリティを使用して、さまざまなPKI機能(キー生成、x509v3証明書の発行、電子署名の操作、TLSサポートなど)を実装する機能を提供します。 PKI機能が単一のopensslユーティリティによって実装されるOpenSSLとは異なり、NSSパッケージはユーティリティのセット全体を提供します。 そのため、証明書の操作にはcertutilユーティリティがあり、保護されたコンテナPKCS#12の操作にはpk12utilユーティリティが使用され 、電子署名ユーティリティの操作にはp7sign、p7verify、p7contentなどが使用されます。 Linuxファミリのオペレーティングシステムについて話す場合、NSSパッケージは必要なパッケージに含まれており、これらのユーティリティはすべてプリインストールされています。



すでに述べたように、NSSには3つのデータベースを含む組み込みのストレージがあります。



bash-4.3$ ls -l *.db cert8.db key3.db secmod.db bash-4.3$
      
      





最初のcert8.dbデータベースには、ルート証明書と、原則として、たとえば受信者証明書の電子メールまたはファイルの暗号化に使用されるサードパーティのユーザー証明書が格納されます。 key3.dbデータベースには秘密鍵が含まれています。 最後に、 secmod.dbデータベースには、PKCS#11インターフェースで接続されたトークン/スマートカードに関する情報が保存されます。 このベースはmodutilユーティリティによって制御されます。このユーティリティを使用すると、PKCS#11モジュールを追加または削除できます。 モジュールを接続するには、モジュールのPKCS#11ライブラリへのパスを指定し、そのニックネームを指定します。 リポジトリが置かれているディレクトリへのパスを指定することは、NSSユーティリティの不可欠なパラメータです。 一部のユーティリティでは「 -d <NSSリポジトリディレクトリ> 」と指定され、他のユーティリティでは「 -dbdir <NSSリポジトリディレクトリ> 」と指定されます 。 ストレージはmodutilユーティリティによって作成されます。



 #modutil –create –dbdir <   NSS >
      
      





このようなリポジトリは、Firefox、Thunderbird、Seamonkeyなど、NSSで構築されたすべてのプロジェクトに含まれていることに注意してください。



この記事は、OpenSSLおよびNSSコマンドラインユーティリティ用のグラフィカルシェルを作成したいという要望を表明しました。 そして今、NSSの時間です。 最初の質問:どの環境で開発するか? 以前の記事では、さまざまなコンストラクターを使用したTcl / Tk環境でのユーザーGUIの開発が検討されました。 Pythonスクリプト言語でNSSパッケージのグラフィカルユーザーインターフェイスを開発することが決定されました。 Tkパッケージとの連続性を確保するために、 Tkinterパッケージがグラフィックパッケージとして選択されました。



ここで、グラフィカルインターフェイスを設計するためのツールを選択する必要がありました。 Rapid-TKパッケージの最初のレビュー:



画像



一般的に、パッケージは良い印象を残しました。それはその名前を正当化するものです:Rapid-fast。 それでも、2つの欠点に注意してください。 最初の不便さは、ウィジェット自体ではなく、ウィジェットのアイコンのみがイーゼルに配置されるという事実によるものです(図を参照)。 そして、実際の写真を見るためには、プロジェクトを頻繁に実行する必要があります。 2番目の欠点は、ウィンドウ内にウィジェットを配置することです。 Rapid-TKでは、PackerはPacker(方向の配置)を使用します。これにより、グリッドパッカー(海上戦闘のようなグリッド上)および配置(座標上)とは異なり、ウィンドウ内でウィジェットを整列することが非常に困難になります。 フレームを使用すると、目的の効果を得ることができますが:



画像



ただし、設計の開始後、プロジェクト内のウィジェットとウィンドウの数が増えており、ノートブックテクノロジー(ノートパッド、ノートブック)の使用が最適になることが明らかになりました。



画像



そして、ここで不快な驚きが待っていました。Rapid-TKデザイナーは、ウィジェット自体は接続されていますが、ノートブックでの作業をサポートしていません。 そして、 Pageコンストラクターが見つかりました-Python用の自動GUIジェネレーター。 PageコンストラクターがVisual Tclに基づいていることは、まったく予想外で楽しい驚きでした。 これは最も強力な議論でした:



画像



よく見ると、Page Designerのウィンドウは、Visual Tclコンストラクターのウィンドウの双子のようです。 それにもかかわらず、キャッチは欠かせませんでした。ジェネレーターによって作成されたPythonスクリプトは、「偉大な、強力で、真実で、自由なロシア語!」(I. S. Turgenev)の使用により実行されたくありませんでした。 しかし、すべてが簡単に解決されました。次のコードを行418の後にgui_pyton_gen.tclファイルに追加するだけで十分です。



 # -*- coding: utf-8 -*- ,
      
      





生成されたPythonコードを見ると、このディレクティブは2行目になります。



 ! /usr/bin/env python # -*- coding: utf-8 -*- # # GUI module generated by PAGE version 4.9 # In conjunction with Tcl version 8.6 # Aug 14, 2017 11:39:19 AM import sys try: from Tkinter import * except ImportError: from tkinter import * . . .
      
      





他に何? Pageコンストラクターは、プロジェクトがマルチウィンドウ化されることを想定していません(上記のRapidを参照)。 この場合、マルチウィンドウは、一方でノートブックに置き換えられます。 一方、まず第一に、これはPINコードまたはパスワードの入力に関するもので、非表示にしたLabelframeウィジェットを使用しました( self1.LabelPSW6.place_forget() )。



画像



PINコードまたはパスワードを入力するように見えました:



 self1.LabelPSW6.place(relx=0.05, rely=0.59, relheight=0.3, relwidth=0.88)
      
      





それでも、たとえば、データベースまたは電子署名からの証明書の内容を表示するには、追加のウィンドウが必要でした。



画像



この場合、問題は簡単に解決されます。 Pageコンストラクターで新しいプロジェクトが作成され、結果のコードがメインブランチに含まれる「ペン」になります。 Tkinter上のPythonでコマンドラインユーティリティ用のグラフィカルユーザーインターフェイスを開発する複雑さをすべて確認するには、 Pageコンストラクターをインストールし、nss_myプロジェクトをロードして慎重に分析します。 このプロジェクトの機能として、署名が添付されたファイルから元のファイルを抽出するスクリーンショットを示します(p7contentユーティリティ)。



画像



最後に、Pythonのスクリプトではなく、バイナリコードを取得します。 これを行うために、 Nuitkaプロジェクトを使用しました。これは、PythonスクリプトがCコードに変換してから変換します。 効果はすべての期待を上回りました。 Nuitkaパッケージをインストールし、Pageコンストラクターによって生成された2つのPythonスクリプトnss_my.pyおよびnss_my_support.pyをbinフォルダーに入れて、コマンドを実行します。



 #nuitka –recurse-all nss_my.py
      
      





その結果、バイナリモジュールnss_my.exeを取得します。 エンディングに悩まされることなく、気軽に起動してください。 少なくともテスト段階では、クラウドトークンをPKCS#11プラグインとして使用すると便利です。



All Articles