В октябре текущего года правительство осчастливило всех операторов связи Постановлением №1101 от 26 октября 2012 года "О единой автоматизированной информационной системе "Единый реестр доменных имён, указателей страниц сайтов в информационно-телекоммуникационной сети "Интернет" и сетевых адресов, позволяющих идентифицировать сайты в информационно-телекоммуникационной сети "Интернет", содержащие информацию, распространение которой в Российской Федерации запрещено". В связи с этим постановлением, каждый провайдер обязан блокировать доступ к сайтам, находящимся в списке запрещенных. Чтобы получить доступ к реестру оператору требуется сформировать специальный запрос и подписать его квалифицированной подписью. Звучит страшно? На самом деле, всё просто.
В данной статье мы рассмотрим, как это может сделать "типовой" оператор связи, технический персонал которого до настоящего момента не имел удовольствия работать с электронной подписью при помощи наших продуктов.
Рассмотрим ситуацию с сервером на базе UNIX на площадке оператора связи. Далее делаем следующее:
Шаг 1: Получаем квалифицированный сертификат ключа проверки электронной подписи (ЭП) в одном из аккредитованных Минкомсвязи УЦ. Кстати, это можно сделать и у нас. Ключ электронной подписи просим разместить, например, на флешке.
Шаг 2: В этом же УЦ удобно сразу приобрести лицензию на право использования СКЗИ "КриптоПро CSP" версии 3.6 на рабочем месте UNIX и его дистрибутив.
Шаг 3: Устанавливаем на сервер КриптоПро CSP в соответствии с эксплуатационной документацией.
Шаг 4: Предполагая, что запросы к реестру будут формироваться и отправляться автоматически по расписанию, избавляемся от необходимости каждый раз вставлять флешку с ключом. Для этого копируем ключ на жёсткий диск сервера:
cp -r /media/flash/RaUser-x.000 /var/opt/cprocsp/keys/<username>/
При этом не забываем, что сам сервер становится ключевым носителем, и защищаем его должным образом.
Шаг 5: Устанавливаем сертификат из ключевого контейнера в хранилище:
/opt/cprocsp/bin/<arch>/certmgr -inst -cont '\\.\hdimage\<contname>' -store uMy
Здесь <contname> - имя контейнера, которое можно получить с помощью следующей команды:
/opt/cprocsp/bin/<arch>/csptest -keyset -enum_c -verifyc -fqcn
Шаг 6: Готовим запрос.
Открываем памятку оператора связи и видим, что нам надо сформировать очень простой файл XML вида:
<?xml version="1.0" encoding="windows-1251"?> <request> <requestTime>2012-01-01T01:01:01.000+04:00</requestTime> <operatorName>Наименование оператора</operatorName> <inn>1234567890</inn> <ogrn>1234567890123</ogrn> <email>email@email.ru</email> </request>
Такой запрос можно сформировать, например, средствами PHP:
$xmlstr = <<<XML <?xml version="1.0" encoding="windows-1251"?> <request></request> XML; $xml = new SimpleXMLElement($xmlstr); $xml->addChild('requestTime', date('c')); $xml->addChild('operatorName', "OOO \"CRYPTO-PRO\""); $xml->addChild('inn', '007717107991'); $xml->addChild('ogrn', '1037700085444'); $xml->addChild('email', 'name@cryptopro.ru'); $file = fopen('Request.xml', "w"); fwrite($file, $xml->asXML());
Шаг 7. Создаём отсоединённую (detached) подпись в формате PKCS#7 с помощью утилиты командной строки cryptcp, которая входит в состав КриптоПро CSP.
$cmd="/opt/cprocsp/bin/amd64/cryptcp"; $flags=" -sign -uMy -dn <название_компании> -q1 -der -detached Request.xml Request.xml.sig"; $cmd .= $flags; $output = shell_exec($cmd);
В итоге мы имеем два файла Request.xml и Request.xml.sig. Запрос можно проверить по ссылке. И требования законодательства соблюдены.
То же самое можно сделать с помощью КриптоПро JCP и следующего примера.
Афанасьев Евгений
Беляев Анатолий
Смирнов Павел