亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sslserversocket.cpp

?? 實(shí)現(xiàn)了數(shù)字證書的制作、SSL安全通訊、加解密操作等功能
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
							break;
						}
					default:
						{	
							m_pList->AddMsg("未知命令",M_ERROR);
							break;
						}
					}
					if(SSlSend((char *)&RA,sizeof(RA))<=0)//發(fā)送
						break;
				}
			}
			catch (_com_error &e)
			{
				DisplayError(e);
				SSlSend((char *)&RA,sizeof(RA));//發(fā)送
			}
			break;
		}
		case Audit://審核
			{
				try
				{
					if (m_pConnection == NULL)
					{
						return;
					}				
					m_pRecordset->Open((_bstr_t)CA.SQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 
					if(!m_pRecordset->adoEOF)//記錄
					{ 
						char out[100]="";
						char cert[4096]={0};
						char key[4096]={0};
						int certl=0,keyl=0;
						stuCERT sCERT;
						///////////////////////////////////////////////////////////////////////////////////
						_variant_t	varBLOB;
						varBLOB = m_pRecordset->Fields->GetItem("USERINFO")->GetChunk(sizeof(stuCERT));
						if(varBLOB.vt == (VT_ARRAY | VT_UI1))
						{
							char *pBuf = NULL;
							SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
							memcpy(&sCERT,pBuf,sizeof(stuCERT));//個(gè)體信息
							SafeArrayUnaccessData(varBLOB.parray);
						}
						///////////////////////////////////////////////////////////////////////////////////
						
						SYSTEMTIME tm;
						GetLocalTime(&tm);
						CString time;
						time.Format("%d-%d-%d", tm.wYear,tm.wMonth,tm.wDay);
						
						_variant_t UserID=m_pRecordset->Fields->GetItem("ID")->Value;
						
						HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_CERT),"CERT");
						DWORD lenCert = SizeofResource(NULL, hRsrc); 
						HGLOBAL hgCert=LoadResource(NULL,hRsrc);
						LPSTR lpCert=(LPSTR)LockResource(hgCert);
	
						/*私鑰*/
						hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_KEY),"CERT");
						DWORD lenKey = SizeofResource(NULL, hRsrc); 
						HGLOBAL hgKey=LoadResource(NULL,hRsrc);
						LPSTR lpKey=(LPSTR)LockResource(hgKey);

			
						if(DirectCert(lpCert,lenCert,lpKey,lenKey,UserID.lVal,0,atoi("365"),&sCERT,1024,
							cert,&certl,key,&keyl,out/*,m_CertFormat*/))//固定有效期和密鑰長度
						{
							m_pRecordset->Fields->GetItem("CERTSTATE")->PutValue(_variant_t((long)1));
							m_pRecordset->Fields->GetItem("AUDITIME")->PutValue(_variant_t(time));
							m_pRecordset->Fields->GetItem("USERCERT")->PutValue(_variant_t(cert));
							m_pRecordset->Fields->GetItem("USERKEY")->PutValue(_variant_t(key));
							m_pRecordset->Update();
							
							RA.ID=UserID.lVal;//ID
							RA.Type=Audit;//操作類型
							RA.State=TRUE;//操作狀態(tài)
						}
						else
						{
							m_pList->AddMsg(out,M_ERROR);
							RA.Type=Audit;//操作類型
							RA.State=FALSE;//操作狀態(tài)
						}
					}				
				}
				catch (_com_error &e)
				{
					DisplayError(e);
					RA.Type=Made;//操作類型
					RA.State=FALSE;//操作狀態(tài)
				}
				if(SSlSend((char *)&RA,sizeof(RA))<=0)
					return;
				break;
			}
		case Made://制作證書
			{
				try
				{
					if (m_pConnection == NULL)
					{
						return;
					}
					m_pRecordset->Open((_bstr_t)CA.SQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 
					if(!m_pRecordset->adoEOF)//記錄
					{ 
						_bstr_t UserCert=m_pRecordset->Fields->GetItem("USERCERT")->Value;
						CString Cert=UserCert.copy();
						_bstr_t UserKey=m_pRecordset->Fields->GetItem("USERKEY")->Value;
						CString Key=UserKey.copy();
						_variant_t UserID=m_pRecordset->Fields->GetItem("ID")->Value;
						
						RA.ID=UserID.lVal;//ID
						RA.Type=Made;//操作類型
						RA.State=TRUE;//操作狀態(tài)
						RA.CertL=Cert.GetLength();//公鑰長度
						RA.KeyL=Key.GetLength();//私鑰長度
						SSlSend((char *)&RA,sizeof(RA));//發(fā)送證書ID、公鑰證書長度,私鑰長度
						
						CString CertKey;
						CertKey=Cert+Key;
						SSlSend(CertKey.GetBuffer(0),strlen(CertKey));//發(fā)送證書內(nèi)容
					}
				}
				catch (_com_error &e)
				{
					DisplayError(e);
					RA.Type=Made;//操作類型
					RA.State=FALSE;//操作狀態(tài)
					SSlSend((char *)&RA,sizeof(RA));
				}
				break;
			}
		case MadeOK://制作成功,用于更新數(shù)據(jù)庫,不發(fā)送消息
			{
				try
				{
					if (m_pConnection == NULL)
					{
						return;
					}				
					m_pRecordset->Open((_bstr_t)CA.SQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 
					if(!m_pRecordset->adoEOF)//記錄
					{ 
						
						SYSTEMTIME tm;
						GetLocalTime(&tm);
						CString time;
						time.Format("%d-%d-%d", tm.wYear,tm.wMonth,tm.wDay);
						m_pRecordset->Fields->GetItem("CERTSTATE")->PutValue(_variant_t((long)2));
						m_pRecordset->Fields->GetItem("MADETIME")->PutValue(_variant_t(time));
						m_pRecordset->Update();
					}
				}
				catch (_com_error &e)
				{
					DisplayError(e);
					m_pList->AddMsg("更新數(shù)據(jù)庫失敗",M_ERROR);
				}	 								 
				break;
			}
		case Revoke://作廢證書
			{
				try
				{
					if (m_pConnection == NULL)
					{
						return;
					}				
					m_pRecordset->Open((_bstr_t)CA.SQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 
					time_t ttime;//當(dāng)前時(shí)間
					time(&ttime);
					if(!m_pRecordset->adoEOF)//記錄
					{ 
						m_pRecordset->Fields->GetItem("CERTSTATE")->PutValue(_variant_t((long)-1));
						m_pRecordset->Fields->GetItem("REVOKETIME")->PutValue(_variant_t(ttime));
						m_pRecordset->Update();
						_variant_t UserID=m_pRecordset->Fields->GetItem("ID")->Value;
						
						RA.ID=UserID.lVal;//ID
						RA.Type=Revoke;//操作類型
						RA.State=TRUE;//操作狀態(tài)
					}
				}
				catch (_com_error &e)
				{
					DisplayError(e);
					RA.Type=Revoke;//操作類型
					RA.State=FALSE;//操作狀態(tài)
				}
				SSlSend((char *)&RA,sizeof(RA));
				break;
			}
		case MadeCrl://制作CRL
			{
				try
				{
					if (m_pConnection == NULL)
					{
						return;
					}				
					time_t timet;//作廢時(shí)間
					int id;//索引
					time_t t;
					time(&t);
					char out[100]={0};
					stuREVOKE * Head=NULL;
					m_pRecordset->Open((_bstr_t)CA.SQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 
					while(!m_pRecordset->adoEOF)//記錄
					{ 
						_variant_t UserID=m_pRecordset->Fields->GetItem("ID")->Value;
						id=UserID.lVal;//ID
						_variant_t RevokeTime=m_pRecordset->Fields->GetItem("REVOKETIME")->Value;
						timet=RevokeTime.lVal;//time
						AddRevoke(Head,id,timet);
						m_pRecordset->MoveNext();//轉(zhuǎn)到下一條紀(jì)錄
					}
					HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_CERT),"CERT");
					DWORD lenCert = SizeofResource(NULL, hRsrc); 
					HGLOBAL hgCert=LoadResource(NULL,hRsrc);
					LPSTR lpCert=(LPSTR)LockResource(hgCert);
					/*私鑰*/
					hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_KEY),"CERT");
					DWORD lenKey = SizeofResource(NULL, hRsrc); 
					HGLOBAL hgKey=LoadResource(NULL,hRsrc);
					LPSTR lpKey=(LPSTR)LockResource(hgKey);
					char * Crl=NULL;
					int CrlLen=0;
					if(MakeCrl(lpCert,lenCert,lpKey,lenKey,Head,NewCrlMem,Crl,&CrlLen,NULL,out))
					{
						RA.Type=MadeCrl;//操作類型
						RA.State=TRUE;//操作狀態(tài)
						RA.CertL=CrlLen;//crl長度
						if(SSlSend((char *)&RA,sizeof(RA))>0)//發(fā)送crl、crl長度
							int i=SSlSend(Crl,CrlLen);//發(fā)送證書內(nèi)容
						delete Crl;
					}
					else
					{
						RA.Type=MadeCrl;//操作類型
						RA.State=FALSE;//操作狀態(tài)
						m_pList->AddMsg(out,M_ERROR);
						SSlSend((char *)&RA,sizeof(RA));
					}
				}
				catch (_com_error &e)
				{
					DisplayError(e);
					RA.Type=Revoke;//操作類型
					RA.State=FALSE;//操作狀態(tài)
					SSlSend((char *)&RA,sizeof(RA));
				}
				break;
			}
		}
		m_pRecordset->Close();
		m_pRecordset = NULL;
		AsyncSelect(FD_READ|FD_CLOSE);
	}
	CAsyncSocket::OnReceive(nErrorCode);
}

