加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用Indy组件验证智能卡凭据

发布时间:2020-12-16 07:15:16 所属栏目:百科 来源:网络整理
导读:Indy组件是否具有验证智能卡(CAC)凭据的任何功能?我假设它必须与InitializeSecurityContext一起使用. 我在C Builder Seattle中使用它,但即使是Delphi的例子也会受到赞赏. 这是我到目前为止所知道的: 打开系统证书存储区(CertOpenSystemStore)并让它 用户选
Indy组件是否具有验证智能卡(CAC)凭据的任何功能?我假设它必须与InitializeSecurityContext一起使用.

我在C Builder Seattle中使用它,但即使是Delphi的例子也会受到赞赏.

这是我到目前为止所知道的:

>打开系统证书存储区(CertOpenSystemStore)并让它
用户选择证书(CryptUIDlgSelectCertificateFromStore).
>获取凭据句柄(AcquireCredentialsHandle).
>使用安全端口443使用TIdTCPClient和TIdSSLIOHandlerSocketOpenSSL连接到我的服务器.
>调用返回SEC_I_CONTINUE_NEEDED的InitializeSecurityContext.

在那之后,我不确定应该将什么发送到服务器以及期待什么作为回报.此时系统应该询问用户PIN码?

谢谢

解决方法

当您获得SEC_I_CONTINUE_NEEDED时,您应该将输出令牌数据传输到服务器,等待响应令牌,然后将其传递回InitializeSecurityContext().现在,您实际上如何来回传输数据取决于您用于与服务器通信的特定协议.

例如,在TIdHTTP中,Indy有一个TIdSSPINTLMAuthentication类,用于使用您使用的相同API处理NTLM身份验证.它初始化NTML安全包,然后使用InitializeSecurityContext()来检索包含NTLM令牌数据的字节缓冲区,然后将base64编码放入HTTP Authorization:NTML …请求标头中.当响应返回时,如果它具有提供响应令牌数据的HTTP WWW-Authenticate:NTLM …头,则对数据进行base64解码,并将得到的字节反馈到InitializeSecurityContext()中.

因此,您需要确定用于与服务器通信的通信协议,以及该协议期望您来回传输令牌字节的方式.这超出了Indy的范围.它为您提供了发送和接收字节的方法,但您必须根据需要提供和读取它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读