《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之76——BREW中的安全性网络编程...
安全性的網(wǎng)絡(luò)編程主要是通過SSL實(shí)現(xiàn)的,首先要?jiǎng)?chuàng)建創(chuàng)建SSLRoot,可用的根證書通常是常用的VeriSign 根證書。它們可以節(jié)省手持設(shè)備上的空間,并且僅保留一個(gè)副本,而不是在每個(gè)使用 SSL 的應(yīng)用程序中都保留副本。手持設(shè)備僅包含常用根證書的一小部分,從而防止占用過多的空間。SSL的實(shí)現(xiàn)有兩種方法,一種是面向socket的實(shí)現(xiàn),另一種是面向http的實(shí)現(xiàn)及HTTPS。這里主要闡明怎樣使用IWeb接口實(shí)現(xiàn)HTTPS的功能。
// defined in pMe
IWebOpts *piRoots; …
if(ISHELL_CreateInstance(piShell, AEECLISD_SSLROOTCERTS, (void **)&piRoots) != SUCCESS){ }
然后發(fā)送root證書給服務(wù)器
// 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));
同時(shí),需要獲得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);
}
}
}
現(xiàn)在,就可以順利的建立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));
為了保證應(yīng)用的健壯性,需要關(guān)注SSL中的錯(cuò)誤處理:
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對(duì)SSL進(jìn)行配置:
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));
對(duì)于銀行類應(yīng)用,或者證券交易類應(yīng)用,一般會(huì)使用自定義的證書,示例如下:
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);
轉(zhuǎn)載于:https://blog.51cto.com/wirelesscao/631893
總結(jié)
以上是生活随笔為你收集整理的《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之76——BREW中的安全性网络编程...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery easy drag
- 下一篇: 8,协议序列化组件NewLife.Ser