SSL Programming
SSL Programming
sslClient.c
/*
A simple SSL client.
It connects and then forwards data from/to the terminal to/from the server
*/
#define CA_LIST
"root.pem"
#define ServerHOST "deneb"
#define RANDOM
"random.pem"
#define PORT
10101
#define ClientKEYFILE
"client.pem"
#define ClientPASSWORD "oducsc"
common.c
sslServer.c
#define CA_LIST
"root.pem"
#define ClientHOST "vega"
#define RANDOM
"random.pem"
#define ServerPORT
10101
int main (argc,argv)
int argc;
char **argv;
{
int sock,s;
BIO *sbio;
SSL_CTX *ctx;
SSL *ssl;
int r;
pid_t pid;
/* Build our SSL context*/
ctx = initialize_ctx (ServerKEYFILE, ServerPASSWORD);
load_dh_params (ctx, DHFILE);
generate_eph_rsa_key (ctx);
sock = tcp_listen ();
while (1) {
s = accept (sock, 0, 0);
sbio = BIO_new_socket (s, BIO_NOCLOSE);
ssl = SSL_new(ctx);
SSL_set_bio (ssl, sbio, sbio);
SSL_accept (ssl);
check_cert_chain (ssl, ClientHOST);
echo (ssl);
}
}
}
int tcp_listen ()
{
int sock;
struct sockaddr_in sin;
char buf[BUFSIZZ];
int r,len,offset;
while (1) {
/* First read data */
r=SSL_read (ssl, buf, BUFSIZZ);
switch ( SSL_get_error (ssl,r) ){
case SSL_ERROR_NONE:
len=r;
break;
case SSL_ERROR_ZERO_RETURN:
goto end;
default:
berr_exit ("SSL read problem");
}
/* Now keep writing until we've written everything*/
offset=0;
while (len) {
r = SSL_write (ssl, buf+offset, len);
switch (SSL_get_error (ssl,r)) {
case SSL_ERROR_NONE:
len-=r; offset+=r;
break;
default:
berr_exit("SSL write problem");
}
}
} /* while (1) */
end:
SSL_shutdown(ssl);
SSL_free(ssl)
}
#define DHFILE
#define RANDOM
"dh1024.pem"
"random.pem"
#define CA_LIST
#define ServerKEYFILE
#define ClientKEYFILE
"root.pem"
"server.pem"
"client.pem"
ca_cert.pem >
ca_cert.pem >