




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用OPENSSL编写服务器和客户端代码实例使用相同的ca生成两个证书,一个是server.cer,一个是client.cer,注意生成server.cer的时候必须指明证书可以用于服务端的。服务器代码:1. #includeopenssl/bio.h 2. #includeopenssl/ssl.h 3. #includeopenssl/err.h 4. 5. #include 6. 7. #defineEXIT_IF_TRUE(x)if(x) 8. do 9. fprintf(stderr,Check%sistruen,#x); 10. ERR_print_errors_fp(stderr); 11. exit(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_algorithms(); 32. OpenSSL_add_all_algorithms(); 33. SSL_load_error_strings(); 34. ERR_load_BIO_strings(); 35. 36. /我们使用SSLV3,V2 37. 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,cacert.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_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. /将连接付给SSL 65. 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. SSL_write(ssl,szBuffer,strlen(szBuffer); 75. 76. /释放资源 77. SSL_free(ssl); 78. SSL_CTX_free(ctx); 79. close(nAcceptFd); 80. 客户端代码1. #includeopenssl/bio.h 2. #includeopenssl/ssl.h 3. #includeopenssl/err.h 4. 5. #include 6. 7. #defineEXIT_IF_TRUE(x)if(x) 8. do 9. fprintf(stderr,Check%sistruen,#x); 10. ERR_print_errors_fp(stderr); 11. 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_load_error_strings(); 31. ERR_load_BIO_strings(); 32. 33. /我们使用SSLV3,V2 34. 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_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,127.0.0.1,8812,30)0) 54. 55. cutil_log_error(连接服务器失败n); 56. return-1; 57. 58. 59. /将连接付给SSL 60. 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,strlen(szBuffer); 67. 68. /释放资源 69. memset(szBuffe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七夕节活动方案(合集18篇)
- 年产300万只汽车前大灯智项目实施方案
- 年产20万吨氟化系列产品生产项目建议书(仅供参考)
- 广告牌匾规范化整治规划设计方案(范文)
- 公共厕所改造工程规划设计方案(范文)
- 社会服务方案设计
- 伊春职业学院《申论》2023-2024学年第二学期期末试卷
- 毕节医学高等专科学校《视唱III》2023-2024学年第二学期期末试卷
- 厦门兴才职业技术学院《教师语言技能B1》2023-2024学年第二学期期末试卷
- 郴州思科职业学院《大数据运维实验》2023-2024学年第二学期期末试卷
- 成都设计咨询集团有限公司2025年社会公开招聘(19人)笔试参考题库附带答案详解
- 2024年湖南省长沙市中考英语真题(原卷版)
- 2025年高三高考冲刺主题教育班会:《高三考前心理调适指南:减压赋能 轻松备考》-2024-2025学年高中主题班会课件
- 九一八事变课件
- 鄂尔多斯市水发燃气有限公司招聘笔试真题2024
- 2025年广东中考英语三年真题试题分析及备考建议(课件)
- 中学生法制教育课件
- 2024游泳救生员具体考试内容及试题及答案
- 河北省唐山市、廊坊市2025年高三高考第二次模拟演练思想政治试卷(含答案)
- 工程据实结算合同协议
- 2025年山东省中考统考数学模拟试卷(含答案)
评论
0/150
提交评论