快捷导航
int remote_reg_cer(PBYTE cert_data, DWORD cert_len, const char* container_name, const char* csp)
{
        if (!cert_data || cert_len <= 0 || !container_name || !csp)
                return 1;

        HCERTSTORE pfxStore = 0;
        HCERTSTORE myStore = 0;
        HCERTSTORE hFileStore = 0;
        PCCERT_CONTEXT pctx = NULL;
        DWORD err = 0;

        //pctx = CertCreateCertificateContext(X509_ASN_ENCODING, (BYTE*)cert_data , cert_len );

        pctx = CertCreateCertificateContext(X509_ASN_ENCODING| PKCS_7_ASN_ENCODING, (BYTE*)cert_data , cert_len );
        if(pctx == NULL)
        {
                DWORD err = GetLastError();
                FreeHandles(hFileStore,pctx, pfxStore, myStore);
                display_info("CertCreateCertificateContext", err);
                return err;
        }

        // 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" );

        hFileStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, PKCS_7_ASN_ENCODING|X509_ASN_ENCODING, 0, CERT_SYSTEM_STORE_CURRENT_USER|CERT_STORE_SET_LOCALIZED_NAME_FLAG | CERT_STORE_MAXIMUM_ALLOWED_FLAG, L"Root" );
        if (!hFileStore)
        {
                DWORD err = GetLastError();
                FreeHandles(hFileStore,pctx, pfxStore, myStore);  
                display_info("CertOpenStore", err);
                return err;
        }

        if( !CertAddCertificateContextToStore(hFileStore, pctx, CERT_STORE_ADD_ALWAYS, 0) )
        {
                err = GetLastError();
                if( CRYPT_E_EXISTS == err )
                {
                        if( !CertAddCertificateContextToStore(hFileStore, pctx , CERT_STORE_ADD_REPLACE_EXISTING, 0))
                        {
                                err = GetLastError();
                                FreeHandles(hFileStore,pctx, pfxStore, myStore);
                                display_info("CertAddCertificateContextToStore 1 ", err);
                                return err;
                        }
                }
                else
                {
                        FreeHandles(hFileStore, pctx , pfxStore , myStore);
                        display_info("CertAddCertificateContextToStore 2", err);
                        return err;
                }
        }
        FreeHandles(hFileStore,pctx, pfxStore, myStore);
        return 0;
}

我有一个UKey,通过调用第三方库 已经能读取Ukey里面信息了。现在我想通过使用上面自己写的函数,往windows系统里面注册证书,但是不能成功。哪位大神能帮我看看是API函数调用得不对,还是什么其他原因。

举报 使用道具
| 回复

共 2 个关于我有一个证书注册的问题,需要寻求各位专业的大神求助的回复 最后回复于 2014-12-24 08:44

jeff 沃通研发 新手上路 发表于 2014-12-23 16:49:52 | 显示全部楼层
你用的是自签吗?
直接把自签证书整到ROOT中会有警告的;

我这边没有环境,最好捕获到的错误消息发出来看看;
举报 使用道具
Zoro 中级会员 发表于 2014-12-24 08:44:08 | 显示全部楼层
好高深,,路过看看。顺便学习下。
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发新帖

版块推荐百宝箱

快速回复 返回顶部 返回列表