Also include the following call to read the DH files (samples included in source like dh1024.pem) in function load_dh_params().
////////if ((bio=BIO_new_file(file,"r")) == NULL) ////////printf("Couldn't open DH file\n"); On Fri, Aug 28, 2009 at 9:04 AM, Ram G <mydevfor...@gmail.com> wrote: > Here is the sample program I have so far to test the concept of anonymous > DH: > > 1) Start with the samples included in the source. For e.g : > demos/ssl/serv.cpp and cli.cpp > > 2) Server & Client: Remove all the calls related to certificates - > > SSL_CTX_use_certificate_file(ctx, CERTF, SSL_FILETYPE_PEM) > SSL_CTX_use_PrivateKey_file(ctx, KEYF, SSL_FILETYPE_PEM) > SSL_CTX_check_private_key(ctx)) > SSL_get_peer_certificate() > > etc. > > 3) Write a function to either load the DH params from a file or generate > it: > > void load_dh_params(ctx) > SSL_CTX *ctx; > { > DH *dh=NULL; > RAND_seed(rnd_seed, sizeof rnd_seed); > if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, 128, 5, > NULL)) > printf("Couldn't generate DH \n"); > //Make calls to DH_check() to make sure generated params are ok > .... > > if (!DH_generate_key(dh)) > printf("Couldn't generate DH key\n"); > //If you want to read from a file, use following, comment out generation > calls above > ////////BIO *out; > ////////out=BIO_new(BIO_s_file()); > ////////BIO_set_fp(out,stdout,BIO_NOCLOSE); > ////////dh = PEM_read_bio_DHparams(bio,NULL,NULL,NULL); > ////////BIO_free(bio); > if(SSL_CTX_set_tmp_dh(ctx,dh)<0) > printf("Couldn't set DH parameters\n"); > } > > 4) Server : Call the DH generation function > > .... > ctx = SSL_CTX_new (meth); > load_dh_params(ctx); > > 5) Server & client: Set the cipher > > SSL_CTX_set_cipher_list(ctx,"ADH-AES256-SHA"); > > This should be enough for a very basic anonymous DH client/server program > > Regards > > Ramg > > > > On Fri, Aug 28, 2009 at 7:42 AM, Josue Andrade Gomes < > josue.gomes.honey...@gmail.com> wrote: > >> I'm also interested in such sample program. Anyone? >> >> >> >> On Thu, Aug 27, 2009 at 4:39 PM, Ram G <mydevfor...@gmail.com> wrote: >> >>> Things are getting clearer as I dig deeper. The book "Network Security >>> with OpenSSL" by John Viega et al has some explanation of how the DH key >>> exchange takes place. >>> >>> With that knowledge, I went through the source code and found that >>> DH_Compute_Key() is being called in s3_clnt.c and s3_srvr.c. So there is no >>> need to call it in client applications. >>> >>> BRs >>> >>> Ramg >>> On Thu, Aug 27, 2009 at 12:23 PM, Ram G <mydevfor...@gmail.com> wrote: >>> >>>> Hello, >>>> >>>> Going through various posts, I have come across references to Bodo >>>> Moeller's example code showing SSL communication without certificates and >>>> using anonymous DH key exchange. If anybody has that sample, can you please >>>> forward it ? >>>> >>>> I have written a client and server taking help from the sample programs. >>>> I'm generating the DH params in the server and setting it in the SSL >>>> context. I'm setting the cipher as ADH-AES256-SHA in both server and >>>> client. >>>> The client and server are communicating. >>>> >>>> To generate the DH parameters P & G, I have done this: >>>> >>>> 1) Calling DH_generate_parameters() in the server will generate the >>>> Prime P >>>> 2) Calling DH_generate_key() performs the first step of a Diffie-Hellman >>>> key exchange by generating private and public DH values. >>>> >>>> Documentation also talks about this call to generate the shared key: >>>> >>>> 3) Calling DH_compute_key(), these are combined with the client's public >>>> value to compute the shared key. (My program is working even without the >>>> DH_compute_key() call in the server - which is strange I think) >>>> >>>> What I'm not sure is : >>>> >>>> What is the call I need to make in the client to pass the client's >>>> public key ( G (power X) mod P ) to the server ? >>>> >>>> I'm working on a prototype and beginning to get my hands dirty with >>>> OpenSSL. Your help is greatly appreciated. >>>> >>>> -Ramg >>>> >>> >>> >> >