Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом.pdf
Скачиваний:
23
Добавлен:
23.03.2015
Размер:
1.25 Mб
Скачать

Рисунок 2

Далее, используя сертификат издателя в PEM формате, проверяем подпись у файла дампа реестров:

openssl smime -verify -in dump.xml.sig -content dump.xml -CAfile CARTK.pem -inform DER -out valid.xml

Если подпись файла верна, то в ответ мы получим строку:

Verification successful

16

Файл valid.xml в случае верной подписи будет идентичен файлу dump.xml.

Так же проверить подпись файла дампа реестров можно на сайте госуслуг.

Для работы с OpenSSL были написаны соответствующие функции подписи и верификации подписи. Подходящей реализации работы с OpenSSL найдены не были, вследствие чего было реализовано взаимодействие на консольном уровне. Запуск утилиты производится в отдельном потоке с ожидание завершения. Пример реализации в отдельном потоке:

//создаем отдельный поток

Thread tOpenSSL = new Thread(OpenSSL);

//указываем что данный поток фоновый tOpenSSL.IsBackground = true; tOpenSSL.Start();

//ждем завершение работы потока if (!tOpenSSL.Join(90000))

{

/*

* если через 90 секунд поток не завершен, то завершаем его сами

*/

tOpenSSL.Abort();

}

static void OpenSSL()

{

//создаем процесс

Process cmdProcess = new Process(); //указываем рабочую папку

cmdProcess.StartInfo.WorkingDirectory = @"X:\OpenSSL\bin"; //указываем исполняемый файл cmdProcess.StartInfo.FileName = @"openssl";

//указываем аргументы запуска

cmdProcess.StartInfo.Arguments = String.Format("smime -sign -in request.xml -out request.xml.sig -signer key.pem -outform DER");

//прячем окно от пользователя cmdProcess.StartInfo.CreateNoWindow = true; cmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

//запускаем процесс cmdProcess.Start();

//ждем завершения процесса

17

if (!cmdProcess.WaitForExit(60000))

{

/*

* если через 60 секунд процесс не завершен, то завершаем его сами

*/

cmdProcess.Kill();

}

}

Получить дамп реестров в автоматическом режиме можно используя посредством SOAP (Simple Object Access Protocol – простой протокол доступа к объектам) следующий веб-сервис:

http://vigruzki.rkn.gov.ru/services/OperatorRequest/

WSDL описание (Web Services Description Language – язык описания веб-

сервисов и доступа к ним) доступно по адресу:

http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl

Сервис состоит из 3-х методов:

1. getLastDumpDate

Метод предназначен для получения временной метки последнего обновления выгрузки из реестра, long число – дата в формате UNIX Timestamp, но не в секундах, а в миллисекундах.

2. sendRequest

Метод предназначен для направления запроса на получение выгрузки из реестра, Принимает requestFile и signatureFile в base64Binary формате — файл запроса и его подписи (C:/request.xml и C:/request.xml.sign) В ответ присылает result — Результат обработки запроса в boolean формате и если все удачно, то code — Идентификатор запроса, строка по которой необходимо получить выгрузку из реестра в формате string. Так же resultComment — Комментарий к результату обработки запроса в формате string.

3. getResult

Метод предназначен для получения результата обработки запроса — выгрузки из реестров, принимает code — Идентификатор запроса, строка по

18