织梦CMS - 轻松建站从此开始!

罗索

用openssl编写SSL,TLS程序(2)

落鹤生 发布于 2011-04-13 09:23 点击:次 
listen_sd = socket (AF_INET, SOCK_STREAM, 0); CHK_ERR(listen_sd, socket); memset (sa_serv, '\0', sizeof(sa_serv)); sa_serv.sin_family= AF_INET; sa_serv.sin_addr.s_addr = INADDR_ANY; sa_serv.sin_port=
TAG:



  listen_sd = socket (AF_INET, SOCK_STREAM, 0);   
  CHK_ERR(listen_sd, "socket");
  
  memset (&sa_serv, '\0', sizeof(sa_serv));
  sa_serv.sin_family      = AF_INET;
  sa_serv.sin_addr.s_addr = INADDR_ANY;
  sa_serv.sin_port        = htons (PORT);          
  
  err = bind(listen_sd, (struct sockaddr*) &sa_serv,
         sizeof (sa_serv));                   
  CHK_ERR(err, "bind");
         
  /*接受TCP链接*/
  err = listen (listen_sd, 5);                    
  CHK_ERR(err, "listen");
  
  client_len = sizeof(sa_cli);
  sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len);
  CHK_ERR(sd, "accept");
  closesocket (listen_sd);

  printf ("Connection from %lx, port %x\n",
      sa_cli.sin_addr.s_addr, sa_cli.sin_port);
  
  
  /*TCP连接已建立,进行服务端的SSL过程. */
  printf("Begin server side SSL\n");

  ssl = SSL_new (ctx);                           
  CHK_NULL(ssl);
  SSL_set_fd (ssl, sd);
  err = SSL_accept (ssl);
  printf("SSL_accept finished\n");
  CHK_SSL(err);
  
  
  /*打印所有加密算法的信息(可选)*/
  printf ("SSL connection using %s\n", SSL_get_cipher (ssl));
  
  /*得到服务端的证书并打印些信息(可选) */
  client_cert = SSL_get_peer_certificate (ssl);
  if (client_cert != NULL) {
    printf ("Client certificate:\n");
    
    str = X509_NAME_oneline (X509_get_subject_name (client_cert), 0, 0);
    CHK_NULL(str);
    printf ("\t subject: %s\n", str);
    Free (str);
    
    str = X509_NAME_oneline (X509_get_issuer_name  (client_cert), 0, 0);
    CHK_NULL(str);
    printf ("\t issuer: %s\n", str);
    Free (str);
    
    
    X509_free (client_cert);/*如不再需要,需将证书释放 */
  }
  else
    printf ("Client does not have certificate.\n");

  /* 数据交换开始,用SSL_write,SSL_read代替write,read */
  err = SSL_read (ssl, buf, sizeof(buf) - 1);                   
  CHK_SSL(err);
  buf[err] = '\0';
  printf ("Got %d chars:'%s'\n", err, buf);
  
  err = SSL_write (ssl, "I hear you.", strlen("I hear you."));  
  CHK_SSL(err);

  /* 收尾工作*/
  shutdown (sd,2);
  SSL_free (ssl);
  SSL_CTX_free (ctx);
  
  return 0;
}
/*****************************************************************
* EOF - serv.cpp
*****************************************************************/

五.参考文献

1.SSL规范(draft302)
2.TLS标准(rfc2246)
3.openssl源程序及文档
4.SSLeay Programmer Reference
5.Introducing SSL and Certificates using SSLeay

(yawl)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201104/11196.html]
本文出处:nsfocus.com 作者:yawl
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容