📄 cacenterpage.cpp
字号:
GetDlgItemText(IDC_EDIT_OU,str);
pReq->Add(pReq, "OU", str);
GetDlgItemText(IDC_EDIT_CN,strCN);
if(strCN.IsEmpty())
{
AddMsg(MiniCT_0113,M_WARING); //MiniCT_0113 "请给出个体信息!"
pReq->RemoveAll(pReq); //删除证书结构
return;
}
pReq->Add(pReq, "CN", strCN);
GetDlgItemText(IDC_EDIT_E,str);
pReq->Add(pReq, "emailAddress", str);
GetDlgItemText(IDC_EDIT_T,str);
pReq->Add(pReq, "title", str);
GetDlgItemText(IDC_EDIT_G,str);
pReq->Add(pReq, "givenName", str);
GetDlgItemText(IDC_EDIT_S,str);
pReq->Add(pReq, "SN", str);
GetDlgItemText(IDC_EDIT_DAY,str);
if(str=="")
{
AddMsg(MiniCT_0114,M_WARING); //MiniCT_0114 "请给出有效期!"
pReq->RemoveAll(pReq); //删除证书结构
return;
}
CString reqf, key;
reqf.Format("%s\\%s%s", m_Path, strCN, "Req.csr");
key.Format("%s\\%s%s%s", m_Path, strCN, "Key", m_ExtName);
CString len;
GetDlgItemText(IDC_COMBO_L,len);
CString pwd("");
// GetDlgItemText(IDC_EDIT_PWD,pwd);
char reqBuf[10240] = {0};
char keyBuf[10240] = {0};
UINT reqLen = 10240,
keyLen = 10240;
if(MakeReq(pReq, atoi(len), pwd.GetBuffer(0), reqBuf, &reqLen, keyBuf, &keyLen, out, m_CertFormat))
{
FILE * pfc = fopen(reqf,"wb");
if(pfc != NULL)
{
fwrite(reqBuf,sizeof(char),reqLen,pfc);
fclose(pfc);
pfc = fopen(key,"wb");
if(pfc != NULL)
{
fwrite(keyBuf,sizeof(char),keyLen,pfc);
fclose(pfc);
}
}
SetDlgItemText(IDC_EDIT4,reqf);
AddMsg(MiniCT_0120); //MiniCT_0120 "Req制作成功"
pReq->RemoveAll(pReq); //删除证书结构
}
else
AddMsg(out,M_ERROR);
pwd.ReleaseBuffer();
pReq->RemoveAll(pReq); //删除证书结构
}
void CCaCenterPage::OnBMkcert() //req 制作证书
{
// TODO: Add your control notification handler code here
if(m_Path=="")
{
AddMsg(MiniCT_0112,M_WARING); //MiniCT_0112 "请选择输出路径!"
return;
}
CString req,day,outCert,strSN;
GetDlgItemText(IDC_EDIT4,req);
if(req=="")
{
AddMsg(MiniCT_0121,M_WARING); //MiniCT_0121 "请选择证书请求文件!"
return;
}
GetDlgItemText(IDC_EDIT_DAY,day);
if(day=="")
{
AddMsg(MiniCT_0114,M_WARING); //MiniCT_0114 "请给出有效期!"
return;
}
char out[1024]={0};
CString KUSAGE,EKUSAGE;
// GetKeyUsage(KUSAGE,EKUSAGE);//通过配置文件得到密钥用法
CString RootP12,RootPwd;
BOOL ret=FALSE;
DWORD lenCert=0,lenKey=0;//公钥长度,私钥长度
CString strPwd;//公私钥路径或内容,p12密钥
char strCert[10240] = {0};
char strKey[10240] = {0};
char certBuf[10240] = {0};
UINT certLen = 10240;
if(((CMiniCaApp *)AfxGetApp())->GetRootCert(strCert, lenCert, strKey, lenKey,strPwd))
{
GetDlgItemText(IDC_EDIT_SN,strSN);
outCert=m_Path+"\\UserCert";
outCert+=m_ExtName;
stuCertPair RootPair(strCert,lenCert,strKey,lenKey,
strPwd.GetBuffer(0));
strPwd.ReleaseBuffer();
if(MakeCert(RootPair,
atoi(strSN),0,atoi(day),
req.GetBuffer(0),
0,
KUSAGE.GetBuffer(0),
EKUSAGE.GetBuffer(0),
NULL,
certBuf,
&certLen,
out,m_CertFormat))
{
FILE * pfc = fopen(outCert,"wb");
if(pfc != NULL)
{
fwrite(certBuf,sizeof(char),certLen,pfc);
fclose(pfc);
}
AddMsg(MiniCT_0122); //MiniCT_0122 "证书制作成功"
//序号增加一
int iSn = atoi(strSN) + 1;
CString sSn;
sSn.Format("%d",iSn);
WritePrivateProfileString("CA", "SN",sSn,m_IniPathName);
SetDlgItemText(IDC_EDIT_SN,sSn);
}
else
AddMsg(out,M_ERROR);
req.ReleaseBuffer();
KUSAGE.ReleaseBuffer();
EKUSAGE.ReleaseBuffer();
outCert.ReleaseBuffer();
}
else
AddMsg(MiniCT_0123,M_ERROR); //MiniCT_0123 "加载根证书失败"
}
void CCaCenterPage::OnBMkcert2() //直接生成证书
{
// TODO: Add your control notification handler code here
char out[1024] = {0};
char cert[10240] = {0},
key[10240] = {0},
p12[10240] = {0};
UINT certl = 10240,
keyl = 10240,
p12l = 10240;
CString str,day,strSN;
stuSUBJECT * pCERT = NULL;
GetDlgItemText(IDC_EDIT_C,str);
pCERT->Add(pCERT, "C", str);
GetDlgItemText(IDC_EDIT_ST,str);
pCERT->Add(pCERT, "ST", str);
GetDlgItemText(IDC_EDIT_L,str);
pCERT->Add(pCERT, "L", str);
GetDlgItemText(IDC_EDIT_O,str);
pCERT->Add(pCERT, "O", str);
GetDlgItemText(IDC_EDIT_OU,str);
pCERT->Add(pCERT, "OU", str);
CString strCN;
GetDlgItemText(IDC_EDIT_CN,strCN);
if(strCN.IsEmpty())
{
AddMsg(MiniCT_0113,M_WARING); //MiniCT_0113 "请给出个体信息!"
return;
}
pCERT->Add(pCERT, "CN", strCN);
GetDlgItemText(IDC_EDIT_E,str);
pCERT->Add(pCERT, "emailAddress", str);
GetDlgItemText(IDC_EDIT_T,str);
pCERT->Add(pCERT, "title", str);
GetDlgItemText(IDC_EDIT_G,str);
pCERT->Add(pCERT, "givenName", str);
GetDlgItemText(IDC_EDIT_S,str);
pCERT->Add(pCERT, "SN", str);
GetDlgItemText(IDC_EDIT_DAY,day);
CString KUSAGE,EKUSAGE;
if(m_Path=="")
{
AddMsg(MiniCT_0112,M_WARING); //MiniCT_0112 "请选择输出路径!"
pCERT->RemoveAll(pCERT); //删除证书结构
return;
}
if(day=="")
{
AddMsg(MiniCT_0114,M_WARING); //MiniCT_0114 "请给出有效期!"
pCERT->RemoveAll(pCERT); //删除证书结构
return;
}
CMiniMainDlg * pMain = (CMiniMainDlg *)AfxGetMainWnd();
CCertDbPage * pDb = (CCertDbPage *)(pMain->GetPage("CCertDbPage"));
if(pDb)
{
m_NameType = pDb->GetNameType();
}
CString strName;
if(0 == m_NameType)//用户名
{
strName.Format("\\%s", strCN);
}
else if(1 == m_NameType)//序号
{
strName.Format("\\%s", strSN);
}
else if(2 == m_NameType)//用户名 + 序号
{
strName.Format("\\%s%s", strCN, strSN);
}
else if(3 == m_NameType)//序号 + 用户名
{
strName.Format("\\%s%s", strSN, strCN);
}
DWORD lenCert=0,lenKey=0;//公钥长度,私钥长度
CString strPwd;//公私钥路径或内容,p12密钥
char strCert[10240] = {0};
char strKey[10240] = {0};
if(((CMiniCaApp *)AfxGetApp())->GetRootCert(strCert, lenCert, strKey, lenKey,strPwd))
{
GetDlgItemText(IDC_EDIT_SN,strSN);
CString len;
GetDlgItemText(IDC_COMBO_L,len);
CString pwd("");
// GetDlgItemText(IDC_EDIT_PWD,pwd);
stuCertPair RootPair(strCert,lenCert,strKey,
lenKey,strPwd.GetBuffer(0));
strPwd.ReleaseBuffer();
BOOL bRet = DirectCert(RootPair,atoi(len),atoi(strSN),
0,atoi(day),pwd.GetBuffer(0),pCERT,"(MiniCA)",KUSAGE.GetBuffer(0),
EKUSAGE.GetBuffer(0),NULL,
cert,&certl,key,&keyl,p12,&p12l,out,m_CertFormat);
pCERT->RemoveAll(pCERT); //删除证书结构
if(bRet)
{
CString outCert =m_Path + strName + "Cert.cer" ;
CString outKey = m_Path + strName + "Key.cer";
CString p12path = m_Path + strName + ".pfx";
FILE * pfc = fopen(outCert,"wb");
if(pfc != NULL)
{
fwrite(cert,sizeof(char),certl,pfc);
fclose(pfc);
pfc = fopen(outKey,"wb");
if(pfc != NULL)
{
fwrite(key,sizeof(char),keyl,pfc);
fclose(pfc);
AddMsg(MiniCT_0124); //MiniCT_0124 "生成证书成功"
if(m_MadePfx)
{
pfc = fopen(p12path,"wb");
if(pfc != NULL)
{
fwrite(p12,sizeof(char),p12l,pfc);
fclose(pfc);
AddMsg(MiniCT_0125); //MiniCT_0125 "证书PFX包制作成功"
}
else
AddMsg(MiniCT_0126,M_ERROR); //MiniCT_0126 "证书PFX包保存失败"
}
}
else
AddMsg(MiniCT_0127,M_ERROR); //MiniCT_0127 "保存证书私钥失败"
//序号增加一
int iSn = atoi(strSN) + 1;
CString sSn;
sSn.Format("%d",iSn);
WritePrivateProfileString("CA", "SN",sSn,m_IniPathName);
SetDlgItemText(IDC_EDIT_SN,sSn);
}
else
AddMsg(MiniCT_0128,M_ERROR); //MiniCT_0128 "保存证书公钥失败"
pwd.ReleaseBuffer();
KUSAGE.ReleaseBuffer();
EKUSAGE.ReleaseBuffer();
}
else
AddMsg(out, M_ERROR);
}
else
AddMsg(MiniCT_0123,M_ERROR); //MiniCT_0123 "加载根证书失败"
}
void CCaCenterPage::OnBCrl2() //加载信息文件到文本框
{
// TODO: Add your control notification handler code here
CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
MiniCT_0129,NULL); //MiniCT_0129 "证书作废信息文件(*.txt)|*.txt|所有文件(*.*)|*.*||"
CString strTitle = MiniCT_0130; //MiniCT_0130 证书作废信息文件
dlgOpen.m_ofn.lpstrTitle= strTitle;//标题条
if(dlgOpen.DoModal()!=IDOK) return;
CString crlinfo = dlgOpen.GetPathName();
CString info,temp;
if(!crlinfo.IsEmpty())
{
if(CStdioFile stdFile(crlinfo,CFile::modeRead))
{
while(stdFile.ReadString(temp))
{
info += temp;
}
stdFile.Close();
}
}
SetDlgItemText(IDC_EDITCRL,info);
}
void CCaCenterPage::OnBCrl()
{
// TODO: Add your control notification handler code here
if(m_Path=="")
{
AddMsg(MiniCT_0112,M_WARING); //MiniCT_0112 "请选择输出路径!"
return;
}
char out[100]={0};
CString outCrl=m_Path+"MiniCA.crl";
CString RootP12,RootPwd;
DWORD lenCert=0,lenKey=0;//公钥长度,私钥长度
CString strPwd;//公私钥路径或内容,p12密钥
char strCert[10240] = {0};
char strKey[10240] = {0};
if(((CMiniCaApp *)AfxGetApp())->GetRootCert(strCert, lenCert, strKey, lenKey,strPwd))
{
time_t t;
time(&t);
char * Crl=NULL;
stuREVOKE * Head = NULL;//构造空链表
CString strRevoke;
strRevoke.Replace(" ",",");
CString strL;
GetDlgItemText(IDC_EDITCRL,strRevoke);
strRevoke += ",";
for(;;)
{
int state=strRevoke.Find(",");
if(state==-1&&strRevoke.GetLength())
strL=strRevoke;
else if(strRevoke.GetLength()==0)
break;
else strL=strRevoke.Left(state);
if(!strL.IsEmpty())
{
ULONG index = atol(strL.GetBuffer(0));
if(index >0)
Head->AddRevoke(Head,index,t);//增加表象
}
strRevoke=strRevoke.Right(strRevoke.GetLength()-state-1);
strRevoke.TrimLeft();
}
stuCertPair RootPair(strCert,lenCert,strKey,lenKey,
strPwd.GetBuffer(0));
if(MakeCrl(RootPair,Head,NULL,Crl,NULL,outCrl.GetBuffer(0),out))
AddMsg(out);
else
AddMsg(out,M_ERROR);
Head->RemoveAll(Head);
}
else
AddMsg(MiniCT_0123,M_ERROR); //MiniCT_0123 "加载根证书失败"
}
void CCaCenterPage::OnCheck() //选择证书格式---〉输出
{
// TODO: Add your control notification handler code here
int check=((CButton *)GetDlgItem(IDC_CHECK))->GetCheck();
if(check)
{
m_CertFormat=DER;
m_ExtName=".cer";
}
else
{
m_CertFormat=PEM;
m_ExtName=".cer";
}
}
void CCaCenterPage::OnCheckP12()
{
// TODO: Add your control notification handler code here
m_MadePfx=((CButton *)GetDlgItem(IDC_CHECK_P12))->GetCheck();
}
BOOL CCaCenterPage::PreTranslateMessage(MSG* pMsg)
{
// CG: The following block was added by the ToolTips component. { // Let the ToolTip process this message. m_toolTip.RelayEvent(pMsg); } return CPropertyPage::PreTranslateMessage(pMsg); // CG: This was added by the ToolTips component.
}
void CCaCenterPage::AddMsg(CString info, DWORD type)
{
CMiniMainDlg * pMain = (CMiniMainDlg *)GetParent();
pMain->AddMsg("MiniCA V2.0",info, type);
}
void CCaCenterPage::SetNamePath(const CString &strPath) //CCertDbPage类中使用
{
if(!strPath.IsEmpty())
{
SetDlgItemText(IDC_EDIT_PATH,strPath);
m_Path = strPath;
}
}
void CCaCenterPage::TranslateCT() //繙譯諸如樹型控件,列錶控件等內容
{
SetDlgItemText(IDC_EDIT_C, MiniCT_0102); //MiniCT_0102 "中国"
SetDlgItemText(IDC_EDIT_ST, MiniCT_0103); //MiniCT_0103 "河北"
SetDlgItemText(IDC_EDIT_L, MiniCT_0104);//MiniCT_0104
SetDlgItemText(IDC_EDIT_O, MiniCT_0105); //MiniCT_0105 "MiniSoft"
SetDlgItemText(IDC_EDIT_OU, MiniCT_0106); //MiniCT_0106 "MiniCA"
SetDlgItemText(IDC_EDIT_CN, MiniCT_0107); //MiniCT_0107 "MiniCA"
SetDlgItemText(IDC_EDIT_T, MiniCT_0108); //MiniCT_0108 "MiniCA"
SetDlgItemText(IDC_EDIT_G, MiniCT_0109); //MiniCT_0109 "MiniCA"
SetDlgItemText(IDC_EDIT_S, MiniCT_0110); //MiniCT_0110 "MiniCA"
SetDlgItemText(IDC_EDIT_E, MiniCT_0111);//MiniCT_0111 "hpxs@hotmail.com"
//翻译STATIC文字
SetDlgItemText(IDC_STATIC_CA1, MiniCT_10101);
SetDlgItemText(IDC_STATIC_CN, MiniCT_10102);
SetDlgItemText(IDC_STATIC_CA2, MiniCT_10103);
SetDlgItemText(IDC_STATIC_CA3, MiniCT_10104);
SetDlgItemText(IDC_STATIC_CA4, MiniCT_10105);
SetDlgItemText(IDC_STATIC_CA5, MiniCT_10106);
SetDlgItemText(IDC_STATIC_CA6, MiniCT_10107);
SetDlgItemText(IDC_STATIC_CA7, MiniCT_10108);
SetDlgItemText(IDC_STATIC_CA8, MiniCT_10109);
SetDlgItemText(IDC_STATIC_CA9, MiniCT_10110);
SetDlgItemText(IDC_STATIC_CA10, MiniCT_10111);
SetDlgItemText(IDC_STATIC_CA11, MiniCT_10112);
SetDlgItemText(IDC_STATIC_CA12, MiniCT_10113);
SetDlgItemText(IDC_STATIC_CA13, MiniCT_10114);
SetDlgItemText(IDC_STATIC_CA14, MiniCT_10115);
SetDlgItemText(IDC_STATIC_CA15, MiniCT_10116);
SetDlgItemText(IDC_STATIC_CA16, MiniCT_10117);
SetDlgItemText(IDC_STATIC_CA17, MiniCT_10118);
SetDlgItemText(IDC_STATIC_CA18, MiniCT_10119);
SetDlgItemText(IDC_STATIC_CA19, MiniCT_10120);
SetDlgItemText(IDC_CHECK, MiniCT_10121);
SetDlgItemText(IDC_CHECK_P12, MiniCT_10122);
SetDlgItemText(IDC_B_MKROOT, MiniCT_10123);
SetDlgItemText(IDC_B_MKCERT2, MiniCT_10124);
SetDlgItemText(IDC_B_CRL, MiniCT_10125);
SetDlgItemText(IDC_B_CRL2, MiniCT_10126);
SetDlgItemText(IDC_B_MKREQ, MiniCT_10127);
SetDlgItemText(IDC_B_MKCERT, MiniCT_10128);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -