C语言基于ssl的https通信,利用OpenSSL建立SSL安全通信(C/S)

本文档展示了如何使用C语言和OpenSSL库实现基于SSL/TLS的HTTPS通信。代码示例包括客户端和服务器端,涉及证书加载、SSL连接和数据交换。所需的库文件包括libeay32.dll和ssleay32.dll,以及设置ws2_32.lib等依赖。此外,还提到了证书生成和OpenSSL库的使用方法。
摘要由CSDN通过智能技术生成

/******************************************************************************************

*SSL/TLS客户端程序WIN32版(以demos/cli.cpp为基础)

*需要用到动态连接库libeay32.dll,ssleay.dll,

*同时在setting中加入ws2_32.lib libeay32.lib ssleay32.lib,

*以上库文件在编译openssl后可在out32dll目录下找到,

*所需证书文件请参照<>自行生成*/

******************************************************************************************/

#include 

#include 

#include 

#include 

#include 

#include 

#include "openssl/rsa.h"

#include "openssl/crypto.h"

#include "openssl/x509.h"

#include "openssl/pem.h"

#include "openssl/ssl.h"

#include "openssl/err.h"

#include "openssl/rand.h"

/*所有需要的参数信息都在此处以#define的形式提供*/

#define CERTF    "client.crt" /*客户端的证书(需经CA签名)*/

#define KEYF     "client.key" /*客户端的私钥(建议加密存储)*/

#define CACERT   "ca.crt" /*CA 的证书*/

#define PORT     1111 /*服务端的端口*/

#define SERVER_ADDR "127.0.0.1" /*服务段的IP地址*/

//检查错误

#define CHK_NULL(x)     if ((x)==NULL) { exit (-1); }

#define CHK_ERR(err,s)  if ((err)==-1) { perror(s); exit(-2); }

#define CHK_SSL(err)    if ((err)==-1) { ERR_print_errors_fp(stderr); exit(-3); }

int main (void)

{

int err;

int sd;

struct sockaddr_in sa;

SSL_CTX* ctx;

SSL* ssl;

X509* server_cert;

char* str;

char buf [4096];

SSL_METHOD *meth;

int seed_int[100]; /*存放随机序列*/

WSADATA wsaData;

//获取SOCKET版本(2.2)

if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)

{

printf("WSAStartup()fail:%d/n",GetLastError());

return -1;

}

OpenSSL_add_ssl_algorithms(); /*初始化,加载算法*/

SSL_load_error_strings(); /*加载错误信息,为打印调试信息作准备*/

meth = TLSv1_client_method(); /*采用什么协议(SSLv2/SSLv3/TLSv1)在此指定*/

ctx = SSL_CTX_new (meth)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值