Проблемы с использованием OpenSSL в Windows 7 - PullRequest
2 голосов
/ 30 июня 2011

Я заметил некоторые проблемы между установкой OpenSSL в Windows XP Professional и Windows 7 Professional.Для обеих ОС я загрузил двоичные файлы Win32 OpenSSL v1.0.0d и Visual C++ 2008 Redistributables с веб-сайта Shining Light Productions.Оба установлены без проблем на обеих машинах.Однако на компьютере с Windows 7 я столкнулся со следующими проблемами при использовании exe и API OpenSSL:

  • В командной строке MS-DOS я попытался создать корневой ЦС с

    openssl x509 -req -in rootreq.pem -sha1  -extensions v3_ca 
      -signkey rootkey.pem -out rootcert.pem
    

, но была выдана следующая ошибка unable to write random state.Windows XP работала нормально.

  • Я скомпилировал простой веб-сервер SSL, используя API OpenSSL, но при попытке подключиться, используя
openssl s_client -connect 127.0.0.1:16001

Я получаю следующий ответ

Loading 'screen' into random state - done
connect: No such file or directory
connect:errno=0

Еще раз, Windows XP вернула лучший ответ.Если вы посмотрите на мой прикрепленный код, кажется, что второй BIO_do_accept никогда не вызывается.

Кто-нибудь знает, в чем может быть проблема?Есть ли дополнительные шаги, которые мне нужно предпринять при установке на Windows 7?

К вашему сведению - я также пытался установить 64-разрядные двоичные файлы в Windows 7, но получил те же результаты.Мне действительно нужно, чтобы это работало на моем компьютере с Windows 7, поэтому любая помощь приветствуется.

///////////////////  Code ///////////////////////////////////

// Simple OpenSSL Webserver
// Compiler : MSVS 2010 Professional
// Language: C / C++

int main(int argc, char *argv[])
{
    BIO         *acc, *client;
    SSL         *ssl;
    SSL_CTX     *ctx;
    THREAD_TYPE tid;

    init_OpenSSL(  );
    seed_prng(  );

    ctx = setup_server_ctx(  );

    acc = BIO_new_accept(PORT);

    printf ("BIO_new_accept\n");

    if (!acc)
        int_error("Error creating server socket");

    if (BIO_do_accept(acc) <= 0)
        int_error("Error binding server socket");

    printf ("BIO_do_accept\n");

    for (;;)
    {
        if (BIO_do_accept(acc) <= 0)
            int_error("Error accepting connection");

        printf ("BIO_do_accept2\n");

        client = BIO_pop(acc);

        printf ("BIO_pop\n");

        if (!(ssl = SSL_new(ctx)))
            int_error("Error creating SSL context");

        printf ("SSL_new\n");

        SSL_set_bio(ssl, client, client);

        printf ("SSL_set_bio\n");

        THREAD_CREATE(tid, (void *)server_thread, ssl);
    }

    SSL_CTX_free(ctx);
    BIO_free(acc);
    return 0;
}

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Я успешно использую платформу MinGW-w64 для создания своих приложений OpenSSL (как для x86, так и для x64 Windows), а также у меня были некоторые проблемы с двоичными файлами Shining Light.некоторые инструкции и пример приложения на http://www.blogcompiler.com/2011/12/21/openssl-for-windows/

1 голос
/ 31 мая 2012

Спасибо за ответ. Я обнаружил, что лучшим способом было собрать все самому. Я нашел хороший учебник на следующем сайте - http://www.askyb.com/windows/compiling-and-installing-openssl-for-32-bit-windows/

0 голосов
/ 22 июня 2012

, когда вы щелкаете правой кнопкой мыши на командной строке и нажимаете кнопку «Запуск от имени администратора», которая должна устранить вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...