基于OpenSSL的HTTPS通信C++实现

  HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。Nebula是一个为开发者提供一个快速开发高并发网络服务程序或搭建高并发分布式服务集群的高性能事件驱动网络框架。Nebula作为通用网络框架提供HTTPS支持十分重要,Nebula既可用作https服务器,又可用作https客户端。本文将结合Nebula框架的https实现详细讲述基于openssl的SSL编程。如果觉得本文对你有用,帮忙到Nebula的Github码云给个star,谢谢。Nebula不仅是一个框架,还提供了一系列基于这个框架的应用,目标是打造一个高性能分布式服务集群解决方案。Nebula的主要应用领域:即时通讯(成功应用于一款IM)、消息推送平台、数据实时分析计算(成功案例)等,Bwar还计划基于Nebula开发爬虫应用。

1. SSL加密通信

  HTTPS通信是在TCP通信层与HTTP应用层之间增加了SSL层,如果应用层不是HTTP协议也是可以使用SSL加密通信的,比如WebSocket协议WS的加上SSL层之后的WSS。Nebula框架可以通过更换Codec达到不修改代码变更通讯协议目的,Nebula增加SSL支持后,所有Nebula支持的通讯协议都有了SSL加密通讯支持,基于Nebula的业务代码无须做任何修改。

https_communication

  Socket连接建立后的SSL连接建立过程:

ssl_communication

2. OpenSSL API

  OpenSSL的API很多,但并不是都会被使用到,如果需要查看某个API的详细使用方法可以阅读API文档

2.1 初始化OpenSSL

  OpenSSL在使用之前,必须进行相应的初始化工作。在建立SSL连接之前,要为Client和Server分别指定本次连接采用的协议及其版本,目前能够使用的协议版本包括SSLv2、SSLv3、SSLv2/v3和TLSv1.0。SSL连接若要正常建立,则要求Client和Server必须使用相互兼容的协议。   下面是Nebula框架SocketChannelSslImpl::SslInit()函数初始化OpenSSL的代码,根据OpenSSL的不同版本调用了不同的API进行初始化。

#if OPENSSL_VERSION_NUMBER >= 0x10100003L

    if (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) == 0)
    {
        pLogger->WriteLog(neb::Logger::ERROR, __FILE__, __LINE__, __FUNCTION__, "OPENSSL_init_ssl() failed!");
        return(ERR_SSL_INIT);
    }

    /*
     * OPENSSL_init_ssl() may leave errors in the error queue
     * while returning success
     */

    ERR_clear_error();

#else

    OPENSSL_config(NULL);

    SSL_library_init();         // 初始化SSL算法库函数( 加载要用到的算法 ),调用SSL函数之前必须调用此函数
    SSL_load_error_strings();   /
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于OpenSSL的文件安全传输系统的设计与实现需要考虑以下几个方面。 首先,系统需要使用OpenSSL提供的加密算法来保证文件的安全性。OpenSSL支持的加密算法包括对称加密算法(如AES)和非对称加密算法(如RSA),我们可以根据具体的需求选择适当的加密算法来保护传输的文件。 其次,系统需要使用OpenSSL的SSL/TLS协议来建立安全的传输通道。SSL/TLS协议能够提供端到端的加密和身份验证保护,确保传输过程中数据的机密性和完整性,并防止中间人攻击。通过OpenSSL提供的API,我们可以实现SSL/TLS协议的握手过程,确保双方能够安全地进行文件传输。 另外,系统还需要考虑到数字证书的使用,以提供对通信双方身份的验证和认证。我们可以使用OpenSSL生成自签名证书来进行实验和测试,也可以使用CA签发的证书来进行正式的身份验证。 在实现方面,系统可以基于OpenSSL的C/C++ API来开发。首先,需要编写服务器端程序和客户端程序来进行文件传输。这些程序需要处理OpenSSL的API调用,建立SSL/TLS连接,进行身份验证,然后进行文件的加密和解密操作。同时,还需要处理传输过程中可能出现的错误和异常情况,并提供相应的错误处理机制。 总结起来,基于OpenSSL的文件安全传输系统的设计与实现需要考虑加密算法的选择、SSL/TLS协议的运用、数字证书的使用,并针对具体的需求进行程序的编写和错误处理。通过合理地利用OpenSSL提供的功能和API,可以实现一个安全可靠的文件传输系统。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值