Показаны сообщения с ярлыком openssl ГОСТ gost МагПро КриптоКом CryptoCom. Показать все сообщения
Показаны сообщения с ярлыком openssl ГОСТ gost МагПро КриптоКом CryptoCom. Показать все сообщения

четверг, 19 июля 2012 г.

openssl, ГОСТ (gost) и мои кривые руки. Часть 3

Все таки (возможно) у меня не совсем кривые руки.
Мне все же удалось сделать тестовое соединение под GOST'ом


После почти недели танцев с бубнами я пришел к следующим выводам:
  • ГОСТ работает через одно место (я это собственно знал давно)
    • ГОСТовые (gost2001) алгоритмы могут хоть как то (адекватно) работать в этой стране только через IE (Windows+ActiveX...), т.к. все разработчики ГОСТовых алгоритмов изначально ориентированы на CAPICOM/CSP.  (я был не прав -- настроить удалось VipNet CSP Win64 + openssl 0.9.8e КриптоКом МагПро)  Применение у клиента JCP это извращение (на мой взгляд) -- виртуальная машина не наш метод -- кто не верит пущай пощупает Eclipse. 
    • Все остальное методы "прозрачного шифрования" (sTunnel+МагПро, SignalCom InetPro и т.п.) --  от лукавого, т.к. это IMHO большущая дырища -- можно подставить еще один "свой" прокси, который может исказить данные. 
    • Адекватных технологий заставить Mozilla, Firefox, Chrome работать не через ssl/tls тунель мне найти не удалось (см. спец сборку Firefox оту КриптоПро  http://cryptopro.ru/downloads разделы "Настройка firefox и thunderbird на Linux для работы с "КриптоПро CSP 3.6"  и "Настройка firefox и thunderbird на Windows для работы с "КриптоПро CSP 3.6""):
      • плагины под каждый браузер.
      • собственный браузер под платформы клиентов.
  • Для того чтобы сделать вменяемый клиент сервер нужно чтобы:
    • с двух сторон стояла криптография (читай CSP/JCP) _одного_ (заявлено что это не так, но мне так почему то очень кажется) производителя (я был не прав -- настроить удалось VipNet CSP Win64 + openssl 0.9.8e КриптоКом МагПро).
    • либо и клиент и сервер должен использовать одну и ту же криптобиблиотеку (это наш случай -- openssl)
    • практически тоже самое sTunnel -- используется и с той и другой стороны openssl для "прозрачной" шифрации.
  • Все что есть CSP (CryptoPro, LISSI, VipNet все опять же Windows+...) подружить с openssl не удалось => требуется искать MagPro CSP или писать свой CSP.  (я был не прав -- удалось  настроить  VipNet CSP Win64 + openssl 0.9.8e КриптоКом МагПро)
  • Нормальной миграции openssl ГОСТовых ключей/сертификатов в P12/PFX не обнаружено:
    • при попытке импорта GOST P12 под sha1 в Windows/IE получаем ошибку
    • при попытке импорта GOST P12 под GOST R 34.11-94 в Windows/IE получаем ошибку
Есть шанс еще пощупать утилиту http://cryptopro.ru/downloads "Утилита устранения ошибки о неправильном пароле на контейнер для КриптоПро CSP 3.6 R2" http://cryptopro.ru/sites/default/files/public/repair_cont.exe, но я в это не сильно верю
    • при попытке импорта GOST P12 под sha1 или под GOST R 34.11-94 в Firefox получаем одну и ту же ошибку:
  • Запустить nginx win32 1.3.3 под ssl/tls+GOST удалось
    • Версия под Win32 собрана жестко под 0.9.8 и при подкладывании 1.0.1 разваливается при том что даже в лог-файлы ничего не пишет -- пришлось подложить МагПро 0.9.8e
    • подкладывание RSA ключей
nginx.conf:
    server {
        listen       443;
        server_name  localhost;

        ssl                  on;
        ssl_certificate      ../keys/usualplat_ca_root.cer;
        ssl_certificate_key  ../keys/usualplat_ca_root.pem; # самоподписанные ключи RSA

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

        location / {
            root   html;
            index  index.html index.htm;
        }

все OK -- IE, Chrome, Firefox соединяются нормально:

  • подкладывание GOST ключей

    # HTTPS server
    #

    server {
        listen       443;
        server_name  localhost;


        ssl                  on;
        ssl_certificate      ../keys/superplat_localhost.cer;
        ssl_certificate_key  ../keys/superplat_localhost.pem;


        ssl_session_timeout  5m;


        ssl_protocols  SSLv2 SSLv3 TLSv1;
#        ssl_ciphers  GOST2001-GOST89-GOST89:GOST2001-NULL-GOST94;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;


        location / {
            root   html;
            index  index.html index.htm;
        }
Chrome, Firefox соединяются c ошибкой криптографии:



IE используя VipNet CSP -- OK: 




Правда мне пришлось руками импортировать .CER от SuperPlat CA Root ;)
Файл .CER под GOST'ом был схомячен Windows'ом в отличии от .P12 без проблем.

четверг, 12 июля 2012 г.

openssl, ГОСТ (gost) и мои кривые руки

Сразу забегая вперед расскажу, что с грехом пополам настроил...


Решил я проверить, а как будет работать nginx с шифрацией по ГОСТу.

Открываем http://www.cryptocom.ru/docs/cryptopacket-libssl.pdf и смотрим

Для алгоритмов ГОСТ существуют четыре шифрсьюта GOST2001-GOST89-GOST89;
GOST2001-NULL-GOST94; GOST94-GOST89-GOST89; GOST94-NULL-GOST94.
После 31 декабря 2007 года шифрсьюты GOST94-GOST89-GOST89 и GOST94-NULLGOST94 использоваться не должны.


Ну ладно. Качаем 3(!) дистрибьютива openssl в каждом из которых заявлена поддержка ГОСТа
1) openssl 0.9.8x -- сам ошибся -- он не поддерживает ГОСТ. Поддержка началась только с 1.0.0, до этого были неофициальные патчи от КриптоКом.
2) openssl 1.0.1с
http://slproweb.com/download/Win32OpenSSL-1_0_1c.exe 18 405 907
3) openssl 0.9.8e МагПро
http://www.cryptocom.ru/binary/MagPro_CryptoPack/Windows/cryptopack-trial.exe  1 751 049


А теперь протестируем поддержку ГОСТа:

C:\openssl\bin>openssl.exe ciphers

И что мы видем?

openssl 0.9.8e МагПро

DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DES-CBC3-MD5:DHE-RSA-AES128-SHA:DHE-DSS-AES128-
SHA:AES128-SHA:IDEA-CBC-SHA:IDEA-CBC-MD5:RC2-CBC-MD5:RC4-SHA:RC4-MD5:RC4-MD5:RC4-64-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:DES-CBC-MD5
:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC2-CBC-MD5:EXP-RC4-MD5:EXP-RC4-MD5

openssl 1.0.1с


ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA
:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RS
A-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256
-SHA384:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA:PSK-AES256-CBC-SH
A:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:SRP-DSS-3DES-EDE-CBC-SHA:SRP-RSA-3DES-EDE-CBC-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:ECDH-RSA-
DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA:PSK-3DES-EDE-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA25
6:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS-AES-128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:DHE-DSS-AES128-GCM-SHA256:DHE-R
SA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-RSA-SEED-SHA:DHE-DSS-SEED-SHA:DHE-RSA-CAMELL
IA128-SHA:DHE-DSS-CAMELLIA128-SHA:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES1
28-SHA:ECDH-ECDSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:SEED-SHA:CAMELLIA128-SHA:IDEA-CBC-SHA:PSK-AES128-CBC-SHA:ECDHE-RSA-RC4-SHA:ECDH
E-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:PSK-RC4-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC
-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5

