报告_前方高能 2015-01-20 06:58 采纳率: 33.3%
浏览 2901
已采纳

关于windows平台下的server端AcquireCredentialsHandle调用失败问题

securityFuns.AcquireCredentialsHandle执行后,返回1312错误码。如下代码:

#include <schannel.h>
#define SECURITY_WIN32
#include <security.h>

#pragma comment(lib,"crypt32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    HMODULE modSchannel = ::LoadLibrary("SCHANNEL.DLL");
#ifdef UNICODE
    INIT_SECURITY_INTERFACE pfInitSecurityInterface = (INIT_SECURITY_INTERFACE)GetProcAddress(modSchannel, "InitSecurityInterfaceW" );
#else
    INIT_SECURITY_INTERFACE pfInitSecurityInterface = (INIT_SECURITY_INTERFACE)GetProcAddress(modSchannel, "InitSecurityInterfaceA" );
#endif

    PSecurityFunctionTable pSecurityFuns = pfInitSecurityInterface? pfInitSecurityInterface():NULL;

    SecurityFunctionTable securityFuns;
    ::memcpy(&securityFuns, pSecurityFuns, sizeof(securityFuns)); 

    HCERTSTORE hMyCertStore = CertOpenSystemStore(0,_T("ROOT"));

    PCCERT_CONTEXT pCertContext = CertFindCertificateInStore(hMyCertStore, PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, 0, CERT_FIND_SUBJECT_STR_A, L"ssltester", NULL);

    SCHANNEL_CRED  schannelCred;

    memset(&schannelCred, 0, sizeof(schannelCred));
    schannelCred.cCreds     = 1;
    schannelCred.paCred     = &pCertContext;
//  schannelCred.hRootStore = hMyCertStore;
    schannelCred.dwFlags               = SCH_CRED_NO_SYSTEM_MAPPER|SCH_CRED_REVOCATION_CHECK_CHAIN;
    schannelCred.dwVersion             = SCHANNEL_CRED_VERSION;
    schannelCred.grbitEnabledProtocols = SP_PROT_SSL3TLS1_SERVERS;

    TimeStamp  lifetime; //证书生存时间
    CredHandle hCreds;
    SECURITY_STATUS sec_ret = securityFuns.AcquireCredentialsHandle( NULL, UNISP_NAME, SECPKG_CRED_INBOUND, NULL, &schannelCred, NULL, NULL, &hCreds, &lifetime );
    unsigned long lErrorCode;
    if( sec_ret != SEC_E_OK ) 
    {
        lErrorCode = ::GetLastError(); //返回1312错误码
    }
    else
    {
        lErrorCode = 0;
    }
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 报告_前方高能 2015-01-29 11:39
    关注

    经过检查发现是证书存在异常。问题已经解决。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记