- •АННОТАЦИЯ
- •СОДЕРЖАНИЕ
- •ВВЕДЕНИЕ
- •1 ОБЗОР ЛИТЕРАТУРЫ И ПОСТАНОВКА ЗАДАЧИ
- •2 ТЕХНИЧЕСКОЕ ОПИСАНИЕ ПРОЕКТА
- •2.1 План разработки проекта
- •2.2 Процесс выгрузки дампа реестров
- •Рисунок 1
- •Рисунок 2
- •2.3 Разбор дампа реестров
- •2.4 Ограничение доступа
- •Рисунок 3
- •Рисунок 4
- •2.5 Описание интерфейсов программного обеспечения
- •Рисунок 5
- •Рисунок 6
- •Рисунок 7
- •Рисунок 8
- •Рисунок 9
- •Рисунок 10
- •Рисунок 11
- •2.6 Требования к начальной настройке
- •3 ЭКОНОМИЧЕСКОЕ ОПИСАНИЕ ПРОЕКТА
- •3.1 Сетевое планирование
- •3.2 Построение сетевого графика, расчет его параметров и вероятностных характеристик
- •Таблица 1 – Перечень работ
- •Рисунок 12
- •Таблица 2 – Расчет сетевого графика
- •3.3 Анализ сетевого графика
- •Таблица 3
- •3.4 Смета затрат на разработку проекта
- •Таблица 4
- •Таблица 5
- •Таблица 6
- •Таблица 7
- •Таблица 8
- •Таблица 9
- •Таблица 10
- •Таблица 11
- •3.5 Анализ технико-экономической эффективности
- •ЗАКЛЮЧЕНИЕ
- •СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- •ПРИЛОЖЕНИЕ А
Рисунок 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