char * CSslServerSocket::NewCrlMem(UINT len) //分配內(nèi)存
{
	return new char [len];
}

void CSslServerSocket::OnSend(int nErrorCode)
{
	// TODO: Add your specialized code here and/or call the base class
	char out[100]={0};
	if(m_type==0)//www
	{
		/*得到html*/
		HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_HTML),RT_HTML);
		DWORD lenHtml = SizeofResource(NULL, hRsrc); 
		HGLOBAL hgHtml=LoadResource(NULL,hRsrc);
		LPSTR lpHtml=(LPSTR)LockResource(hgHtml);
		SSlWww(lpHtml,lenHtml,out);
	}
	CAsyncSocket::OnSend(nErrorCode);
}

void CSslServerSocket::SSlWww(char * file,int len, char *out)
{
	int i=0,k=0;
	POSITION pos;
	if(len==0)//磁盤文件
	{
		FILE *fp;
		char buf[1024]={0};
		if((fp=fopen(file,"r+b"))==NULL)
		{
			sprintf(out,"Error opening %s",file);
			return;
		}
		for (;;)
		{
			i=fread(buf,sizeof(char), 1024,fp);
			if (i <= 0) break;
			k=SSlSend(buf,i);
			memset(buf,0,1024);
			if (k <= 0)
			{
				break;
			}
		}
		fclose(fp);
	}
	else
	{
//		for(i=0;;i++)
		{
	//		k=SSlSend(file+i*1024,(len>1024)?1024:len);
			k=SSlSend(file,len);
//			if (k <= 0) break;
//			len-=1024;
//			if(len<=0)
//				break;
		}
	}
	CString clientIp,str;
	unsigned int port;
	GetPeerName(clientIp,port);//得到用戶ip,port
	str.Format("斷開客戶連接%s",clientIp);
	SSL_set_shutdown(m_Ssl,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
	ShutDown(2);
	pos=m_pObSock->Find(this);
	if(pos) m_pObSock->RemoveAt(pos);//主動(dòng)關(guān)閉
	Close();
	m_pList->AddMsg(str,M_WARING);
	delete this;

}

void CSslServerSocket::SSlShouDown()
{
	if(m_Ctx!=NULL)
	{
		SSL_CTX_free(m_Ctx);
		m_Ctx=NULL;
	}
	if(m_Ssl!=NULL)
	{
		SSL_shutdown(m_Ssl);
		SSL_free(m_Ssl);
		m_Ssl=NULL;
	}
	if(m_hSocket != INVALID_SOCKET)
	{
		ShutDown(2);
		Close();
	}
}

int CSslServerSocket::Verify(int ok, X509_STORE_CTX *ctx)
{
	char buf[256];
	X509 *err_cert;
	int err,depth;
	char out[100]={0};
	int	verify_depth=1;
	long verify_error;
	err_cert=X509_STORE_CTX_get_current_cert(ctx);
	err=	X509_STORE_CTX_get_error(ctx);
	depth=	X509_STORE_CTX_get_error_depth(ctx);

	X509_NAME_oneline(X509_get_subject_name(err_cert),buf,256);
	sprintf(out,"depth=%d %s\n",depth,buf);
	if (!ok)
		{
		sprintf(out,"verify error:num=%d:%s\n",err,
			X509_verify_cert_error_string(err));
		if (verify_depth >= depth)
			{
			ok=1;
			verify_error=X509_V_OK;
			}
		else
			{
			ok=0;
			verify_error=X509_V_ERR_CERT_CHAIN_TOO_LONG;
			}
		}
	switch (ctx->error)
		{
	case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
		X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,256);
		sprintf(out,"issuer= %s\n",buf);
		break;
	case X509_V_ERR_CERT_NOT_YET_VALID:
	case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
		sprintf(out,"notBefore=");
		break;
	case X509_V_ERR_CERT_HAS_EXPIRED:
	case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
		sprintf(out,"notAfter=");
		break;
		}
	return(ok);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲午夜精品久久久久久| 欧美日韩三级一区二区| 亚洲成年人网站在线观看| 久久综合九色欧美综合狠狠| 一本色道久久综合亚洲91| 国产综合色精品一区二区三区| 亚洲精品美腿丝袜| 国产欧美在线观看一区| 欧美一级高清片| 色综合久久久网| 国产成a人无v码亚洲福利| 日本午夜精品一区二区三区电影| 中文字幕一区二区三区在线播放| 日韩女优毛片在线| 欧美日韩精品系列| 91免费视频大全| 处破女av一区二区| 国产一区二区h| 久久精品国产色蜜蜜麻豆| 亚洲电影欧美电影有声小说| 国产精品久久久久久久久图文区| 精品国产麻豆免费人成网站| 欧美精品 国产精品| 欧美在线观看一二区| 91免费在线视频观看| 成人av在线网站| 国产成人精品一区二| 国产一区二区在线看| 狠狠色丁香婷婷综合久久片| 青椒成人免费视频| 日本亚洲免费观看| 日韩成人一区二区三区在线观看| 亚洲成a人v欧美综合天堂| 亚洲精选一二三| 一区二区在线观看av| 亚洲精品一二三区| 一区二区三区四区高清精品免费观看| 国产精品久久国产精麻豆99网站| 国产婷婷色一区二区三区在线| 久久一留热品黄| 久久久一区二区三区捆绑**| 精品三级在线看| 精品久久人人做人人爽| 2020国产成人综合网| 久久久久综合网| 欧美国产日韩精品免费观看| 国产精品亲子伦对白| 国产精品卡一卡二卡三| 国产精品福利电影一区二区三区四区| 中文字幕av在线一区二区三区| 国产精品理伦片| 亚洲精品一二三| 日韩在线播放一区二区| 秋霞电影网一区二区| 韩国毛片一区二区三区| 风间由美中文字幕在线看视频国产欧美| 国产精品一区二区三区乱码 | 亚洲少妇屁股交4| 亚洲免费观看高清完整| 亚洲一区二区欧美| 免费观看日韩电影| 国产精品69毛片高清亚洲| 成人激情动漫在线观看| 在线看一区二区| 日韩欧美在线一区二区三区| 久久久精品影视| 亚洲欧美乱综合| 日本中文字幕不卡| 国产白丝网站精品污在线入口| 93久久精品日日躁夜夜躁欧美| 欧美日韩精品综合在线| 久久欧美一区二区| 亚洲欧美另类久久久精品2019| 亚洲电影中文字幕在线观看| 久久精品99国产精品| 成人av在线资源| 91精品国产入口| 国产精品成人网| 日韩电影在线免费看| 成人综合婷婷国产精品久久蜜臀 | 美国精品在线观看| 国产成都精品91一区二区三| 91蜜桃视频在线| 欧美α欧美αv大片| 亚洲日本欧美天堂| 欧洲精品一区二区三区在线观看| 69成人精品免费视频| 国产精品国产三级国产| 日韩国产精品91| 99久久精品国产麻豆演员表| 欧美一级片免费看| 亚洲日本va在线观看| 精品一区二区精品| 91精品1区2区| 国产日韩欧美一区二区三区乱码| 亚洲一级二级三级在线免费观看| 国产剧情一区二区| 欧美精品第一页| 亚洲乱码国产乱码精品精的特点 | 亚洲欧洲日韩在线| 蜜臀精品一区二区三区在线观看 | 国产精品电影一区二区三区| 免费不卡在线观看| 欧美在线综合视频| 国产精品毛片高清在线完整版| 美女视频一区二区三区| 在线观看视频欧美| 中文字幕亚洲一区二区va在线| 蜜桃av噜噜一区| 欧美日韩国产一级| 亚洲激情六月丁香| 成人黄色网址在线观看| 亚洲精品一区二区三区精华液| 亚洲bt欧美bt精品777| 色综合一个色综合| 国产精品乱人伦中文| 国产一区二区成人久久免费影院| 4438x亚洲最大成人网| 亚洲人成人一区二区在线观看| 丁香亚洲综合激情啪啪综合| 精品国产乱码久久久久久夜甘婷婷 | 亚洲午夜羞羞片| 成人性生交大片免费看视频在线| 日韩精品一区二区三区视频 | 成人午夜视频在线| 久久久久青草大香线综合精品| 蜜臀av性久久久久蜜臀aⅴ四虎 | 福利一区二区在线| 国产欧美日韩视频一区二区| 国内外成人在线视频| 精品久久久久久久久久久久久久久| 日韩精品亚洲专区| 在线成人小视频| 免费在线成人网| 日韩一区二区三区在线视频| 日本欧美韩国一区三区| 欧美一区二区视频在线观看| 日本不卡的三区四区五区| 91精品免费在线| 日本亚洲视频在线| 精品奇米国产一区二区三区| 精品亚洲国产成人av制服丝袜| 精品久久久久av影院| 国产精品羞羞答答xxdd| 久久精品在线观看| 成人激情动漫在线观看| 综合久久一区二区三区| 在线精品国精品国产尤物884a| 亚洲成年人网站在线观看| 91精品欧美一区二区三区综合在| 美国十次综合导航| 久久精品亚洲麻豆av一区二区| 国产91精品一区二区麻豆网站| 国产精品丝袜在线| 在线视频你懂得一区| 偷拍一区二区三区| 精品理论电影在线| 成人午夜视频在线观看| 一区二区三区四区视频精品免费| 精品视频1区2区3区| 免费看日韩精品| 久久精品亚洲乱码伦伦中文 | 国产欧美日韩在线看| 91在线免费视频观看| 午夜视频久久久久久| 久久亚洲一级片| 日本久久电影网| 麻豆免费精品视频| 亚洲视频在线观看三级| 欧美日韩黄色影视| 国产成人免费在线观看不卡| 亚洲免费在线观看视频| 欧美一区二区人人喊爽| 懂色av一区二区三区免费观看| 亚洲综合无码一区二区| 精品久久久久99| 91国偷自产一区二区使用方法| 麻豆传媒一区二区三区| 国产精品久久久久婷婷二区次| 91 com成人网| 成人免费视频视频在线观看免费 | 555夜色666亚洲国产免| 成人一级片网址| 日本午夜精品视频在线观看| 国产婷婷精品av在线| 欧美三级视频在线观看| 国产98色在线|日韩| 午夜影院在线观看欧美| 亚洲国产精品传媒在线观看| 欧美色图一区二区三区| 国产成人在线免费| 水野朝阳av一区二区三区| 国产精品久久久久影院| 欧美mv日韩mv国产网站app| 色综合激情五月| 激情小说亚洲一区| 亚洲bt欧美bt精品| 中文字幕欧美一区| 久久色中文字幕| 欧美乱妇20p|