опять openssl
От: steppe_wolf  
Дата: 26.10.05 05:52
Оценка:
здравтвуйте, данный вопрос уже подымался в форуме, но к сожалению мне это не помогло пока.
Необходимо в клиент серверное приложение внедрить поддержку ssl. Пытаюсь адаптировать под свои нужды
пример из openssl-0.9.7i.tar.gz, до вызова SSL_accept отрабатывает вроде все нормально, подскажите пожайлуста
в чем я протупил, где ошибся?, зарание благодарен.

#include "winsock2.h"
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

SSL_METHOD *sm = NULL;
SSL_load_error_strings();
SSL_library_init();
SSL_CTX *ctx = SSL_CTX_new( sm );
ctx = SSL_CTX_new( SSLv23_server_method() );

SSL_CTX_use_certificate_file( ctx, "server.pem", SSL_FILETYPE_PEM ) != 1 )
SSL_CTX_set_default_passwd_cb( ctx, password_cb );
SSL_CTX_use_PrivateKey_file( ctx, "server.pem", SSL_FILETYPE_PEM );
SSL_CTX_check_private_key( ctx )ж


WSADATA wsaData;
WSAStartup( MAKEWORD(1, 1), &wsaData );

sockaddr_in _sin;
_sin.sin_family = AF_INET;
_sin.sin_port = 0;
_sin.sin_addr.s_addr = 0;

sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons( 443 );
sin.sin_addr.s_addr = htonl( INADDR_ANY );

BOOL b = TRUE;
DWORD arg = 0;
SOCKET mainsock = socket( AF_INET, 1, 0 );
setsockopt( mainsock, IPPROTO_TCP, TCP_NODELAY, (char*)&b, sizeof(BOOL) );
ioctlsocket( mainsock, FIONBIO, &arg );
bind( mainsock, (struct sockaddr*)&sin, sizeof( sin ) );
listen( mainsock, SOMAXCONN );

int nLengthAddr = sizeof(SOCKADDR);
int clisock = accept( mainsock,(struct sockaddr*)&_sin, &nLengthAddr );
//SOCKET clisock = accept( mainsock,(struct sockaddr*)&_sin, &nLengthAddr );

/// 1 --------------------------------------------
BIO *conn = BIO_new( BIO_s_socket() );
BIO_set_fd( conn, clisock, BIO_NOCLOSE );
SSL *ssl = SSL_new( ctx );
SSL_set_bio( ssl, conn, conn );
if( SSL_accept( ssl ) <= 0 )
{
printf( "\nSSL_accept error..." ); /// !!!! тут Error
return FALSE;
}
/// --------------------------------------------
ИЛИ
/// 2 --------------------------------------------
SSL_set_fd( ssl, clisock );
int err = SSL_accept( ssl );
if( err <= 0 ) /// !!!! тут Error
printf("\nzaebalo");
/// --------------------------------------------
Re: опять openssl
От: steppe_wolf  
Дата: 26.10.05 06:57
Оценка:
Здравствуйте, steppe_wolf, Вы писали:

_>здравтвуйте, данный вопрос уже подымался в форуме, но к сожалению мне это не помогло пока.

_>Необходимо в клиент серверное приложение внедрить поддержку ssl. Пытаюсь адаптировать под свои нужды
_>пример из openssl-0.9.7i.tar.gz, до вызова SSL_accept отрабатывает вроде все нормально, подскажите пожайлуста
_>в чем я протупил, где ошибся?, зарание благодарен.

_>#include "winsock2.h"

_>#include <openssl/bio.h>
_>#include <openssl/ssl.h>
_>#include <openssl/err.h>

_> SSL_METHOD *sm = NULL;

_> SSL_load_error_strings();
_> SSL_library_init();
_> SSL_CTX *ctx = SSL_CTX_new( sm );
_> ctx = SSL_CTX_new( SSLv23_server_method() );

_> SSL_CTX_use_certificate_file( ctx, "server.pem", SSL_FILETYPE_PEM ) != 1 )

_> SSL_CTX_set_default_passwd_cb( ctx, password_cb );
_> SSL_CTX_use_PrivateKey_file( ctx, "server.pem", SSL_FILETYPE_PEM );
_> SSL_CTX_check_private_key( ctx )ж


_> WSADATA wsaData;

_> WSAStartup( MAKEWORD(1, 1), &wsaData );

_> sockaddr_in _sin;

_> _sin.sin_family = AF_INET;
_> _sin.sin_port = 0;
_> _sin.sin_addr.s_addr = 0;

_> sockaddr_in sin;

_> sin.sin_family = AF_INET;
_> sin.sin_port = htons( 443 );
_> sin.sin_addr.s_addr = htonl( INADDR_ANY );

_> BOOL b = TRUE;

_> DWORD arg = 0;
_> SOCKET mainsock = socket( AF_INET, 1, 0 );
_> setsockopt( mainsock, IPPROTO_TCP, TCP_NODELAY, (char*)&b, sizeof(BOOL) );
_> ioctlsocket( mainsock, FIONBIO, &arg );
_> bind( mainsock, (struct sockaddr*)&sin, sizeof( sin ) );
_> listen( mainsock, SOMAXCONN );

_> int nLengthAddr = sizeof(SOCKADDR);

_> int clisock = accept( mainsock,(struct sockaddr*)&_sin, &nLengthAddr );
_> //SOCKET clisock = accept( mainsock,(struct sockaddr*)&_sin, &nLengthAddr );

_>/// 1 --------------------------------------------

_> BIO *conn = BIO_new( BIO_s_socket() );
_> BIO_set_fd( conn, clisock, BIO_NOCLOSE );
_> SSL *ssl = SSL_new( ctx );
_> SSL_set_bio( ssl, conn, conn );
_> if( SSL_accept( ssl ) <= 0 )
_> {
_> printf( "\nSSL_accept error..." ); /// !!!! тут Error
_> return FALSE;
_> }
_>/// --------------------------------------------
_> ИЛИ
_>/// 2 --------------------------------------------
_> SSL_set_fd( ssl, clisock );
_> int err = SSL_accept( ssl );
_> if( err <= 0 ) /// !!!! тут Error
_> printf("\nzaebalo");
_>/// --------------------------------------------


Вопрос снимается, проблему вроде решил,
всем спасибо
Re[2]: опять openssl
От: slash_48rus  
Дата: 07.11.06 08:40
Оценка:
Здравствуйте, steppe_wolf, Вы писали:

_>Здравствуйте, steppe_wolf, Вы писали:


_>>здравтвуйте, данный вопрос уже подымался в форуме, но к сожалению мне это не помогло пока.

_>>Необходимо в клиент серверное приложение внедрить поддержку ssl. Пытаюсь адаптировать под свои нужды
_>>пример из openssl-0.9.7i.tar.gz, до вызова SSL_accept отрабатывает вроде все нормально, подскажите пожайлуста
_>>в чем я протупил, где ошибся?, зарание благодарен.

_>> if( SSL_accept( ssl ) <= 0 )

_>> {
_>> printf( "\nSSL_accept error..." ); /// !!!! тут Error
_>> return FALSE;
_>> }
_>>/// --------------------------------------------
_>> ИЛИ
_>>/// 2 --------------------------------------------
_>> SSL_set_fd( ssl, clisock );
_>> int err = SSL_accept( ssl );
_>> if( err <= 0 ) /// !!!! тут Error
_>> printf("\nzaebalo");
_>>/// --------------------------------------------


_>Вопрос снимается, проблему вроде решил,

_>всем спасибо

А можно узнать как, а то у меня тоже пока выполняется только printf (\nzae..alo!");
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.