понедельник, 24 июня 2013 г.

Реестр запрещённых сайтов

По долгу слуужбы появилась необходимость получать реестр запрещённых сайтов с zapret.gov.ru, без мата не обошлось, т.к. геморой начался ещё на этапе получения электронной подписи, но я не буду об этом. Итак имеется токен с ЭП (rutoken s), отсутствие желания, что то с этим делать и необходимость что то делать.
Началось всё конечно с гугленья из которого я для себя выделил две интересные ссылки: http://habrahabr.ru/company/netangels/blog/158891/ и https://www.evernote.com/shard/s185/sh/ceb0b021-47e7-4c61-ab43-bc6db27fe919/c535b6e5047ec69d304519fe81c2c9ac?noteKey=c535b6e5047ec69d304519fe81c2c9ac

Смысл в руководствах представленных выше примерно такой: экспортируем ключ в pkcs12 с токена, экспортируем в pem и подписываем файл при помощи openssl.
Сразу скажу, что квест по приручению рутокена в Ubuntu  я не смог пройти (если кто совладал с этим, то интересно будет послушать), особенно меня конечно в нём порадовала протеворечивая техподдержка на форуме рутокена и их замысловатый сайт с неправильными ссылками на драйвера, но это опять таки это к делу не относится. Итак, понадобится компьютер с установленой ОС windows, это оказалось тоже не простой задачей (что странно). Как то так получилось, что все мои друзья и знакомые не пользовались этой ОС минимум 2 года. Если у вас с этим проблем нет, то вам понадобится вот такая программка для экспорта ключа. Работает она очень просто, запускаете, выбираете нужный сертификат, указываете пароль на токен и исходный файл. Затем этот файл конвертируем в PEM командой:

openssl pkcs12 -in p12.pfx -out provider.pem -nodes -clcerts

где p12.pfx наш файл из винды.
Отдельно следует  упомянуть о версии openssl, если вы как я ещё пользуетесь Ubuntu 10.04, то вам придётся собрать более новую версию чем та, что есть в репозитории. Я собирал последнюю на данный момент 1.0.1e которую можно скачать с официального сайта http://www.openssl.org/source/. На всякий случай установил в отдельную папку как показано во второй ссылке а именно в /gost-ssl
Но сначала:

sudo apt-get install zlib1g-dev

sudo mkdir /gost-ssl
cd /gost-ssl
sudo wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar xzf openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
./config shared zlib enable-rfc3779 --prefix=/gost-ssl
make depend
make
make test
make install

Правим конфиг

sudo nano /gost-ssl/ssl/openssl.cnf

В самое начало файла добавляем:

openssl_conf = openssl_def

А в самый конец:

[openssl_def]
engines=engine_section

[engine_section]
gost=gost_section

[gost_section]
engine_id=gost
default_algorithms=ALL

Проверяем:

/gost-ssl/bin/openssl ciphers | tr ":" "\n" | grep GOST

Если вывод пуст, значит что то не так.
Теперь важно запомнить, что пользоваться мы будем самосборным openssl и поэтому необходимо указывать полный путь до него.
Проверим наш сертификат, который мы вытянули из винды

/gost-ssl/bin/openssl pkcs12 -in <сертификат> -nodes

Если ошибок не возникло, движемся дальше, конвертуруем в PEM

/gost-ssl/bin/openssl pkcs12 -in <сертификат в pkcs12> -out provider.pem -nodes -clcerts

Теперь у нас есть PEM, и можно считать, что полдела сделано.
Создаём файл запроса (в XML), который мы будем отправлять на zapret.gov.ru. Создавать нужно в кодировке cp-1251, лично я создавал  в geany с указанием кодировки, но можно создать и в nano  и потом сконвертировать из utf-8 в cp-1251

/usr/bin/iconv -f UTF8 -t WINDOWS-1251 <исходный файл в utf> -o < файл в cp1251>

Итак содержимое файла должно быть таким:

2012-01-01T01:01:01.000+04:00
Наименование оператора
1234567890
1234567890123
email@email.ru

Сохраним его как request.xml,  и теперь подпишем его с отсоединённой подписью командой:

/gost-ssl/bin/openssl smime -sign -binary -in request.xml -out request.xml.sign -signer provider.pem -outform PEM

Перед отправкой стоит проверить, что у нас получилось, это можно сделать здесь, следует выбрать пункт "— электронного документа. ЭП — отсоединенная, в формате PKCS#7"
Документом для проверки у нас будет request.xml, а файлом подписи для проверки request.xml.sign. Если проверка прошла успешно то льём эти файлы на http://zapret-info.gov.ru/tooperators/form/ и после нескольких минут сможем насладится списком неугодных сайтов.
Кстати, по этой ссылке, внизу есть так же несколько скриптов для автоматизации процесса отсылки  и получения.

3 комментария :