Установка КриптоПро JCP на Windows
Прежде всего, на сервер системы установите
(JRE) версии не ниже 1.6.
install.bat “C:Program FilesJavajdk1.6.0_20jre”
install.bat “C:Program FilesJavajdk1.6.0_20jre” XXXXX-XXXXX-XXXXX-XXXXX-XXXXX “Your Company”
asn1rt.jar | JCP.jar | JCPRevCheck.jar | JCP_ASN.jar |
AsnLite.jar | JCPinst.jar | JCPRevTools.jar | JCryptoP.jar |
forms_rt.jar | JCPRequest.jar | JCPxml.jar |
Дополнительные библиотеки Java
Нам понадобится библиотека iscjcp.jar (исходники
), в которой содержится ряд вспомогательных классов для работы с JCP из Caché. Кроме этого, потребуются три open source библиотеки —
(aka XML Security) и
. Их использование регулируется лицензией
Загрузите архив jars.zip с четырьмя перечисленными библиотеками и распакуйте его в папку jrelibext.
В случае использования Windows 7, необходимо выдать полномочия группе «Все» на чтение и выполнение всех библиотек в папке jrelibext.
Настройка и запуск Java Gateway, создание проекций классов
Чтобы стало возможным вызывать Java-классы из Caché/Ensemble, необходимо настроить и запустить Java Gateway, а также создать проекции используемых Java-классов.
insert into %Net_Remote.ObjectGateway(Name, Type, Server, Port, JavaHome) values (‘JCPGate’, ‘1’, ‘127.0.0.1’, ‘55555’, ‘C:Program FilesJavajdk1.6.0_20jre’)
Здесь в поле Name указано значение “JCPGate” – это имя нового Java Gateway. В поле JavaHome необходимо указать путь к JRE, для которой была произведена установка JCP. В поле Port указывается TCP-порт, используемый для общения с этим Java Gateway из Caché.
write ##class(%Net.Remote.Service).StartGateway(“JCPGate”)
write ##class(%Net.Remote.Service).StopGateway(“JCPGate”)
Запускать/останавливать Java Gateway можно из любой области.
do ##class(%Net.Remote.Java.JavaGateway).%ExpressImport(“isc.jcp.JcpFacade”, “55555”)
Здесь 55555 – это номер TCP-порта, который используется для общения с Java Gateway. Этот порт был указан нами ранее при добавлении записи в таблицу %Net_Remote.ObjectGateway.
Проверка ЭЦП во входящих SOAP-сообщениях
Загрузите и распакуйте архив
с исходным кодом классов smev.JcpUtils и smev.JcpSignature. Импортируйте класс
в Caché с помощью Studio, предварительно перейдя в область, где ведется разработка веб-сервисов. Откройте импортированный класс в Studio и отредактируйте значения параметров JAVAGATEWAYPORT и JAVAGATEWAYSERVER, указав соответственно TCP-порт и IP-адрес используемого Java Gateway. Скомпилируйте класс.
Method OnPreSOAP(mode As %String, action As %String, request) { do ##super(mode, action, request) #dim stream As %Stream.Object = request if '$isObject(stream) { // на случай MIME attachments #dim index As %Integer = %request.NextMimeData("") set stream = $select(index="":"", 1:%request.GetMimeData(index)) } if $isObject(stream) { #dim fault As %SOAP.Fault = ##class(smev.JcpUtils).verifySignatureOnPreSoap(stream) if $isObject(fault) set ..SoapFault = fault } }
Это работает на версиях Caché/Ensemble, начиная с 2009.1. Ниже приведен пример веб-сервиса, который осуществляет проверку подписи всех входящих SOAP-сообщений.
Формирование ЭЦП для исходящих SOAP-сообщений веб-сервиса
Далее рассмотрим случай, когда все ответы веб-сервиса должны быть подписаны ЭЦП организации. В такой ситуации на сервере системы размещается хранилище, содержащее секретный ключ, который используется при формировании подписи. Кроме того, должен быть доступен сертификат, соответствующий этому ключу. В библиотеке iscjcp.jar реализована работа с хранилищем типа «FloppyStore». Поэтому, для формирования ЭЦП нам потребуется виртуальная дискета с хранилищем ключей.
Чтобы создать такую дискету, выполните следующие действия:
- Установите драйвер, имитирующий FDD привод, например, ImDisk.
- Из панели управления Windows запустите программу настройки «ImDisk Virtual Disk Driver» и настройте диск с параметрами:
- Drive letter: A,
- Size of virtual disk: 1 Megabyte,
- Device type: Floppy.
- Отформатируйте виртуальную дискету, задав файловую систему FAT.
- Распакуйте содержимое архива FDD.zip на диск A:.
В результате описанных манипуляций на диске A: сервера имеем хранилище ключей, содержащее тестовый секретный ключ. Файл A:SelfSigned.cer представляет собой тестовый сертификат, соответствующий секретному ключу.
Вы можете самостоятельно генерировать ключи и сертификаты с помощью КриптоПро JCP. Эти процедуры описаны в документации продукта.
Формирование ЭЦП
Загруженный ранее архив
с исходным кодом Caché Object Script содержал класс
. Импортируйте этот класс в Caché с помощью Studio.
Откройте класс smev.JcpUtils в Studio и отредактируйте значение параметра CERTFILENAME, указав полный путь к файлу сертификата – “A:SelfSigned.cer”. Этот сертификат соответствует секретному ключу, который будет использоваться при формировании ЭЦП. Скомпилируйте класс.
do ..SecurityOut.AddElement(##class(smev.JcpSignature).%New())
Чтобы протестировать проверку/формирование ЭЦП веб-сервисом test.TestService, исходный код которого приведен выше, выполним следующие действия.