V tomto článku bych vám chtěl ukázat, jak lze snadno a rychle realizovat digitální podpis ve webové aplikaci. Obecně řečeno, jsou tři základní možnosti, jak kýžené funkcionality dosáhnout – komerční aplikace (hotové řešení), vlastní aplikace (například přes Microsoft CAPI – CryptoAPI) a takzvaně kompromisní řešení (využití již připraveného rozhraní mezi vaší aplikací a světem CryptoAPI), které pod názvem CAPICOM nabízí firma Microsoft. Právě tomu se budu věnovat podrobně.

Co a kde podepisovat

Smyslem digitálního podpisu je nepopiratelně zaručit integritní vazbu mezi autorem nějakých dat (typicky formulářová pole ve vaší aplikaci, která uživatel vyplňuje a odesílá k dalšímu zpracování na server) a majitelem digitálního certifikátu vystaveného certifikační autoritou, které příjemce dat důvěřuje. Pro potřeby praktické integrace digitálního podpisu do webové aplikace je navýsost vhodné znát základní funkční a procesní stránku mechanismu digitálního podpisu, funkcionalitu certifikační autority, vědět, co je a k čemu slouží Certification Revocation List (CRL) a několik dalších pojmů z této oblasti. Jako tvůrci programu, ve kterém chcete data podepisovat, byste měli vědět, co a jak děláte, proč to děláte a jestli vámi nastavené procesy odpovídají standardům týkajícím se této problematiky, prostě mít o věci základní povědomí.

Praktická realizace

Přeskočím ale veškerou potřebnou teorii a ukáži vám, jak lze snadno a rychle implementovat digitální podpis do vlastní aplikace pomocí knihovny CAPICOM firmy Microsoft.

Co budu dělat

Ve své aplikaci chci dosáhnout toho, abych na straně klienta mohl podepsat formulářová data, zadávaná uživatelem systému, a tato data, včetně digitálního podpisu a certifikátu, jímž jsem data podepsal, odeslat na server, kde před další manipulací s daty podpis ověřím.

Co všechno potřebuji

Chci podepisovat nějaká data – potřebuji tedy nějakou webovou aplikaci s klientským formulářem. Vlastní digitální podpis budu na klientovi realizovat pomocí řešení CAPICOM, volně distribuovaného ze stránek Microsoftu (v anglické verzi). V podstatě jde o jedinou DLL knihovnu, ačkoli instalační balíček obsahuje také ukázkové příklady digitálního podpisu v jazycích VB 6, ASP 3.0, C#, HTML a VBS a instalační kabinet *.cab pro přímou distribuci z aplikace. Tato knihovna ovšem musí být zaregistrována na klientovi v systémovém adresáři (například C:WindowsSystem32Capicom.dll), distribuce a hlavně registrace na klientské straně se tedy neobejde bez lokálních administrátorských práv (pro zápis do adresáře „System32“). To může vypadat jako nepraktické omezení, na druhou stranu instalace komponent je určitě činnost, o které by měl administrátor vědět.

Druhou a zároveň poslední podstatnou podmínkou pro implementaci podpisu je klientská instalace digitálního certifikátu. Serverová strana vaší aplikace musí důvěřovat certifikační autoritě (ať už interní aplikační nebo veřejné komerční) a certifikátům, které tato autorita vydává. Za účelem vyzkoušení lze využít standardní testovací certifikáty poskytované komerčními poskytovali certifikačních služeb, například I.CA, CA Czechia CZ nebo AEC.

Na straně serveru potřebujete mít nainstalován certifikát té certifikační autority, která vystavila digitální certifikát, jímž klient aplikace podepsal svá data. Tento certifikát lze rovněž stáhnout a nainstalovat ze stránek provozovatelů příslušných CA.

Příklad praktického řešení

Ukázka programového kódu bude pro jednoduchost předvedena v jazyce VBscript, použitelném na klientovi v klientském skriptu a na serveru například v ASP 3.0 serverovém skriptu.

Klientská strana

První akce, kterou bychom měli na klientovi provést, je kontrola, zda je knihovna CAPICOM řádně nainstalována. Tomuto účelu může posloužit jednoduchá funkce:

