我是 PKCS#11 和通用访问卡的新手,但据我了解,在卡上你有可以提取的证书和不能提取的私钥。我正在尝试编写一个与需要证书进行身份验证的 Web 服务器通信的应用程序。硬件供应商提供的 PKCS 库非常薄。我基本上可以使用卡上私钥访问证书对象或签署数据。
我不确定在连接到网络服务器时如何处理握手等。我是否应该提供证书以及由私钥签名的其他内容?如果是这样,我用私钥签名的是什么?我已经用谷歌搜索了这个,但找不到这个过程的某种解释。
如果您使用通用访问卡上的 RSA 密钥进行身份验证,则需要CertificateVerify
在握手中发送一条消息,其中包含到该点的握手记录上的数字签名。当然,您还需要发送客户端证书。有关详细信息,请参阅TLS 规范的第 7.4.8 节。
希望您的 TLS 库支持使用 PKCS #11 加密模块。如果没有,您可能需要切换。在不熟悉规范的情况下自己实现 TLS 是不合理的。
我认为您只需要从您的 PKCS#11 设备中检索您的客户端证书,然后在您向 Web 服务器发出的请求中使用它。如果您使用现有库,则不需要实施 SSL。它们应该包含您需要的所有内容。