Pro zabezpečení dokumentů XML se používá šifrování XML a digitální podpis. Šifrování XML a implementace digitálního podpisu existuje pro různé programovací jazyky. Nicméně implementace šifrování XML a digitálního podpisu v C jazyk je velmi obsáhlý. Podporuje mnoho funkcí a je založen na knihovně LibXML2. PyXMLSec je implementace Pythonu pro bezpečnostní funkce XML, ale zatím nepodporuje všechny funkce. Aktuální verze knihovny podporuje následující bezpečnostní standardy XML v Pythonu.
a) Podpis a šifrování XML
b) Kanonický XML
Předpoklad pro knihovnu PyXMLsec
Knihovna PyXMLSec vyžaduje pro instalaci následující balíčky.
1) Python 2.2 nebo vyšší
2) LibXML
3) Knihovna zabezpečení XML
Python je již nainstalován v distribuci Ubuntu. LibXML lze nainstalovat zadáním následujícího příkazu do terminálu, který je znázorněn na obrázku
$sudo apt-get install python-libxml2
Bezpečnostní knihovnu XML lze nainstalovat pomocí následujícího příkazu v terminálu. Instalace XML knihovny je zobrazena na následujícím snímku.
$sudo apt-get install libxmlsec1-dev
Instalace vývojové knihovny C je znázorněna na následujícím obrázku.
$sudo apt-get install libxml-security-c-dev
Implementace zabezpečení XML v Pythonu se instaluje pomocí níže uvedeného terminálu, který je také znázorněn na obrázku.
$sudo apt-get install xmlsec1
Po instalaci závislostí stáhněte nejnovější verzi PyXMLSec (0.3.1) pomocí následujícího příkazu v adresáři Downloads. Následující obrázek ukazuje proces stahování.
$cd Downloads
$sudo wget labs.libre-entreprise.org/frs/download.php/897/pyxmlsec-0.3.1.tar.gz
Musíme zkompilovat PyXMLSec ze zdrojového balíčku, protože deb balíčky (binární balíček) nejsou dostupné. Rozbalte stažený soubor pyxmlsec-0.3.1.tar.gz balíček pomocí následujícího příkazu v terminálu.
$sudo tar -xvzf pyxmlsec-0.3.1.tar.gz
Přejděte do rozbaleného adresáře pomocí příkazu cd, který je znázorněn na obrázku.
$cd pyxmlsec0.13.1
Jakmile se dostanete do kořenového adresáře balíčku, spusťte sudo setup.py v terminálu pro instalaci PyxmlSec. Proces instalace PyXMLSec je znázorněn na následujícím obrázku. Vyberte možnost 1 pro sestavení PyXMLsec ze zdroje. Knihovna PyXMLsec podporuje kryptomotory OpenSSL, NSS a GnuTLS. OpenSSL je dobře známý kryptografický engine, který je běžně instalován v téměř každé linuxové distribuci.
$sudo ./setup.py
Po dokončení kroku sestavení spusťte znovu stejný příkaz a vyberte možnost 2 pro instalaci knihovny, která je zobrazena níže.
Příklad
Několik příkladů je dostupných na webu PyXMLsec v sekci dokumentace. Pro účely demonstrace jsme vybrali příklady podpisu XML (sign3.py) a ověření (verify3.py). Příklad podpisu vyžaduje vstupní soubor (v našem případě document.xml) ve formátu XML, klíče a certifikáty ve formátu PEM. Nejprve je tedy v procesu podepisování vyžadován pár klíčů a certifikát s vlastním podpisem. OpenSSL je široce používaný nástroj pro generování párů klíčů RSA a certifikátů. Následující příkaz vygeneruje pár klíčů RSA o velikosti 2048 bitů a uloží je do souboru "key.pem". Také ukládá certifikát X509 v souboru cer.pem.
#openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
Podpis XML
Po vygenerování klíčů a certifikátu je dalším krokem podepsání vstupního souboru. Příklad podpisu XML přebírá argumenty v následujícím formátu od uživatele.
#./sign.py <xml-doc> <key-file> <cert-file>
V našem případě je vstupním souborem pro XML podpis document.xml a výsledný podpis souboru uložený v output.xml soubor, který je zobrazen níže.
#./sign.py document.xml key.pem cert.pem > output.xml
Ověření XML
V tomto kroku příklad ověření XML vezme soubor output.xml s certifikáty pro ověření podpisů XML. Příklad ověření XML přebírá argumenty v následujícím formátu od uživatele.
#./verify.py <signed-file> <trusted-cert-pem-file1> [<trusted-cert-pem-file2> [...]]
V našem případě je vstupní soubor pro ověření XML output.xml a ověří jej, což je zobrazeno níže.
#./verify.py output.xml cert.pem
Závěr
Doufám, že se vám tento článek líbil. Chcete-li přidat, PyXMLsec je implementace zabezpečení XML v pythonu, která poskytuje šifrování a digitální podpis pro dokumenty XML. Podporuje kryptomotory s otevřeným zdrojovým kódem, jako jsou OpenSSL, GnuTLS a NSS pro symetrické a asymetrické algoritmy.