Function isCapicomAvailable()
  Dim oStore
  Set oStore = CreateObject(„CAPICOM.Store“)
  oStore.Open CAPICOM_LOCAL_MACHINE_STORE, „Root“, CAPICOM_STORE_OPEN_READ_ONLY
  If Err.Number <> 0 Then
    isCapicomAvailable = False
    Exit Function
  End If
  isCapicomAvailable = True
  Set oStore = Nothing
End Function

Vlastní podepsání dat fiktivního inputu „texttosign“ ve formulářovém poli může vypadat takto:

….
Dim datatosign, Message
datatosign = texttosign.value
Set SignedData = CreateObject(„CAPICOM.SignedData“)
SignedData.Content = datatosign
Message = SignedData.Sign(Nothing, False, CAPICOM_ENCODE_BASE64)
Set SignedData = Nothing
….

Proměnná Message v tuto chvíli obsahuje datový balíček zahrnující vlastní podepsaná data, certifikát, jímž byla data podepsána (včetně veřejného klíče) a digitální podpis. Obsah této proměnné lze už zaslat na server, kde se v serverovém skriptu vytvoří stejný CAPICOM objekt (na serveru proto musí být rovněž zaregistrována knihovna „CAPICOM.DLL“), které se předá kompletní přijatý datový balíček.

Ověření podpisu

Ověření podpisu na straně serveru se provede následovně:

pkcs7message = request.form(„data“)
Set SignedData = server.CreateObject(„CAPICOM.SignedData“)
SignedData.Verify pkcs7message, False, CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE

Certifikát, jimž byla data podepsána, obsahuje cestu (adresu) k seznamu odvolaných certifikátů CRL, proti němuž lze platnost certifikátu ověřit.

Podpora CAPICOM řešení

Komponenta CAPICOM disponuje poměrně bohatým rozhraním, detailně popsaným v MSDN, v sekci CAPICOM Reference. Podle MS dokumentace lze knihovnu CAPICOM použít k následujícím účelům:

  • digitální podpis dat
  • digitální podpis kódu
  • ověřování digitálních podpisů
  • kódování dat
  • šifrování a dešifrování dat

Mezi podporovanými jsou uváděny operační systémy Windows 98, Windows ME, Windows NT, Windows 2000, Windows XP, Windows XP 64bit a Windows Server 2003. Z prohlížečů je podporován pouze Microsoft Internet Explorer verze 5 a výše.

Pohled z praxe

V diskusním fóru EMWAC věnovaném Visual Studiu .NET proběhla před nějakou dobou diskuse, týkající se spolehlivosti nasazení tohoto řešení, ze které podle publikovaných zkušeností programátorů vyplynuly nahodilé problémy při používání této komponenty na platformě Win98, WinNT a nižších (výjimkou byly i novější operační systémy), kdy knihovna během podpisu nevratně narušila vazbu mezi privátním klíčem a digitálním certifikátem. Statisticky byly problémy deklarovány někde kolem úrovně jednoho procenta instalací.

Knihovnu CAPICOM můžete použít i v případě, že digitální certifikát není uložen v uživatelském profilu, ale na čipové kartě (testováno na konfiguraci čtečka Datakey, karta Datakey MODEL 330). Knihovna CAPICOM totiž pracuje s úložišti certifikátů, kam se informace o certifikátech na čipové kartě automaticky kopírují. Jinými slovy, pokud budete chtít podepisovat certifikátem na kartě, kterou externě získáte, musíte po zasunutí karty do čtečky počkát, až systém zdetekuje certifikát a zkopíruje informace o něm do lokálního úložiště certifikátů, se kterým pracuje CAPICOM (dříve by certifikát neviděl a nemohl s ním pracovat).

Pro snadnou demonstraci funkcionality podepisování lze použít ukázkový HTML příklad z instalačního balíčku CAPICOMu. Podpis i vlastní ověření je v něm realizováno v klientských VBS skriptech, což lze snadno upravit pro konfiguraci klient (VBS) – server (ASP 3.0).

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět