The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Настройка SSL-шифрования между Linux и Microsoft SQL сервером на сертификате Криптопро (ssl mssql linux crypt freetds)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: ssl, mssql, linux, crypt, freetds,  (найти похожие документы)
From: Metaip Newsgroups: email Date: Mon, 20 Oct 2008 17:02:14 +0000 (UTC) Subject: Настройка SSL-шифрования между Linux и Microsoft SQL сервером на сертификате Криптопро Задача следующая - настроить шифрование трафика между mssql клиентом на линуксе и mssql сервером (на винде естественно). Ничего сложного в этом нет, если бы не одно НО - mssql сервер находится в государственном учреждении и, следовательно, на сервере можно использовать только разрешенные в государстве программы и алгоритмы шифрования по ГОСТ. Stunnel, OpenVPN и подобное не разрешены. Короче - шифрование на криптопро и никакого "левого" софта. Программа криптопро для многих гос. учреждений является неким де-факто и для "местных безопасников" слова шифрование и криптопро практически однокоренные. В качестве mssql клиента на linux берется freetds. Может есть и другие, но больше ничего не нашел. Для реализации алгоритмов ГОСТ на линуксе берем openssl версии 0.9.9. Данная версия еще в разработке, поэтому придется брать последний snapshot. Почему не стабильную 0.9.8? Потому что там нет алгоритмов ГОСТ. Хочется отдельно поблагодарить компанию "Криптоком", которая заморочилась и написала поддержку алгоритмов ГОСТ в openssl, а также помогала мне разбираться с FreeTDS. Итак, по шагам. Сначала работа с windows. 1. Необходимо сгенерировать сертификат для sql сервера и включить в его (sql сервера) настройках "Force encryption". Подробно останавливаться здесь не имеет смысла, в интернете много статей на эту тему (например, здесь), повторяться не буду. Единственно напомню, что обязательно необходимо выполнить 3 условия: * "Имя" (CN) должно совпадать с именем сервера; * Назначение - "сертификат проверки подлинности сервера"; * поставить галку на "Использовать локальное хранилище компьютера". Если не выполнить первые 2 условия, то sql сервер не увидит сертификат, а если не выполнить 3, то не запустится. Остальные поля по усмотрению. Естественно крипто-провайдером центра сертификации должен быть криптопро и на sql сервере должен быть установлен криптопро. С windows закончили. Теперь самое интересное - линукс. 2. Качаем, распаковываем, компилируем последний snapshot openssl. Например: ./config shared --prefix=/usr/local/sslgost make install 3. Читаем секцию "CONFIGURATION FILE" в файле <source-openssl>/engines/ccgost/README.gost. Выполняем то, что нам советуют. 4. Для проверки поддержки openssl алгоритмов ГОСТ выполним команду: ~ $ /usr/local/sslgost/bin/openssl ciphers | tr -t ":" "\\n" | sort | grep GOST GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89 Вот они... родные :) 5. Качаем и распаковываем FreeTDS. Переходим в директорию <source-freetds>/src/tds. В файле net.c находим строку "#define OPENSSL_CIPHERS". В конец этого дэфайна добавляем строковую константу "GOST2001_GOST89_GOST89". Получается вот так: 6. В этом же файле (net.c) ищем функцию tds_init_openssl. В ней перед(!) SSL_library_init вставляем OPENSSL_config(NULL);. Получается вот так: 7. Компилируем и ставим freetds. Не забываем скрипту configure задать параметр --with-openssl=/usr/local/sslgost. 8. Добавляем в freetds.conf секцию нашего sql сервера. Версия обязательно 8, только она поддерживает шифрование. [mssqlserver] host = < ip mssqlserver > port = 1433 tds version = 8.0 9. Ну и делаем sql запрос. Должно вернуть имя сервера. echo "SELECT @@servername" | bsqldb -U < user > -P < pass > -S mssqlserver -D < some_db > 10. Проверить шифруется или нет можно с помощью сниффера. SSL без SSL 11. Если интересно, то можно просмотреть сертификат sql сервера с помощью openssl. Для этого на windows экспортируем сертификат в файл и подсовываем этот файл openssl. Вот отрывки моего сертификата: /usr/local/sslgost/openssl x509 -in mssql_cert.pem -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 14:8c:e4:e4:00:00:00:00:00:0b Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001 Issuer: Validity Not Before: Oct 8 06:55:00 2008 GMT Not After : Oct 8 07:05:00 2009 GMT Subject: Subject Public Key Info: Public Key Algorithm: GOST R 34.10-2001 Public key: X:23EF2D25DC54A3CF7398365C5C69CAE8A8A0FD9A7733AD7A94EC218E638F5C Y:A6FDBB1E66325E2DEF686111299CDB062F7C162144A43F667E8B7EA7E802EB79 Parameter set: id-GostR3410-2001-CryptoPro-XchA-ParamSet X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Key Identifier: 33:5F:DC:8E:7D:0A:35:B2:CD:4F:43:84:2F:38:1F:33:1D:0C:1E:2E X509v3 Authority Key Identifier: keyid:72:C0:52:63:70:EF:04:46:2E:A8:B7:59:3A:A4:06:C2:83:26:FA:53 DirName:/emailAddress= serial:23:D9:0B:EB:AE:57:B1:83:4D:A8:1D:65:AB:65:D4:D5 X509v3 CRL Distribution Points: Full Name: Full Name: Authority Information Access: CA Issuers - URI:http:// CA Issuers - URI:file:// Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001 e1:55:ee:0a:09:dc:fa:14:f2:d8:dd:d2:1d:8c:48:c1:9e:27: 2f:82:d8:5f:a8:72:1e:1d:9e:6b:ad:c6:60:ac:88:0a:a0:60: 02:ed:74:c5:04:47:b2:f5:20:b1:31:5b:2b:c1:74:f3:8b:d1: 9b:6c:ba:79:ac:51:a9:09:fc:ac Линукс лишний раз подтвердил, что он конструктор, из которого можно склепать что угодно.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Leo (??), 14:13, 21/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спаисбо! Очень!

    От себя добавлю, что не обязательно класть имя сервера в CN (правда, это очень распространённая ошибка). Для DNS записей в сертификате есть специальное место (и винда во всех её проявлениях его понимает). Это расширение 2.5.29.17 - Альтернативный сабжект (туда можно много что заносить, не только DNS).
    Выглядит так
    ...
    X509v3 Subject Alternative Name: DNS:cfweb, DNS:10.2.1.44
    ...

     
     
  • 2.2, Andrew Kolchoogin (?), 14:39, 21/10/2008 [^] [^^] [^^^] [ответить]  
  • +/
    > От себя добавлю, что не обязательно класть имя сервера в CN (правда, это очень
    > распространённая ошибка).

    Нет, имя сервера в CN класть все-таки обязательно. :)

    Но не в виде DNS-записи, конечно же, а в виде dc=host,dc=domain,dc=tld. А вот если в сертификат хочется положить host.domain.tld -- тогда и нужно пользовать 2.5.29.17.

     
     
  • 3.3, Leo (??), 15:13, 21/10/2008 [^] [^^] [^^^] [ответить]  
  • +/
    :) Хех.
    Ну, раз уж такие дела...
    Конечно, _можно_ класть имя сервера (заметьте, одно!) в Subject в виде
    dc=host,dc=domain,dc=tld
    Но, повторюсь, _одно_. Остальное - всё туда же, в расширение.

    НО! Где ГОСТ, там и закон! :) А закон гласит о поэкземплярном, персонифицированном учёте.
    А персонификацию, всё-таки, удобно проводить по Subject.
    Т.о. считаю, что лучше сразу заносить DNS в расширение.
    Вот :)

     

  • 1.4, User294 (ok), 20:16, 21/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > OpenVPN и подобное не разрешены.

    Ээээ а если его собрать с новым OpenSSL и заэнфорсить алгоритм шифрования гост, если уж его так хотят?Там cipher который будет юзать SSL можно выбирать AFAIK.Ну и все что сертификатов касается к нему тоже применимо в принципе :)

     
     
  • 2.5, User294 (ok), 21:05, 21/10/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Кстати да, у упомянутого криптокома лежит патч на OpenVPN для тех кому не повезло.
     
  • 2.9, Victor Wagner (?), 12:09, 22/10/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Э, если вы возьмете сертифицированный продукт МагПро КриптоПакет (та же OpenSSL 0.9.8e с поддержкой ГОСТ) и собранный нами бинарник OpenVPN - тогда да, это будет сертифицированное решение. А если пересоберете, и хэш-сумма бинарника будет отличаться от хэш-суммы указанной в формуляре продукта, то это будет несертифицированное решение.
     

  • 1.6, Аноним (6), 00:12, 22/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что за "вставьте после" и "получается вот так", блин? patch и diff для кого сделаны?
     
     
  • 2.7, vitek (??), 02:14, 22/10/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >Что за "вставьте после" и "получается вот так", блин? patch и diff
    >для кого сделаны?

    и то правда! и зачем вообще статья?.. исхоников что ли не хватает? :-D
    ...
    автору - спасибо.

     
  • 2.11, Victor Wagner (?), 12:18, 22/10/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >Что за "вставьте после" и "получается вот так", блин? patch и diff
    >для кого сделаны?

    Когда написано как написано, то несколько проще понять, что именно сделано и почему. А если понять, то этот же алгоритм можно применить к любому другому продукту, использующему OpenSSL.

    Собственно, есть два основных условия, после которых с ГОСТ начинает работать любой OpenSSL-enabled продукт:
    1. Подгружается engine, реализующая ГОСТ (либо через зачитывание openssl.cnf вызовом OPENSSL_config(NULL), либо если продукт имеет собственные средства работы с engine, то через них. Тогда надо еще убедиться что  он вызывает ENGINE_set_default(e,ENGINE_METHOD_ALL)). Обратите внимание, что engine  должна быть загружена до SSL_library_init. Поскольку иначе SSL_library_init не найдет доступных реализаций алгоритмов ГОСТ и запретит гостовские шифрсьюты.

    2. В списке разрешенных шифрсьютов, задаваемых SSL_set_cipher_list лии SSL_CTX_set_cipher_list присутствует GOST2001-GOST89-GOST89. (в случае патченной OpenSSL 0.9.8 должны еще быть явно запрещены шифрсьюты с DSA, поскольку они конфликтуют. В 0.9.9 этой проблемы нет)

    Есть еще третье условие - для загрузки секретного ключа (если у нас сервер или если используется клиентский сертификат) не должна использоваться функция
    SSL_use_RSAPrivateKey_file, которая, по очевидным причинам, ключи ГОСТ грузить не умеет.
    Заменить её на более общую SSL_use_PrivateKey_file

     

  • 1.8, 1fyjybv (?), 04:03, 22/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мда. Виндовс в заголовке упомянули - ожидай чего-то нездорового от статьи. Это же надо было додуматься, текст через жпег выкладывать. Ну, и про diff уже сказали выше. Да уж, трамвай обходи спереди, автобус сзади, в венду стороной.

     
  • 1.10, Heckfy (ok), 12:14, 22/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я пользуюсь другим клиентом - squish:
           Sqsh (pronounced skwish) is short for SQshelL (pronounced s-q-shell), and is intended as a replacement for the venerable ‘isql’ program supplied by Sybase.  It came about due to years of frustration of trying to do real work with a program that was never meant to perform real work.

           Sqsh is much more than a nice prompt, it is intended to provide much of the functionality provided by a good shell, such as variables, aliasing, redirection, pipes, back-grounding, job control, history, command substitution, and dynamic configuration.  Also, as a by-product of the design, it is remarkably easy to extend and add functionality.

    Мне хватает. Бабушке не хватает, а мне хватает. :)

     
  • 1.12, Сергей (??), 00:42, 01/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Объясните, плиз, новичку, что значит
    Читаем секцию "CONFIGURATION FILE" в файле
       <source-openssl>/engines/ccgost/README.gost. Выполняем то, что нам
       советуют.?
    Я прочитал - ничего не понял
     
  • 1.13, cm (??), 20:24, 21/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    статья была бы полной, если б приведен был кусок конфига, который необходимо вставить для работы GOST. а без него ... README.gost ничего особо из себя не представляет
     
     
  • 2.14, ЫМЫ (?), 09:36, 13/10/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Для не осиливших README gost openssl_conf openssl_def CRL_URI http localhos... большой текст свёрнут, показать
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру