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

CSP -- откуда качать


http://www.infotecs.ru/downloads/product_full.php?id_product=2096
ViPNet CSP ОАО «ИнфоТеКС»


Бесплатно СЕРТИФИЦИРОВАННОЕ решениие! Но требует регистрацию на КАЖДУЮ машину. Вы им (в Инфотекс) код машины -- они обратно (в режиме онлайн при подключении к инету, по почте или по телефону) код активации.
Остается три вопроса:
1) Что делать когда они прекратят активировать пользовательские лицензии?
2) Как получить заверенную копию сертификата ФСБ?
3) Что произойдет, если я попытаюсь активировать 10.000 экземпляров CSP?

http://www.lissi.ru/free_distribs/
http://www.lissi-crypto.ru/free_distribs/download_lissi_csp/

ЛИССИ-CSP ООО "ЛИССИ-Крипто"  до попытки рейдерского захвата (с их слов) Компания "ЛИССИ"


Бесплатно на 30 дней

http://www.cryptopro.ru/products/csp/csp-3-6
 КРИПТО-ПРО

Бесплатно на 30 дней
Требуется сначала регистрация на сайте для скачивания демо версий




http://www.cryptocom.ru/download/demo.html
 ООО "Криптоком".
Найти "в живую" CSP не удалось, хотя в инете есть сообщения о версии 2.0 и даже 3.0.







http://habrahabr.ru/post/134037/
http://www.rsdn.ru/article/crypto/cspsecrets.xml
Или пишем собственный CSP

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 R2http://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 без проблем.

SSL и иже с ними -- интересные ссылки

Simple the best:

Играем с протоколом SSL на низком уровне


http://www.inattack.ru/article/igraem-s-protokolom-ssl-na-nizkom-urovne/543.html#.UAhb87SdDyA


Использование OpenSource крипто библиотек для работы с ГОСТовыми сертификатами CryptoPro


http://grigory-panov.blogspot.com/2012/06/opensource-cryptopro.html

Все версии КриптоПро можно скачать здесь
http://tolik898.blogspot.com/2012/06/blog-post.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Tolik898+%28tolik898%29




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

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

После того, как мне удалось с грехом пополам водрузить openssl+GOST перешел к самому главному: сгенерировать пару ключ+сертификат.


А как? Документация как факт отсутствует.


После долгих поисков (быстро я наткнулся на генерацию ключа через ruToken) наткнулся на документ
http://cvs.openssl.org/fileview?f=openssl/engines/ccgost/README.gost&r=HEAD
В нем в явном виде ПРАВИЛЬНО показано (как собственно методом проб и ошибок я достиг самостоятельно), как настраивать openssl.conf
При том что в http://www.cryptocom.ru/products/openssl-1-config-ru.html в явном виде допущена ошибка к приводящая к тому что openssl работать не будет. Что же творится на белом свете?!

Так вот, в этом документе без объяснений описано как создавать ключь и сертификат по ГОСТу:
openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -out seckey.pem


Ну что? Будем пытаться и пробовать :) 

---8<---

md ca_root_private
md ca_root_public


C:\openssl\bin\openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -out ca_root_private/superplat_ca_root.pem
C:\openssl\bin\openssl req -new -x509 -days 99999 -key ca_root_private/superplat_ca_root.pem -out ca_root_public/superplat_ca_root.cer -subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat CA/CN=SuperPlat CA Root"
C:\openssl\bin\openssl pkcs12 -export -inkey ca_root_private/superplat_ca_root.pem -in ca_root_public/superplat_ca_root.cer -keypbe gost89 -certpbe gost89 -macalg md_gost94 -out ca_root_private/superplat_ca_root.p12 -passout pass:654321
---8<---




---8<---


set CA_num=01


md ca_%CA_num%_private
md ca_%CA_num%_public


C:\openssl\bin\openssl.exe req -newkey gost2001 -pkeyopt paramset:A -keyout ca_%CA_num%_private/superplat_ca_%CA_num%.pem -nodes -out ca_%CA_num%_public/superplat_ca_%CA_num%.csr -subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat CA/CN=SuperPlat CA %CA_num%"
C:\openssl\bin\openssl ca -policy policy_anything -days 365 -keyfile ca_root_private/superplat_ca_root.pem -cert ca_root_public/superplat_ca_root.cer -in ca_%CA_num%_public/superplat_ca_%CA_num%.csr -out ca_%CA_num%_public/superplat_ca_%CA_num%.cer
C:\openssl\bin\openssl pkcs12 -export -inkey ca_%CA_num%_private/superplat_ca_%CA_num%.pem -in ca_%CA_num%_public/superplat_ca_%CA_num%.cer -keypbe gost89 -certpbe gost89 -macalg md_gost94 -out ca_%CA_num%_private/superplat_ca_%CA_num%.p12 -passout pass:654321
---8<---






---8<---


set CA_num=01


set TermNum=0000001
set CertName=SuperTerm%TermNum%


md clients_private
md clients_public


C:\openssl\bin\openssl.exe req -newkey gost2001 -pkeyopt paramset:A -keyout clients_private/%CertName%.pem -nodes -out clients_public/%CertName%.csr -subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat Terminals/CN=%CertName%"
C:\openssl\bin\openssl ca -policy policy_anything -days 365 -keyfile ca_%CA_num%_private/superplat_ca_%CA_num%.pem -cert ca_%CA_num%_public/superplat_ca_%CA_num%.cer -in clients_public/%CertName%.csr -out clients_public/%CertName%.cer
C:\openssl\bin\openssl pkcs12 -export -inkey clients_private/%CertName%.pem -in clients_public/%CertName%.cer -keypbe gost89 -certpbe gost89 -macalg md_gost94 -out clients_private/%CertName%.p12 -passout pass:654321
---8<---




Ключи то получили... но.... как всегда грабли.
Как засунуть теперь p12 в Windows?
Пойду искать CSP, который сможет корректно прожевать p12 GOST, который был сформирован openssl



PS:
Вот эти команды НЕ работают на 0.9.8e МагПро, а только на 1.0.1c.
Как следствие, что будем делать с последующей сертификацией я даже и не представляю :(((





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

понедельник, 9 июля 2012 г.

Ключи с помощью OpenSSL, OpenSSL CA


Этап 0:

Мне не удалось насладиться openssl без правленного конфигурационного файла.
А именно:
####################################################################
[ ca ]
default_ca = CA_default # The default ca section


####################################################################
[ CA_default ]


dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = F:/OmniPlat/SSLkeys/ca_internal/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = F:/OmniPlat/SSLkeys/ca_internal # default place for new certs.


certificate = F:/OmniPlat/SSLkeys/ca_public/omniplat_ca.cer # The CA certificate
serial = F:/OmniPlat/SSLkeys/ca_internal/serial # The current serial number
crlnumber = F:/OmniPlat/SSLkeys/ca_internal/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = F:/OmniPlat/SSLkeys/ca_private/omniplat_ca.key # The private key
RANDFILE = $dir/private/.rand # private random number file


Этап 1:

@rem ## Выпустим собственный CA сертификат, 


@rem ### для этого, получим private-ключ для нашего CA сертификата. Это можно сделать выполнив команду:
C:\openssl\bin\openssl genrsa -out ca_private/omniplat_ca00.key 1024
attrib +R ca_private/omniplat_ca00.key


@rem ### После чего, создадим CA сертификат, выполнив команду:
C:\openssl\bin\openssl req -new -x509 -days 365 -key ca_private/omniplat_ca00.key -out ca_public/omniplat_ca00.cer -subj "/C=RU/ST=Russia/L=Moscow/O=OmniPlat/OU=OmniPlat CA/CN=OmniPlat CA Root"


@rem ### Сделаем экспорт в PKCS12, упаковав приватный ключ и сам CA сертификат:
C:\openssl\bin\openssl pkcs12 -export -in ca_public/Superplat_ca00.cer -inkey ca_private/Superplat_ca00.key -passout pass:654321 -out ca_private/Superplat_ca00.p12


@rem ### Здесь же создадим список отозванных сертификатов для CA сертификата:
C:\openssl\bin\openssl ca -gencrl -out ca_public/Superplat_ca00.crl

Этап 2:

set TermNum=0000000
set CertName=SuperTerm%TermNum%


@rem ###########################################################################################################################################
@rem ### 4. Наш CA сертификат готов, теперь мы можем приступить к выпуску дочернего SSL сертификата, для этого сделаем запрос на SSL сертификат:
C:\openssl\bin\openssl.exe req -new -newkey rsa:1024 -keyout client_private/%CertName%.key -nodes -out client_public/ToCA_%CertName%.csr -subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat Terminals/CN=%CertName%"


@rem ### 5. Подтвердим запрос на сертификат нашим CA сертификатом (подпишим серификат нашим CA сертификатом):
@rem ##openssl ca -policy policy_any -config openssl.conf -in csr/%CertName%.csr -days 360 -out cer/test.cer
@rem # C:\openssl\bin\openssl ca -policy policy_any -in csr/test.csr -days 360 -out cer/test.cer
@rem # C:\openssl\bin\openssl ca -policy policy_any -keyfile c:\iis\ca.key -cert c:\iis\ca.crt -in csr/test.csr -days 360 -out cer/test.cer
C:\openssl\bin\openssl ca -policy policy_anything -keyfile ca_private/Superplat_ca.key -cert ca_public/Superplat_ca.cer -in client_public/ToCA_%CertName%.csr -days 360 -out client_public/FromCA_%CertName%.cer


@rem ### Сделаем экспорт в PKCS12 полученного SSL сертификата:
@rem ##openssl pkcs12 -export -out p12/test.p12 -in cer/test.cer -inkey key/test.key
C:\openssl\bin\openssl pkcs12 -export -passout pass:654321 -out client_private/%CertName%.p12 -in client_public/FromCA_%CertName%.cer -inkey client_private/%CertName%.key

Этап 3:

Просто кликаем на файлах
...\client_public\FromCA_SuperTerm0000000.cer 
...\client_private\SuperTerm0000000.p12 

Этап 4:

start Certmgr
или
start mmc


Обратите внимание на расширения:

*.key

Текстовый файл

-----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQDJG2mmxGKxttH5xSpbCGbDfE1np4rSIlG22j5ukoP/Bmhs8g1T
...
2WJwCTUKJ6x7xexS7ubulQ0YjiBRLVu7YpbHc5yabONC+OY=
-----END RSA PRIVATE KEY-----
Это собственно приватный ключ -- он секретен и его нужно хранить под семью замками.
Файл не содержит описание ключа.
Как следствие каждый сгенеренный сертификат к приватному ключу может иметь свое собственное описание ключа.

*.cer (иногда называются *.pem, еще реже *.crt, еще реже *.der)

Текстовый файл. Содержит публичный ключ+описание ключа.
Посмотреть на него можно 
c:\openssl\bin\openssl x509 -in <имя файла>.cer -noout -text > 1

Как не странно, принято называть "публичный сертификат" не зависимо от того, реально ли "сертифицирован" удостоверяющим центром или нет.
Если же подтвержден, то расширение остается прежним.

Если смотреть в http://en.wikipedia.org/wiki/X.509, то все наоборот
  • .pem - (Privacy Enhanced MailBase64 encoded DER certificate, enclosed between "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----"
  • .cer.crt.der - usually in binary DER form, but Base64-encoded certificates are common too (see .pem above)




Пример публичного сертификата

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            f7:2b:ac:56:b3:64:b2:d4
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=CA, CN=SuperPlat CA
        Validity
            Not Before: Jul  4 10:51:59 2012 GMT
            Not After : Jul  4 10:51:59 2013 GMT
        Subject: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=CA, CN=SuperPlat CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:c9:1b:69:a6:c4:62:b1:b6:d1:f9:c5:2a:5b:08:
                    66:c3:7c:4d:67:a7:8a:d2:22:51:b6:da:3e:6e:92:
                    83:ff:06:68:6c:f2:0d:53:80:f7:1c:37:fb:56:72:
                    38:f3:e1:ee:da:9f:97:9c:42:d0:43:db:a4:8f:55:
                    9e:24:48:73:24:3b:ec:96:5c:b4:b1:31:7c:a9:ff:
                    69:42:e1:3e:c7:33:75:2a:9d:45:b2:17:24:1d:35:
                    56:b3:69:e0:ea:c1:ca:cf:d7:50:de:88:fa:e0:0b:
                    e2:df:ff:d0:30:8f:6f:e3:fc:4e:a3:d7:01:c2:c0:
                    1a:68:35:b6:1c:f2:18:4c:8d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                89:62:A4:9A:CD:78:A9:C5:BF:27:F7:33:C5:13:D4:21:5D:0A:A9:41
            X509v3 Authority Key Identifier: 
                keyid:89:62:A4:9A:CD:78:A9:C5:BF:27:F7:33:C5:13:D4:21:5D:0A:A9:41
                DirName:/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=CA/CN=SuperPlat CA
                serial:F7:2B:AC:56:B3:64:B2:D4

            X509v3 Basic Constraints: 
                CA:TRUE
    Signature Algorithm: sha1WithRSAEncryption
        75:64:af:ad:53:8f:58:79:ae:60:47:e4:64:8c:cc:82:00:6b:
        76:00:c1:fc:6e:7f:dc:f0:89:13:d1:47:16:67:17:5e:f8:c4:
        29:86:10:4c:69:38:38:c4:42:24:c4:be:72:8e:62:e5:e2:89:
        b0:5c:66:4b:23:fd:32:07:43:d4:60:e1:95:13:3f:31:65:67:
        74:4a:01:12:bb:45:b7:cc:65:38:2d:06:89:07:82:1e:34:de:
        f2:f7:59:a1:35:13:4c:5b:ba:cd:52:c5:be:74:a9:98:b4:63:
        1d:31:cb:d7:13:ff:23:ad:a4:74:34:0c:cc:5b:74:16:b8:ff:
        f6:64

Пример публичного сертификата, который был удостоверен удостоверящим центром

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4 (0x4)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=CA, CN=SuperPlat CA
        Validity
            Not Before: Jul  4 11:11:04 2012 GMT
            Not After : Jun 29 11:11:04 2013 GMT
        Subject: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat Terminals, CN=SuperTerm0000000
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:b9:14:fa:dd:58:99:ec:87:4c:7e:55:14:df:da:
                    79:f5:45:d0:fd:a2:27:98:72:86:04:26:10:71:c4:
                    32:bc:4f:80:8b:24:02:e7:8a:eb:5c:ea:4a:2e:c6:
                    eb:a0:2e:dd:62:5e:b8:0c:42:b4:08:b7:c9:4e:a4:
                    15:ca:66:3d:2b:7b:47:88:26:fb:99:70:a3:98:c3:
                    7c:6f:28:00:ec:f2:15:6e:1e:cb:bf:2c:89:73:e7:
                    82:28:e6:ae:6e:c4:4a:29:d4:f3:5d:43:58:f6:f0:
                    b9:a9:27:a9:3d:d5:bc:31:79:db:fd:bf:0b:ea:b9:
                    8f:37:ca:31:c7:8b:08:1d:1f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                1F:C6:C4:C2:86:67:B4:90:0F:79:E0:BD:6F:E2:95:C6:4D:04:6B:7F
            X509v3 Authority Key Identifier: 
                keyid:89:62:A4:9A:CD:78:A9:C5:BF:27:F7:33:C5:13:D4:21:5D:0A:A9:41

    Signature Algorithm: sha1WithRSAEncryption
        01:7e:64:92:e4:dd:d1:b9:57:0b:dc:72:86:f3:41:eb:18:db:
        28:cc:96:1d:e5:75:37:51:f6:db:a5:f7:4d:c4:ae:18:b3:68:
        b7:6a:dc:1b:82:ef:81:2e:f8:31:fb:55:8c:41:d4:58:98:62:
        f1:05:cc:41:98:56:fa:98:f9:84:c9:7d:f7:cc:19:00:5b:47:
        ad:be:b1:09:23:4f:e8:31:90:aa:31:ad:e7:83:0d:e9:7e:c3:
        4e:15:33:f6:c4:62:7c:b1:f7:e0:d7:dc:02:59:34:ca:17:4d:
        54:97:66:ea:f2:fd:c0:6b:10:2b:33:71:91:2b:91:ef:b0:fc:
        a1:bc


*.p12 (в Windows может иметь расширение *.pfx)

Бинарный файл - контейнер
Предназначен для хранения как приватных, так и публичных ключей/сертификатов.
Как правило содержит приватный ключ (*.key) и публичный сертификат (*.cer)

*.crl 

Текстовый файл. Содержит запрос к удостверящему центру CA (фактически публичный ключ+описание ключа).
-----BEGIN X509 CRL-----
MIIBPTCBpwIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJSVTEPMA0GA1UE
...
pYdKWJ6m76GqkHOfASM2FJTPFkXgGptqt8PEGm14SDs3
-----END X509 CRL-----





См. также:
http://www.handcode.ru/2010/03/openssl.html
http://citforum.ru/security/cryptography/openssl/
http://www.opennet.ru/openforum/vsluhforumID10/1487.html
http://en.wikipedia.org/wiki/X.509

среда, 4 июля 2012 г.

MinGW + POCO. Часть 2

В очередной раз убеждаюсь что для того чтобы опенсорсовские исходники заработали, необходимо приложить "драчильный напильник".

Скачал пример HTTP сервера на POCO http://poco.roundsquare.net/downloads/HTTPServer.zip
И попытался скомпилировать на QT Creator + MinGW

Получил ошибку
D:/QtSDK/mingw/lib//libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16'


Угрохал 3 часа на выявления причин.

Оказалось что в файле ...\Foundation\include\Poco\Config.h
прописано явно

// Define to enable Windows Unicode (UTF-8) support
#define POCO_WIN32_UTF8

что приводит в ...\Util\include\Poco\Util\ServerApplication.h 
//
// Macro to implement main()
//
#if defined(_WIN32) && defined(POCO_WIN32_UTF8)
#define POCO_SERVER_MAIN(App) \
int wmain(int argc, wchar_t** argv) \
{ \
App app; \
return app.run(argc, argv); \
}
#elif defined(POCO_VXWORKS)
#define POCO_SERVER_MAIN(App) \
int pocoSrvMain(const char* appName, ...) \
{ \
std::vector<std::string> args; \
args.push_back(std::string(appName)); \
va_list vargs; \
va_start(vargs, appName); \
const char* arg = va_arg(vargs, const char*); \
while (arg) \
{ \
args.push_back(std::string(arg)); \
arg = va_arg(vargs, const char*); \
} \
va_end(vargs); \
App app; \
return app.run(args); \
}
#else
#define POCO_SERVER_MAIN(App) \
int main(int argc, char** argv) \
{ \
App app; \
return app.run(argc, argv); \
}
#endif

к формированию через POCO_SERVER_MAIN(...)

функции int wmain(int argc, wchar_t** argv) вместо int main(int argc, char** argv)которую MinGW упорно ожидает увидеть.


Решение проблемы
1) Закомментировать #define POCO_WIN32_UTF8 в Config.h и отключить -DUNICODE
т.к. все равно в ...\Foundation\include\Poco\Platform_WIN32.h стоит взведение POCO_WIN32_UTF8

// Unicode Support
#if defined(UNICODE) && !defined(POCO_WIN32_UTF8)
#define POCO_WIN32_UTF8
#endif
но если первое еще можно пережить, то второе может привести к непредсказуемым последствиям.


2) Резать (вернее вшивать) по живому ...\Util\include\Poco\Util\ServerApplication.h, что я и предлагаю сделать:

//
// Macro to implement main()
//
#if defined(_WIN32) && defined(POCO_WIN32_UTF8) && (!defined(__MINGW__) && !defined(__MINGW32__))
Нужно добавить то, что отмечено зеленым цветом, после чего проект собирается вполне адекватно.




Что есть на рынке

Что есть на рынке среди аналогов


ПО для обслуживания платежных терминалов

  • Cyberplat  https://opensource.cyberplat.com/redmine/wiki/pt
    • отдается  в виде исходников бесплатно, но без поддержки 
    • внедрено в
      • ЗАО "Русский Стандарт" (мигрировался на DPS)
  • eKassir www.ekassir.com
    • есть активные продажи на сторону  
  • ЛИДЕР http://leadermt.ru/
    • не продавалась, только предложения о процессировании
    • внедрено в
      • НКО ЗАО "ЛИДЕР"
      • Балтика
      • НС-Банк (будет мигрироваться на Anyway)
  • Netshift www.netshift.com/
    • активно пытается продаться
    • внедрено в
      • Адмиралтейский (будет мигрироваться на КАЗНА)
  • DPS http://ooodps.ru
    • есть активные продажи на сторону 
    • внедрено в
      • ОАО "Московский Кредитный Банк" (будет мигрироваться на xPlat)
      • ЗАО "Русский Стандарт"
      • ОКЕАН
  • DeltaPay
    • внедрено в 
      • ФИНАМ
  • xPlat
    • есть активные продажи на сторону 
  • ЕРЦ
    • есть активные продажи на сторону 
  • Оранжевый енот (возможно Ciberpay)
    • внедрено в
      • Адмиралтейский (ПЦ вне банка, в настоящее время изнечтожено)
  • Ciberpay
  • e-port
    • внедрено в
      • ЕСГП/Мобил элемент
  • ОСМП/QIWI
    • не продавалась, не продается, не будет продаваться, только предложения о процессировании 
  • STAMP
    • есть активные продажи на сторону 
  • Автосберкасса
  • ФИКОМ
    • активно пытается продаться 
    • внедрено в
      • ИНТЕРПРОГРЕССБАНК
  • СмартКардСервис TellMe
    • внедрено в
      • Юнистрим  (будет мигрироваться на ЕРЦ)
  • КАЗНА
    • внедрено в
      • Адмиралтейский (ПЦ вне банка)
  • Finstream Anyway
    • есть активные продажи на сторону
    • внедрено в
      • Связной
      • Агросоюз
      • НС-Банк

Для обслуживания банковских карт (банкоматы, CashIn, POS-терминалы и т.п.)

Импортные разработки

ACI Base24, Trans24
IFS TPII
RS/2 Bankworks
TietoEnator CardSuite (a.k.a TietoKons a.k.a Transmaster)
TSYS (a.k.a CTL a.k.a CardTech)

Российские разработки:

Максим Казаков & Автобанк ОСТ24 (a.k.a CardX)
Рукард & Автобанк СОФИТ
Openway Way4 (a.k.a OWS, OpenWaySystem)
RS/2 Bankworks 
БПЦ Smartvista
TPII

Compas+ TranzWare
ACI Base24


См. также:

Компиляция примеров POCO в QT Creator + MinGW

Для начала возьмем самое простое -- скомпилируем под  QT Creator+MinGW примеры POCO
(http://pocoproject.org/download/index.html)

Basic Edition
No external dependencies — start developing immediately


poco-1.4.3p1.zip │4176 K


содержит в себе следующие компоненты


║..                                    │readme
║build                                 │version
║contrib                               │
CppUnit                               │
║doc                                   │
Foundation                            │
Net                                   │
║patches                               │
Util                                  │
XML                                   │
║build_CE_vs90.cmd                     │
║build_vcexpress2008.cmd               │
║build_vcexpress2010.cmd               │
║build_vs100.cmd                       │
║build_vs71.cmd                        │
║build_vs80.cmd                        │
║build_vs90.cmd                        │
║buildvms.com                          │
║buildwin.cmd                          │
║changelog                             │
║components                            │
║configure                             │
║contributors                          │
║DLLVersion.rc                         │
║libversion                            │
║license                               │
║Makefile                              │
║manifest                              │
║news                                  │



Professional Edition
Includes additional powerful libraries and tools
Платный, поэтому по определению не интересует


Нас же интересует

Complete Edition
Requires OpenSSL, MySQL Client and ODBC


poco-1.4.3p1-all.zip │7003 K

..                       │libversion
build                    │license
contrib                  │Makefile
CppUnit                  │manifest
Crypto                   │news
Data                     │readme
doc                      │version
Foundation               │
Net                      │
NetSSL_OpenSSL           │
PageCompiler             │
patches                  │
Util                     │
XML                      │
Zip                      │
build_CE_vs90         cmd│
build_vcexpress2008   cmd│
build_vcexpress2010   cmd│
build_vs100           cmd│
build_vs71            cmd│
build_vs80            cmd│
build_vs90            cmd│
buildvms              com│
buildwin              cmd│
changelog                │
components               │
configure                │
contributors             │
DLLVersion            rc │

ГРАБЛИ №1


Как видем из списка файлов дистрибьютив не заточен под компиляцию в  QT Creator+MinGW.
Что же делать? Писать проекты/makefile в ручную?

Обратимся к мировому разуму:
http://gluescript.sourceforge.net/?q=node/22

Похожую проблему народ поборол используя Premake4 (http://industriousone.com/premake/download) и скрипт на lua (http://gluescript.svn.sourceforge.net/viewvc/gluescript/trunk/src/poco.zip?view=log)

Но проблему побороли не до конца и не на той версии POCO и как следствие скрипты оказались не совсем корректными.
Пришлось с бубном и матом, методом проб и ошибок писать свои скрипты: 
http://www.dymovoy.ru/download/premake4_lua_poco-1.4.3p1-all.rar


Потребуется:
http://sourceforge.net/projects/premake/files/Premake/4.3/premake-4.3-windows.zip/download
premake-4.3-windows.zip   │ 90861

в котором лежит
premake4.exe              │261632

и собственно сами новые скрипты lua http://www.dymovoy.ru/download/premake4_lua_poco-1.4.3p1-all.rar

кладем скрипты по директориям а дальше в корневой директории POCO запускаем
C:\premake4\premake4.exe gmake


В результате будут созданы файлы Makefile, которые и будут использоваться для начальной компиляции библиотеки.



ГРАБЛИ №2

Обратите внимание, что стоит в файлах lua
             "WINVER=0x0501",
Это означает что версия ОС у нас не ниже Windows XP.
Это реальный баг MinGW: по умолчанию переменная WINVER=0x0500 и как следствие Windows2000, а MinGW не умеет корректно работать со стеком в Windows2000.

Поэтому компиляцию нужно проводить из батника !build_mingw.bat

@echo off



setlocal

set OPENSSL_DIR=c:\openssl
set OPENSSL_INCLUDE=%OPENSSL_DIR%\include
set OPENSSL_LIB=%OPENSSL_DIR%\lib
set INCLUDE=%INCLUDE%;%OPENSSL_INCLUDE%
set LIB=%LIB%;%OPENSSL_LIB%

set POCO_BASE=%CD%
set PATH=D:\QtSDK\mingw\bin\;%POCO_BASE%\bin;%PATH%

set PLATFORM=Win32


set POCO_OS_FAMILY_WINDOWS=1
set Win32=0x0501
set MINGW32=0x0501
set POCO_VXWORKS=
set _WIN32_WINNT=0x0501


C:\premake4\premake4.exe gmake

mingw32-make.exe config=release
mingw32-make.exe

endlocal

в результате в директории ...\poco\lib\ должны появиться откомпилированные файлы *.a, которые я руками переименовал в *.lib (я это понял уже потом что нужно переименовать -- QT Creator не хотел их добавлять в проект)
libPoco_CppUnit_mt                          lib│216938
libPoco_CppUnit_mtd                         lib│216938
libPoco_Crypto_mt                           lib│382736
libPoco_Crypto_mtd                          lib│389834
libPoco_Data_mt                             lib│1360 K
libPoco_Data_mtd                            lib│1379 K
libPoco_Foundation_mt                       lib│4320 K
libPoco_Foundation_mtd                      lib│4411 K
libPoco_Net_mt                              lib│2791 K
libPoco_Net_mtd                             lib│2841 K
libPoco_NetSSL_mt                           lib│ 984 K
libPoco_NetSSL_mtd                          lib│1000 K
libPoco_PageCompiler_mt                     lib│151998
libPoco_PageCompiler_mtd                    lib│154900
libPoco_Util_mt                             lib│1537 K
libPoco_Util_mtd                            lib│1556 K
libPoco_XML_mt                              lib│1492 K
libPoco_XML_mtd                             lib│1531 K
libPoco_Zip_mt                              lib│1232 K
libPoco_Zip_mtd                             lib│1249 K





ГРАБЛИ №3


Компиляция самого примера это тоже не для слабонервных
Открываем в самом интерфейсе QT Creator файл проекта *.pro и добавляем библиотеки *.lib/*.a (правой кнопкой мышки) (помечено оранжевым цветом) и руками переменные (помечено синим цветом), затем дошкуриваем руками. Обратите внимание, что руками добавляются библиотеки POCO, WinSocket'а и библиотеки openssl. Как это сделать автоматом я так и не смог понять.





#-------------------------------------------------
#
# Project created by QtCreator 2012-07-03T16:48:27
#
#-------------------------------------------------


QT       += core


QT       -= gui


TARGET = sslprj02
CONFIG   += console
CONFIG   -= app_bundle


TEMPLATE = app


SOURCES += main.cpp


WINVER = 0x0501
_WIN32_WINNT = 0x0501


#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_NetSSL_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_NetSSL_mtd


INCLUDEPATH += $$PWD/../poco/NetSSL_OpenSSL/include/
DEPENDPATH += $$PWD/../poco/NetSSL_OpenSSL/include/
#-------------------------------------------------




#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Crypto_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Crypto_mtd


INCLUDEPATH += $$PWD/../poco/Crypto/include/
DEPENDPATH += $$PWD/../poco/Crypto/include/
#-------------------------------------------------


#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Net_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Net_mtd


INCLUDEPATH += $$PWD/../poco/Net/include/
DEPENDPATH += $$PWD/../poco/Net/include/
#-------------------------------------------------


#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Util_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Util_mtd


INCLUDEPATH += $$PWD/../poco/Util/include/
DEPENDPATH += $$PWD/../poco/Util/include/
#-------------------------------------------------




#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_XML_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_XML_mtd


INCLUDEPATH += $$PWD/../poco/XML/include/
DEPENDPATH += $$PWD/../poco/XML/include/
#-------------------------------------------------




#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Foundation_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Foundation_mtd


INCLUDEPATH += $$PWD/../poco/Foundation/include/
DEPENDPATH += $$PWD/../poco/Foundation/include/
#-------------------------------------------------


win32: LIBS += -LC:/openssl/lib/ -lssleay32
win32: LIBS += -LC:/openssl/lib/ -llibeay32


INCLUDEPATH += c:/openssl/include/
DEPENDPATH += c:/openssl/include/


win32: LIBS += -LD:/QtSDK/mingw/lib/ -lws2_32
win32: LIBS += -LD:/QtSDK/mingw/lib/ -liphlpapi


В файле *.cpp до #include вставляем строку

#define _WIN32_WINNT 0x0501
чтобы уж быть точно уверенным.

ГРАБЛИ №4

Перед запуском в отладке или просто так убедитесь, что у вас доступны DLL (прописана директория в переменной PATH или лежат в текущей директории) следующие файлы:

СКЗИ МагПро КриптоПакет он же openssl 0.9.8e
cryptoeay32-0.9.8.dll                        │1387 K


ssleay32-0.9.8.dll                           │330426
zlib1.dll                                    │ 73216





Основные куски библиотек MinGW

libgcc_s_dw2-1.dll                           │ 43008
mingwm10.dll                                 │ 11362


Основные библиотеки QT (большая часть не нужна, но на всякий случай положите в доступную папку)
phonon4.dll                                  │344576
QtCore4.dll                                  │2492 K
QtDeclarative4.dll                           │2995 K
QtGui4.dll                                   │9619 K
QtMultimedia4.dll                            │174080
QtNetwork4.dll                               │1181 K
QtOpenGL4.dll                                │912384
QtScript4.dll                                │2126 K
QtScriptTools4.dll                           │745984
QtSql4.dll                                   │271872
QtSvg4.dll                                   │373248
QtWebKit4.dll                                │  17 M
QtXml4.dll                                   │399360
QtXmlPatterns4.dll                           │3912 K



Обратите внимание, что при запуске откомпилированного в DEBUG режиме файла нужно чтобы были еще доступны соответствующие библиотеки с буковкой <d>.

Пример:
....
QtCored4.dll                                 │  30 M
QtGuid4.dll                                  │ 148 M
QtSvgd4.dll                                  │5475 K
QtNetworkd4.dll                              │  19 M
....


ГРАБЛИ №5

Под гостевой ОС Windows XP откомпилированный пример работает нормально, под основной ОС Windows 7 пример вываливается с ошибкой:
I/O error: Permission denied
Так что есть еще с чем бороться %)