BREW中的安全性网络编程

简介: 版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/6510418 安全性的网络编程主要是通过SSL实现的,首先要创建创建SSLRoot,可用的根证书通常是常用的VeriSign 根证书。
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/6510418

安全性的网络编程主要是通过SSL实现的,首先要创建创建SSLRoot,可用的根证书通常是常用的VeriSign 根证书。它们可以节省手持设备上的空间,并且仅保留一个副本,而不是在每个使用 SSL 的应用程序中都保留副本。手持设备仅包含常用根证书的一小部分,从而防止占用过多的空间。SSL的实现有两种方法,一种是面向socket的实现,另一种是面向http的实现及HTTPS。这里主要阐明怎样使用IWeb接口实现HTTPS的功能。

// defined in pMe

IWebOpts *piRoots; …   

if(ISHELL_CreateInstance(piShell, AEECLISD_SSLROOTCERTS, (void **)&piRoots) != SUCCESS){ }

然后发送root证书给服务器

// defined in App Structure

AEECallback  pcb;

IWeb        *pIWeb;

IWebResp    *pIWebResp;

// Create instance of IWeb

if(ISHELL_CreateInstance(piShell, AEECLISD_WEB, (void**)&pMe->pIWeb) !=

                         SUCCESS)

    goto failure;   

// Initialize callback

CALLBACK_Init(&pMe->pcb, (PFNNOTIFY)CheckSecureResp, pMe);

// First secure connection attempt

IWeb_GetResponse(pMe->pIWeb, (pMe->pIWeb, &pMe->pIWebResp, &pMe->pcb,

                 "https://brewx.qualcomm.com/developer/devexhome.jsp",

                  WEBOPT_HEADERHANDLER, HeaderHandlerFn,

                  WEBOPT_DEFAULT, pMe->piRoots,

                  WEBOPT_END));

同时,需要获得HTTPS的头信息,如果需要的话,还要提供登录等功能:

void Header(void* pNotifyData, const char* pszName, GetLine* pplVal) {

   HTTPSDemo* pMe = pNotifyData;

   if(STRBEGINS("WWW-authenticate:", pszName)) {

      if(pplVal) {

         AppendIDPswdHeader(pMe, pplVal, “user”, “pass”);        

      }

   }  

   if(STRBEGINS("Set-Cookie:", pszName)) {

      if(pplVal) {

         AppendCookieHeader(pMe, pplVal->psz);        

      }

   }  

}

现在,就可以顺利的建立https的连接了

// Create new IWeb transaction

if(pMe->pIWeb) {

   IWEB_Release(pMe->pIWeb);

   pMe->pIWeb = NULL;

}

if(ISHELL_CreateInstance(piShell, AEECLISD_WEB, (void**)&pMe->pIWeb) !=  SUCCESS)

    // handle failure   

// Initialize callback

CALLBACK_Cancel(&pMe->pcb);

CALLBACK_Init(&pMe->pcb, (PFNNOTIFY)CheckSecureResp, pMe);

// Try a successful attempt

IWEB_GetResponse(pMe->pIWeb, (pMe->pIWeb, &pMe->pIWebResp, &pMe->pcb,

      "https://brewx.qualcomm.com/developer/devexhome.jsp", WEBOPT_HEADER, pMe->buffer,

      WEBOPT_HEADERHANDLER, HeaderHandlerFn,WEBOPT_DEFAULTS, pMe->pIRoots,

      WEBOPT_END));

为了保证应用的健壮性,需要关注SSL中的错误处理:

WebOpt wo;

SSLInfo* pSSLInfo = NULL;

// Query for SSL webopt

IWEBRESP_GetOpt(pMe->pIWebResp, WEBOPT_SSL_SEC_INFO, 0, &wo);

// pointer to ssl info

pSSLInfo = (SSLInfo*)(wo.pVal);

// error values are held in pSSLInfo->nResult

另外,还可以通过X.509对SSL进行配置:

X509TrustOVerride TO;

TO.uCertID = 0;

TO.uOverrideBits = X509CHAIN_CERT_EXIPRED;

IWeb_GetResponse(pMe->pIWeb,(pMe->pIWeb,pMe->pWebResp,&pMe->CallBack,

"https://www.securesite.com",WEBOPT_SSL_ALLOWED_VERSION, SSL_VERSION_30,

       WEBOPT_X509_ROOT_CERT, pOurRoot, WEBOPT_X509_OVERRIDE, &TO,

       WEBOPT_DEFAULTS, pMe->pIRoots, WEBOPT_END));

