Като част от системата за подписване на файлове NakovDocumentSigner е разработено и примерно Java-базирано уеб приложение, което дава възможност на потребителя да подписва и изпраща файлове, след което проверява цифровия подпис и сертификата на изпращача. Реализирана е проверка на цифровия подпис на получения файл, директна проверка на получения сертификат и проверка на получената сертификационна верига за случаите, в които такава е налична.
Проверката на цифровия подпис установява дали изпратената сигнатура съответства на изпратения файл и изпратения сертификат.
Директната проверка на сертификата установява дали на този сертификат може да се има директно доверие, без да се проверява сертификационната му верига.
Проверката на сертификационната верига на сертификата на изпращача (когато е налична) има за цел да провери валидността на сертификата и да потвърди самоличността на изпращача.
Как се извършват проверките на подписа и сертификата?
Проверката на сигнатурата се извършва по стандартния начин с използване на класа java.security.Signature. За целта първо се извлича публичният ключ на потребителя от получения сертификат и след това с него се проверява дали получената сигнатура съответства на получения файл.
За директната проверка на сертификат примерното уеб приложение поддържа множество от сертификати, на които има доверие и проверява дали сертификатът на потребителя е директно подписан от някой от тях. Проверява се и срокът на валидност на сертификата. Доверените сертификати за директна проверка се съхраняват като .CER файлове в специална директория на приложението, името на която се указва от константа.
За проверката на сертификационната верига на получения потребителски сертификат в демонстрационното уеб приложение се използва множество от доверени Root-сертификати на сертификационни органи от първо ниво. От това множество се построява съвкупността от крайни точки на доверие (trust anchors), която е необходима за проверката на сертификационната верига. Самата проверка на веригата сертификати се извършва по PKIX алгоритъма, който е реализиран в Java Certification Path API. Доверените Root-сертификати се съхраняват като .CER файлове в специална директория на приложението, името на която се указва от константа.
Уеб приложението е базирано на J2EE и Struts
Демонстрационното уеб приложение е базирано на Java технологиите и е реализирано със средствата на платформата J2EE (Java 2 Enterprise Edition) и широкоразпространения framework за Java уеб приложения Struts. В основната си част използва Servlet/JSP технологиите за реализация на потребителския си интерфейс и следва J2EE стандарта за Java уеб приложения. За изпълнението си изисква J2EE уеб контейнер, в който да работи.
Struts framework е използван, защото има вградена функционалност за посрещане на файлове, изпратени от HTML форма, докато такава възможност стандартно в JSP/Servlets технологията няма.
Приложението се състои две Struts-базирани HTML форми, Struts action клас за обработка на формите, Struts action form клас за съхранение на данните от формата, клас за проверка на цифрови подписи и сертификати, страница за обработка на изпратения подписан файл и няколко конфигурационни файла.
Заради програмния модел на Struts framework приложението стриктно следва архитектурата Model-View-Controller (MVC), макар и това да не е наложително за нашите цели.
Пълният сорс код на системата е достъпен за свободно изтегляне от сайта на NakovDocumentSigner – http://www.nakov.com/documents-signing/.
Уеб форма за подписване със сертификат от PFX файл
Формата за подписване на файл със сертификат от PKCS#12 хранилище (PFX файл) се състои от три полета, съответно за името на файла, сертификата и сигнатурата и съдържа още аплета за подписване и бутон за изпращане на формата:
Фигура 4 23. Уеб форма за подписване със сертификат от PKCS#12 хранилище
На картинката (фигура 4-6) аплетът за подписване изглежда като бутон със заглавие “Sign selected file”. Тази форма се поражда от JSP страница, базирана на библиотеката от тагове “struts-html” и използва Struts тага за изпращане на файл :
SignedFileUploadForm-PFX.jsp
<%
/**
* A JSP that contains the form for signing and uploading a file. The form
* contains 3 fields - the file to be uploaded, the certification chain and
* the digital signature. It also contains the DigitalSignerApplet that signs
* the selected file on the client's machine.
*
* This file is part of NakovDocumentSigner digital document
* signing framework for Java-based Web applications:
* http://www.nakov.com/documents-signing/
*
* Copyright (c) 2003 by Svetlin Nakov - http://www.nakov.com
* National Academy for Software Development - http://academy.devbg.org
* All rights reserved. This code is freeware. It can be used
* for any purpose as long as this copyright statement is not
При преноса на данните от формата към сървъра се използва кодиране “multipart/form-data”, което позволява изпращане на файлове и друга обемиста информация. Аплетът за подписване се вгражда с таговете и . Всъщност тагът се разпознава само от Internet Explorer, а от всички останали браузъри и за да работи нашето приложение на всички браузъри, двата тага се комбинират.