怎么用代码实现CA证书安装?
WINDOWS, VC, 怎么用代码安装一个 ca.crt 证书到 信任的根证书区?
[解决办法]
Windows系统安全原理与技术 这书有详细的论述,你去下一本看看。
然后,用代码或角本去实现。
[解决办法]
DWORD _stdcall CSPRegistCert
(
IN BYTE *pbCert,
IN DWORD dwCertLen,
IN DWORD dwKeySpec,
IN LPCSTR szContainer
)
{
DWORD dwRet,dwCSPNameLen,dwStoreNameLen,dwConNameLen,dwProviderLen;
LPWSTR wszCSPName=NULL,wszStoreName=NULL,wszConName=NULL;
char szProvider[256];
// we use unicode, its default code for register cert
dwStoreNameLen=(strlen("MY")+1)*sizeof(WCHAR);
wszStoreName=(LPWSTR)malloc(dwStoreNameLen);
// covert multi characters to wide characters
dwProviderLen=sizeof(szProvider)-1;
memset(szProvider,0x00,sizeof(szProvider));
HRGetCSPProvider(szProvider,&dwProviderLen);
dwCSPNameLen=(strlen(szProvider)+1)*sizeof(WCHAR);
wszCSPName=(LPWSTR)malloc(dwCSPNameLen);
dwConNameLen=(strlen(szContainer)+1)*sizeof(WCHAR);
wszConName=(LPWSTR)malloc(dwConNameLen);
if (wszCSPName==NULL || wszStoreName==NULL || wszConName==NULL)
{
dwRet=ERROR_NOT_ENOUGH_MEMORY;
goto err;
}
memset(wszCSPName,0x00,dwCSPNameLen);
memset(wszStoreName,0x00,dwStoreNameLen);
memset(wszConName,0x00,dwConNameLen);
MultiByteToWideChar(CP_ACP,0,szProvider,-1,wszCSPName,dwCSPNameLen);
MultiByteToWideChar(CP_ACP,0,"MY",-1,wszStoreName,dwStoreNameLen);
MultiByteToWideChar(CP_ACP,0,szContainer,-1,wszConName,dwConNameLen);
if(dwRet=CSPAddCertToIE((BYTE*)pbCert,dwCertLen,dwKeySpec,wszConName,wszCSPName,wszStoreName))
goto err;
free(wszConName);
free(wszCSPName);
free(wszStoreName);
return 0;
err:
if (wszConName!=NULL)
free(wszConName);
if (wszCSPName!=NULL)
free(wszCSPName);
if (wszStoreName!=NULL)
free(wszStoreName);
return dwRet;
}
[解决办法]
学习一下
其实不安装也可以用