对于银行类应用,或者证券交易类应用,一般会使用自定义的证书,示例如下:

IFileMgr*  pIFileMgr;

IFile*     pIFile;

WebOpt     apwoz;

if(ISHELL_CreateInstance(piShell, AEECLSID_FILEMGR, &pIFileMgr)) !=SUCCESS)

        goto Failure;

pIFile = IFILEMGR_OpenFile(pIFileMgr, “myCert.cer”, _OFM_READ);

IFILE_Read(pIFile, buffer, sizeof(buffer));

apwoz.nID = WEBOPT_X509_ROOT_CERT;

apwoz.pVal = buffer;

IWEB_AddOpt(pMe->pIWeb, apwoz);

IFILE_Release(pIFile);

IFILEMGR_Release(pIFileMgr);

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wireless_com/archive/2010/09/29/5914117.aspx

目录
相关文章
|
7月前
|
机器学习/深度学习 存储 人工智能
SAFEARENA: 评估自主网络代理的安全性
基于大语言模型的智能体在解决基于网络的任务方面正变得越来越熟练。随着这一能力的增强,也随之带来了更大的被恶意利用的风险,例如在在线论坛上发布虚假信息,或在网站上销售非法物质。为了评估这些风险,我们提出了SAFEARENA,这是第一个专注于故意滥用网络代理的基准测试。SAFEARENA包含四个网站上共计500个任务,其中250个是安全的,250个是有害的。我们将有害任务分为五类:虚假信息、非法活动、骚扰、网络犯罪和社会偏见,旨在评估网络代理的真实滥用情况。我们对包括GPT-4o、Claude-3.5 Sonnet、Qwen-2-VL 72B和Llama-3.2 90B在内的领先基于大语言模型的网
319 11
SAFEARENA: 评估自主网络代理的安全性
|
11月前
|
存储 安全 网络安全
远程工作的新常态:确保家庭网络的安全性
远程工作的新常态:确保家庭网络的安全性
208 3
|
安全 算法 网络安全
无线网络中的WEP协议及其安全性问题
无线网络中的WEP协议及其安全性问题
478 1
|
Rust 监控 并行计算
用Rust构建电脑网络监控软件:内存安全性和多线程编程
在当今数字化世界中,网络安全一直是至关重要的问题。电脑网络监控软件是确保网络系统安全和高效运行的关键工具。然而,编写电脑网络监控软件需要处理复杂的多线程编程和内存安全性问题。Rust编程语言提供了一种强大的方式来构建安全的电脑网络监控软件,同时避免了许多常见的编程错误。
482 0
|
域名解析 安全 物联网
阿里云EMAS HTTPDNS 扩展全球服务节点:提升解析安全性与网络覆盖
阿里云EMAS HTTPDNS新增国内西南、华南及国际欧洲、美东服务节点,提升了全球覆盖能力与性能。作为高效域名解析服务,EMAS HTTPDNS针对互联网、汽车、物流、IOT等行业提供支持,解决了传统解析易遭劫持等问题。新增节点优化了就近调度功能,显著缩短响应时间并增强了服务稳定性和连续性,尤其为中国企业的海外业务提供了强有力的支持。此次扩展展现了阿里云对服务质量的持续追求和全球市场布局的战略思考。
|
网络协议 安全 网络安全
《计算机系统与网络安全》 第二章 计算机网络基础与TCPIP协议安全性
《计算机系统与网络安全》 第二章 计算机网络基础与TCPIP协议安全性
159 0
|
安全 Java 网络安全
Java网络编程:高级应用与安全性探讨
Java网络编程:高级应用与安全性探讨
|
安全 开发者 数据安全/隐私保护
Xamarin 的安全性考虑与最佳实践:从数据加密到网络防护,全面解析构建安全移动应用的六大核心技术要点与实战代码示例
【8月更文挑战第31天】Xamarin 的安全性考虑与最佳实践对于构建安全可靠的跨平台移动应用至关重要。本文探讨了 Xamarin 开发中的关键安全因素,如数据加密、网络通信安全、权限管理等,并提供了 AES 加密算法的代码示例。
148 0
|
安全 Java 网络安全
Java网络编程:高级应用与安全性探讨
Java网络编程:高级应用与安全性探讨
|
安全 NoSQL Java
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
下一篇
oss教程