使用OPENSSL编写服务器和客户端代码实例_第1页
使用OPENSSL编写服务器和客户端代码实例_第2页
使用OPENSSL编写服务器和客户端代码实例_第3页
使用OPENSSL编写服务器和客户端代码实例_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用 OPENSS 编写服务器和客户端代码实例使用相同的 ca 生成两个证书,一个是 server.cer,一个是 client.cer,注意生成 server.cer候必须指明证书可以用于服务端的。服务器代码:1.#includeopenssl/bio.h2.#includeopenssl/ssl.h3.#includeopenssl/err.h4.5.#include6.7.#defineEXIT_IF_TRUE(x)if(x)8.do9.fprintf(stderr,Check%sistruen,#x);10.ERR_print_errors_fp(stderr);11.exit(2);

2、12.while(0)13.14.intmain(intargc,char*argv)15.16.SSL_CTX*ctx;17.SSL*ssl;18.X509*client_cert;19.20.charszBuffer1024;21.intnLen;22.23.structsockaddr_inaddr;24.intlen;25.intnListenFd,nAcceptFd;26.27./初始化28.cutil_init();29.cutil_log_set_level(LOG_ALL);30.cutil_log_set_stderr(1);31.SSLeay_add_ssl_algorit

3、hms();的时32.OpenSSL_add_all_algorithms();33.SSL_load_error_strings();34.ERR_load_BIO_strings();35.36./我们使用 SSLV3,V237.EXIT_IF_TRUE(ctx=SSL_CTX_new(SSLv23_method()=NULL);38.39./要求校验对方证书40.SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER,NULL);41.42./加载 CA 的证书43.EXIT_IF_TRUE(!SSL_CTX_load_verify_locations(ctx,ca

4、cert.cer,NULL);44.45./加载自己的证书46.EXIT_IF_TRUE(SSL_CTX_use_certificate_file(ctx,server.cer,SSL_FILETYPE_PEM)=0);47.48./加载自己的私钥49.EXIT_IF_TRUE(SSL_CTX_use_PrivateKey_file(ctx,server.key,SSL_FILETYPE_PEM)=0);50.51./判定私钥是否正确52.EXIT_IF_TRUE(!SSL_CTX_check_private_key(ctx);53.54./创建并等待连接55.nListenFd=cutil_

5、socket_new(SOCK_STREAM);56.cutil_socket_bind(nListenFd,NULL,8812,1);57.58.memset(&addr,0,sizeof(addr);59.len=sizeof(addr);60.nAcceptFd=accept(nListenFd,(structsockaddr*)&addr,(size_t*)&len);61.cutil_log_debug(Acceptaconnectfrom%s:%dn,62.inet_ntoa(addr.sin_addr),ntohs(addr.sin_port);63.64

6、./将连接付给 SSL65.EXIT_IF_TRUE(ssl=SSL_new(ctx)=NULL);66.SSL_set_fd(ssl,nAcceptFd);67.EXIT_IF_TRUE(SSL_accept(ssl)!=1);68.69./进行操作70.memset(szBuffer,0,sizeof(szBuffer);71.nLen=SSL_read(ssl,szBuffer,sizeof(szBuffer);72.fprintf(stderr,GetLen%d%sokn,nLen,szBuffer);73.strcat(szBuffer,thisisfromserver);74.SS

7、L_write(ssl,szBuffer,strlen(szBuffer);75.76./释放资源77.SSL_free(ssl);78.SSL_CTX_free(ctx);79.close(nAcceptFd);80.客户端代码1.#includeopenssl/bio.h2.#includeopenssl/ssl.h3.#includeopenssl/err.h4.5.#include6.7.#defineEXIT_IF_TRUE(x)if(x)8.do9.fprintf(stderr,Check%sistruen,#x);10.ERR_print_errors_fp(stderr);11

8、.exit(2);12.while(0)13.14.intmain(intargc,char*argv)15.16.SSL_METHOD*meth;17.SSL_CTX*ctx;18.SSL*ssl;19.20.intnFd;21.intnLen;22.charszBuffer1024;23.24./初始化25.cutil_init();26.cutil_log_set_level(LOG_ALL);27.cutil_log_set_stderr(1);28.SSLeay_add_ssl_algorithms();29.OpenSSL_add_all_algorithms();30.SSL_l

9、oad_error_strings();31.ERR_load_BIO_strings();32.33./我们使用 SSLV3,V234.EXIT_IF_TRUE(ctx=SSL_CTX_new(SSLv23_method()=NULL);35.36./要求校验对方证书37.SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER,NULL);38.39./加载 CA 的证书40.EXIT_IF_TRUE(!SSL_CTX_load_verify_locations(ctx,cacert.cer,NULL);41.42./加载自己的证书43.EXIT_IF_TRUE(SSL

10、_CTX_use_certificate_file(ctx,client.cer,SSL_FILETYPE_PEM)=0);44.45./加载自己的私钥46.EXIT_IF_TRUE(SSL_CTX_use_PrivateKey_file(ctx,client.key,SSL_FILETYPE_PEM)=0);47.48./判定私钥是否正确49.EXIT_IF_TRUE(!SSL_CTX_check_private_key(ctx);50.51./创建连接52.nFd=cutil_socket_new(SOCK_STREAM);53.if(cutil_socket_connect(nFd,,8812,30)0)54.55.cutil_log_error(连接服务器失败n);56.return-1;57.58.59./将连接付给 SSL60.EXIT_IF_TRUE(ssl=SSL_new(ctx)=NULL);61.SSL_set_fd(ssl,nFd);62.EXIT_IF_TRUE(SSL_connect(ssl)!=1);63.64./进行操作65.sprintf(szBuffer,thisisfromclient%d,getpid();66.SSL_write(ssl,szBuffer,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论