使用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

提交評論