我正在尝试使用SChannel
用C ++制作具有SSL通讯功能的RPC服务器,并且所有与SCHANNEL_CRED
和主体名称的绑定和设置都很好,直到我进入{{1} }生成的RPC客户端。当我尝试调试上述方法时,出现一个异常:NdrGetBuffer
。
RPC_S_UNKNOWN_AUTHN_SERVICE 1747
服务器端:
NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle );
我正在检查每个结果,所有结果都返回RpcServerUseProtseqEp( L"ncalrpc",
RPC_C_LISTEN_MAX_CALLS_DEFAULT,
L"appropriate endpoint",
NULL );
store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, (HCRYPTPROV)NULL, CERT_SYSTEM_STORE_CURRENT_USER, L"My");
cert = CertFindCertificateInStore(store, X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_STR_A, CertCommonName, NULL);
ZeroMemory(&SchannelCred, sizeof(SchannelCred));
SchannelCred.dwVersion = SCHANNEL_CRED_VERSION;
SchannelCred.cCreds = 1;
SchannelCred.paCred = &cert;
RpcCertGeneratePrincipalNameW( cert, RPC_C_FULL_CERT_CHAIN, &PrincipalName );
RpcServerRegisterAuthInfoW( PrincipalName, RPC_C_AUTHN_GSS_SCHANNEL, NULL, &SchannelCred );
RpcServerRegisterIf2( ifspec, // generated by the MIDL
NULL,
NULL,
RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH,
RPC_C_LISTEN_MAX_CALLS_DEFAULT,
-1,
SecurityCallback );
RpcServerListen( MinCalls
MaxCalls
TRUE );
。
客户侧:
RPC_S_OK
再次进行所有检查似乎都成功通过了,但是当我开始使用开头提到的方法时,就会发生异常。
有人知道可能是什么问题吗?