《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之76――BREW中的安全性网络编程
2010-09-29 13:55
477 查看
安全性的网络编程主要是通过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);本文出自 “我相信” 博客,请务必保留此出处http://wirelesscao.blog.51cto.com/3397462/631893
// 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);本文出自 “我相信” 博客,请务必保留此出处http://wirelesscao.blog.51cto.com/3397462/631893
相关文章推荐
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之76——BREW中的安全性网络编程
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之16---BREW精要之安全性
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之16---BREW精要之安全性
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之71---BREW中语音与短信的开发
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之90——BREW中的日志接口功能
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之64---BREW 应用的交叉编译
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之93——BREW中的工具接口层
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之99――BREW中的应用删除和召回
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之17---BREW核心思想之电子商务
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之40---BREW手机的移植
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之80——BREW应用间通信之回调通知
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之4---移动通信网络与互联网的融合
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之90――BREW中的日志接口功能
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之93――BREW中的工具接口层
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之17---BREW核心思想之电子商务
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之40---BREW手机的移植
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之80――BREW应用间通信之回调通知
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之50---BREW SDK 九大功能之网络服务
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之4---移动通信网络与互联网的融合
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之59---BREW toolsuite 工具