Wininet SSL 与每个请求的客户端证书智能卡访问

Posted

技术标签:

【中文标题】Wininet SSL 与每个请求的客户端证书智能卡访问【英文标题】:Wininet SSL with client certificate smart card access for each request 【发布时间】:2012-12-30 07:40:39 【问题描述】:

我正在使用 Wininet 库与客户端证书(存储在智能卡上)建立 SSL 连接。

问题是我看到每个已发送的 HttpRequest 都访问了智能卡。

从 Fidler 和 wireshark,我看到: 1.所有请求都是HTTP 1.0而不是HTTP 1.1。 2. 每个连接都进行完整的 SSL 握手 3. 没有要求我为每个请求输入 pin 码(仅针对第一个请求),但我发送的每个请求都会访问智能卡。

任何想法/线索?实际上,问题可能与 wininet 无关,但应该对证书存储采取额外的步骤?

谢谢你, 扎哈尔

【问题讨论】:

【参考方案1】:

好吧,我还是不明白为什么wininet ssl连接是HTTP 1.0而不是HTTP 1.1(根据MSDN应该是HTTP 1.1。),在wininet.h中明确HTTP版本是1.0。

关于完全握手: 我不能使用 INTERNET_FLAG_IGNORE_CERT_CN_INVALIDINTERNET_FLAG_IGNORE_CERT_DATE_INVALID 或相关的证书忽略标志来忽略任何证书错误或证书验证检查。 IE wininet 代码强制检查,看看您是否没有使用常规 IE 例程来处理安全性。如果安全检查被忽略或禁用,wininet 将为每个单独的请求强制执行一个新的 SSL 套接字。这意味着当安全检查被禁用时,请求不会一起共享。这是一种安全设计,用于确认您确实希望忽略/禁用每个请求的证书检查,而不是在多个请求之间共享未经验证的 SSL 会话。

问候, 扎哈尔

【讨论】:

以上是关于Wininet SSL 与每个请求的客户端证书智能卡访问的主要内容,如果未能解决你的问题,请参考以下文章

在 WinINet 中手动验证服务器证书

OpenSSL WinINET 客户端

使用 WinInet 的客户端身份验证(证书 + 私钥)

Apache 不会请求我的 SSL 客户端证书

个人见解SSL原理

Python请求-客户端证书的SSL错误