资源简介
自己写的openssl加密通信的代码模板
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
//openssl头文件
#include
#include
int main(int argc char *argv[])
{
int sock_fd=-1; /* TCP套接字 */
SSL_CTX *ctx=NULL; /* SSL会话环境 */
SSL *ssl=NULL; /* SSL安全套接字 */
struct sockaddr_in ser_addr; /* 服务器地址 */
bzero(&ser_addr sizeof(ser_addr));
if( argc!=4 )
{
printf(“argcment wrong:ip port content\n“);
exit(0);
}
do
{
/* 申请SSL会话环境 */
if( NULL==(ctx=SSL_CTX_new(TLS_client_method())) ) //使用SSL_CTX_new()创建会话环境,建立连接时要使用协议由TLS_client_method()来定,服务器由对应的TLS_server_method()来定。如果这一步出错,需要查看错误栈来查看原因
{
ERR_print_errors_fp(stdout);
break;
}
/* TCP连接 */
if( -1==(sock_fd=socket(AF_INET SOCK_STREAM 0)) )
{
printf(“creat socket wrong\n“);
break;
}
ser_addr.sin_family = AF_INET;
ser_addr.sin_port = htons(atoi(argv[2]));
ser_addr.sin_addr.s_addr = inet_addr(argv[1]);
if( -1==(connect(sock_fd (struct sockaddr *)&ser_addr sizeof(ser_addr))) )
{
printf(“connect wrong\n“);
break;
}
/* SSL连接 */
ssl=SSL_new(ctx); /* 由会话环境申请一个SSL套接字 */
SSL_set_fd(ssl sock_fd); /* 绑定SSL安全套接字和已连接TCP套接字 */
if( 0>=SSL_connect(ssl) ) /* 安全套接层握手 */ //返回值为1,成功建立连接;小于等于零失败,使用SSL_get_error()找出错误原因
{
ERR_print_errors_fp(stderr);
break;
}
/* 发送数据 */
SSL_write(ssl argv[3] strlen(argv[3])); //返回值大于零,发送成功,此时返回值等于第3个参数;小于等于零,发送失败,可能原因是连接断开或者出现错误,使用SSL_get_error()获取错误原因
}while(0);
/* 关闭SSL连接,释放SSL安全套接字资源 */
if( NULL!=ssl )
{
SSL_shutdown(ssl); //关闭一个活的TLS/SSL连接,会向对端发送“close notify“,告诉对方
SSL_free(ssl); //减少ssl的引用次数,如果引用次数为零,就移除ssl指向的对象、释放分配的内存;如果ssl是NULL,什么都不做
ssl=NULL;
}
/* 关闭TCP连接 */
if( -1!=sock_fd)
{
close(sock_fd);
sock_fd=-1;
}
/* 释放SSL会话环境 */
if( NULL!=ctx )
{
SSL_CTX_free(ctx);//减少ctx的引用次数,如果引用次数为零,就移除ctx指向的对象、释放分配的内存;如果ctx是NULL,什么都不做
ctx=NULL;
}
return 0;
}
- 上一篇:原始pcap文件
- 下一篇:仿微信对话列表滑动删除功能
评论
共有 条评论