first of all - you can initialize SSL context once per
process - and reuse it on every incoming or outgoing
connection request.
So you can remove :
SSL_library_init();
ERR_load_crypto_strings();
SSL_load_error_strings();
ssl_context = SSL_CTX_new( SSLv3_method() );
from your connect functions.
2. Next be sure that you compile with /MD
/multithreaded DLL/ switch /or MDd for Debug versions/
I suggest you to look into your
openssl-0.9.6\demos\ssl directory for a working sample
--- Bryan Bishop Whitehead <[EMAIL PROTECTED]>
wrote:
> I'm trying to learn how to use the OpenSSL library
> so I thought I'd make a
> very simple client/server app to get started.
>
> I first made 2 simple programs that do this: The
> server listens on a port,
> and when a connection comes it it will echo whatever
> is sent from the
> client. The Client connects to this port and sends
> whatever the user
> types. After I did that the next step (so I thought)
> would be
> simple: throw in ssl.
>
> This is the section of code (that is broken) on the
> server side that now
> handles the ssl stuff. The connection is already
> established and I have a
> file descriptor:
>
> int client_connect() {
> SSL_CTX *ssl_context;
> SSL *ssl_struct;
> int ret;
> SSL_library_init();
> ERR_load_crypto_strings();
> SSL_load_error_strings();
> ssl_context = SSL_CTX_new( SSLv3_method() );
> if ( ssl_context == NULL )
> exit(10);
> ssl_struct = SSL_new( ssl_context );
> if ( ssl_struct == NULL )
> exit(11);
> SSL_clear( ssl_struct );
> if ( ! SSL_set_fd ( ssl_struct, fd ) )
> exit(12);
> ERR_clear_error();
> ret = SSL_accept ( ssl_struct );
> if ( ret != 1 )
> {
> ERR_print_errors_fp(stdout);
> fflush(stdout);
> exit(13);
> }
> while ( SSL_read(ssl_struct, buf, BUFFSIZE - 1)
> > 0 )
> {
> printf("%s",buf);
> fflush(stdin);
> }
> SSL_shutdown(ssl_struct);
> close(fd);
> }
>
> This chuck of code bombs out at SSL_accept with:
> 15654:error:1408A0C1:SSL
> routines:SSL3_GET_CLIENT_HELLO:no shared
> cipher:s3_srvr.c:858:
>
> The client portion is this:
>
> int server_connect() {
> /* SSL vars */
> SSL_CTX *ssl_context;
> SSL *ssl_struct;
> int ret;
> DSA key;
> SSL_library_init();
> ERR_load_crypto_strings();
> SSL_load_error_strings();
> ssl_context = SSL_CTX_new( SSLv3_method() );
> ssl_struct = SSL_new( ssl_context );
> SSL_clear( ssl_struct );
> SSL_set_fd ( ssl_struct, sd );
> ret = SSL_connect ( ssl_struct );
> if ( ret != 1 )
> {
> ERR_print_errors_fp(stdout);
> fflush(stdout);
> exit(10);
> }
> while ( fgets(buf, BUFFSIZE - 1, stdin) )
> SSL_write( ssl_struct, buf, BUFFSIZE - 1 );
> SSL_shutdown( ssl_struct );
> close(sd);
> }
>
> This one bombs out on SSL_connect with this
> error: 15707:error:14094410:SSL
> routines:SSL3_READ_BYTES:sslv3 alert
> handshake failure:s3_pkt.c:1031:SSL alert number 40
>
>
> the man page for ssl in the Description lists
> SSL_library_init, then
> SSL_CTX_new, SSL_new, SSL_set_fd, and finally
> SSL_accept/SSL_connect as
> the routines.
>
> I'm pretty sure I'm missing something major here,
> the part about
> SSL_CTX_new that says, "Various options regarding
> certificates, algorithms
> etc. can be set in this object." I can't seem to
> find the details to
> connect the dots....
>
> Any help would be greatly appreciated!
>
> I tried subscribing to the list, but I'm not getting
> a reply from
> majordomo. :( So please CC me just in case. Better
> to get 2 emails than
> none.
>
> -Bryan
>
>
______________________________________________________________________
> OpenSSL Project
> http://www.openssl.org
> User Support Mailing List
> [EMAIL PROTECTED]
> Automated List Manager
[EMAIL PROTECTED]
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]