高手进,如何注册(安装)证书

chayedanwc 2013-05-09 12:54:01
我有一个“.p7b”证书,用于Excel的VBA授权,想写个程序安装该证书,需要安装到“受信任的根证书颁发机构”和“受信任的发布者”中,如何写程序实现?
求大神帮忙。

下面有一段代码,但是CertCreateCertificateContext调用失败。

void CInstallCertificateDlg::OnBnClickedButtonInstall()
{
HCERTSTORE pfxStore = 0;
HCERTSTORE myStore = 0;
HCERTSTORE hFileStore = 0;
HANDLE hsection = 0;
void* pfx = NULL;
HANDLE hfile = INVALID_HANDLE_VALUE;
PCCERT_CONTEXT pctx = NULL;

// Get path of the CA certificate from the edit box
// Open it...
hfile = CreateFile(_T("excel.p7b"), FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (INVALID_HANDLE_VALUE == hfile)
{
::MessageBox(NULL,_T("Certificate not found. Check that the path indicated is correct."),_T("information"), MB_ICONERROR);
return;
}
hsection = CreateFileMapping(hfile, 0, PAGE_READONLY, 0, 0, 0);
if (!hsection)
{
goto EXIT;
}
pfx = MapViewOfFile(hsection, FILE_MAP_READ, 0, 0, 0);
if (!pfx)
{
goto EXIT;
}
int nFilesize=GetFileSize(hfile,0);
pctx = CertCreateCertificateContext(MY_ENCODING_TYPE, (BYTE*)pfx,nFilesize );
DWORD dwError = GetLastError();
if(pctx == NULL)
{
goto EXIT;
}
// we open the store for the CA
hFileStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_STORE_OPEN_EXISTING_FLAG | CERT_SYSTEM_STORE_LOCAL_MACHINE, L"Root" );

if (!hFileStore)
{
goto EXIT;
}
if(!CertAddCertificateContextToStore(hFileStore, pctx, CERT_STORE_ADD_NEW, 0))
{

DWORD err = GetLastError();
if (CRYPT_E_EXISTS == err)
{
if(::MessageBox(NULL,_T("An equivalent previous personal certificate already exists. Overwrite ? (Yes/No)"),_T("Prompt"), MB_YESNO) == IDYES)
{
if (!CertAddCertificateContextToStore(hFileStore, pctx, CERT_STORE_ADD_REPLACE_EXISTING, 0))
{
goto EXIT;
}
}
}
else
{
goto EXIT;
}
}
return;
EXIT:
return;

}
...全文
157 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimette 2013-05-09
  • 打赏
  • 举报
回复
傻X 2013-05-09
  • 打赏
  • 举报
回复
收藏了,感觉这个帖子可以推荐下。
liuli7786 2013-05-09
  • 打赏
  • 举报
回复
自己动手,丰衣足食,不错不错!感谢分享。
oyljerry 2013-05-09
  • 打赏
  • 举报
回复
感谢分享.
chayedanwc 2013-05-09
  • 打赏
  • 举报
回复
问题解决了,跟大家分享一下方法 上述的代码是完整的安装root证书的代码,问题在于证书的类型,将证书“excel.p7b”设置为X509类型的证书就正常了。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