I'm trying to check the client certificate from the server side but it's not working well. Below is a piece of code from a server and a client application. Is something wrong with my code? because the SSL_accept function is failing with "SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate" error. I have generating the certificate using OpenSSL like this: openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
// SSL server int main(int argc, char* argv[]) { sockaddr_in sa_serv; sa_serv.sin_family = AF_INET; sa_serv.sin_addr.s_addr = INADDR_ANY; sa_serv.sin_port = htons(9000); int listen_sd = socket(AF_INET, SOCK_STREAM, 0); bind(listen_sd, (sockaddr*)&sa_serv, sizeof(sa_serv)); listen(listen_sd, 5); sockaddr_in sa_cli; size_t client_len = sizeof(sa_cli); int sd = accept(listen_sd, (sockaddr*)&sa_cli, (int*)&client_len); closesocket(listen_sd); SSLeay_add_ssl_algorithms(); SSL_CTX* ctx = SSL_CTX_new(SSLv3_server_method()); if(!ctx) exit(1); if(SSL_CTX_use_certificate_file(ctx, CERTF, SSL_FILETYPE_PEM) <= 0) exit(2); if(SSL_CTX_use_PrivateKey_file(ctx, KEYF, SSL_FILETYPE_PEM) <= 0) exit(3); if(!SSL_CTX_check_private_key(ctx)) exit(4); SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); SSL* ssl = SSL_new(ctx); SSL_set_fd(ssl, sd); SSL_accept(ssl); X509* client_cert = SSL_get_peer_certificate(ssl); // returns always NULL if(client_cert == NULL) fprintf(stderr, "No client certificate available\n"); // reading and writing operations ... } // SSL client int main(int argc, char* argv[]) { sockaddr_in sa; sa.sin_family = AF_INET; sa.sin_addr.s_addr = inet_addr("127.0.0.1"); sa.sin_port = htons(9000); int sd = socket(AF_INET, SOCK_STREAM, 0); connect(sd, (sockaddr*)&sa, sizeof(sa)); SSLeay_add_ssl_algorithms(); SSL_CTX* ctx = SSL_CTX_new(SSLv3_client_method()); // Initialize PRNG RAND_screen(); if(SSL_CTX_use_certificate_file(ctx, CERTF, SSL_FILETYPE_PEM) <= 0) exit(1); SSL* ssl = SSL_new (ctx); SSL_set_fd(ssl, sd); SSL_connect(ssl); // reading and writing operations ... } ____________________________________________________________ Get advanced SPAM filtering on Webmail or POP Mail ... Get Lycos Mail! http://login.mail.lycos.com/r/referral?aid=27005 ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List [EMAIL PROTECTED] Automated List Manager [EMAIL PROTECTED]