Вот и верь после этого людям :(

Продолжение №2


Запускаю на тестовой машине (виртуальная машина под VirtualBox Windows XP SP2) и что же я вижу:

GOST2001-GOST89-GOST89:GOST94-GOST89-GOST89:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-D
ES-CBC3-SHA:DES-CBC3-SHA:DES-CBC3-MD5:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:IDEA-CBC-SHA:IDEA-CBC-MD5:RC2-CBC-MD
5:RC4-SHA:RC4-MD5:RC4-MD5:RC4-64-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:DES-CBC-MD5:EXP-EDH-RSA-DES-CBC-SH
A:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC2-CBC-MD5:EXP-RC4-MD5:EXP-RC4-MD5


Ok. ГОСТ есть на тестовой машине под openssl 0.9.8e МагПро, а тот же openssl 0.9.8e МагПро на Windows7 не предложил ГОСТы?
Будем разбираться...

Продолжение №3

Смотрим в ENV (команда set в командпромпте)
WinXP -- все тихо
Win7 -- есть странная переменная
OPENSSL_CONF=C:\OpenSSL\bin\openssl.cfg
обратите внимание на расширение!


openssl 0.9.8e МагПро высасывает конфигурацию по умолчанию из файла openssl.cnf
который должен лежать в директории c:\openssl\, а не c:\openssl\bin\


Вот в этом то собака и порылась!!!
Причиной тому послужило попеременная установка импортного openssl 1.0.1c и отечественного МагПро.
Будьте внимательно, что и куда суют инсталляторы!


Для того чтобы openssl 0.9.8e МагПро показал ГОСТы нужно чтобы было в конфиге

[ openssl_def ]
engines = engine_section
[ engine_section ]
gost=gost_section
[gost_section]
default_algorithms=ALL
engine_id=gost

после чего наблюдаем родные ГОСТы:

GOST2001-GOST89-GOST89:GOST94-GOST89-GOST89:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DES
-CBC3-MD5:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:IDEA-CBC-SHA:IDEA-CBC-MD5:RC2-CBC-MD5:RC4-SHA:RC4-MD5:RC4-MD5:RC4-64-MD5:EDH-RSA-DES-CBC-SHA
:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:DES-CBC-MD5:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC2-CBC-MD5:EXP-RC4-MD
5:EXP-RC4-MD5


Теперь начинаем приучать openssl 1.0.1с к ГОСТу.

и далее по тексту

Вставляем в начале
openssl_conf = openssl_def

и вставляем в конце (тоже самое, что и было в 0.9.8e)
[ openssl_def ]
engines = engine_section
[ engine_section ]
gost=gost_section
[gost_section]
default_algorithms=ALL
engine_id=gost

и получаем ошибку
C:\OpenSSL\bin>openssl.exe ciphers > ciphers4
Error configuring OpenSSL
4020:error:25078067:DSO support routines:WIN32_LOAD:could not load the shared library:.\crypto\dso\dso_win32.c:180:filename(\usr\local\ssl\lib\engines\
gost.dll)
4020:error:25070067:DSO support routines:DSO_load:could not load the shared library:.\crypto\dso\dso_lib.c:244:
4020:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:.\crypto\engine\eng_dyn.c:450:
4020:error:2606A074:engine routines:ENGINE_by_id:no such engine:.\crypto\engine\eng_list.c:417:id=gost
4020:error:260BC066:engine routines:INT_ENGINE_CONFIGURE:engine configuration error:.\crypto\engine\eng_cnf.c:204:section=gost_section, name=default_al
gorithms, value=ALL
4020:error:0E07606D:configuration file routines:MODULE_RUN:module initialization error:.\crypto\conf\conf_mod.c:235:module=engines, value=engine_sectio
n, retcode=-1

После чего кладем C:\OpenSSL\bin\gost.dll  в директорию C:\OpenSSL\lib\engines\ (директорию еще нужно создать)
И получаем то же самое, только сбоку!!!

Внимательно читаем и видим, что нужно добавить еще две строки
[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
default_algorithms = ALL
dynamic_path = /usr/local/lib/engines/libgost.so
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet

И получаем то же самое, только сбоку!!!
После получаса борьбы выяснилось, что если поставить dynamic_path выше на одну строчку (редкостный БРЕД!!!!!!!!!!!!!!!!!), то все заработает.

[gost_section]
engine_id=gost
dynamic_path = C:/OpenSSL/lib/engines/gost.dll 
default_algorithms=ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet



C:\OpenSSL\bin>openssl.exe ciphers
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA
:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RS
A-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:GOST2001-GOST89-GOST89:GOST94-GOST89-GOST89:ECDH-RSA-AES256-GCM-SHA384:
ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:
AES256-SHA:CAMELLIA256-SHA:PSK-AES256-CBC-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:SRP-DSS-3DES-EDE-CBC-SHA:SRP-RSA-3DES-EDE-CBC-SHA:EDH-RSA
-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA:PSK-3DES-EDE-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-EC
DSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS-AES-128-CBC-SHA:SRP-RSA-AES
-128-CBC-SHA:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-
RSA-SEED-SHA:DHE-DSS-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-S
HA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA:ECDH-ECDSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:SEED-SHA:CAMELLIA128-SHA:IDEA-CBC-S
HA:PSK-AES128-CBC-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:PSK-RC4-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS
-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5