是否可以减少tls客户端证书的签名操作次数?

问题描述 投票:0回答:1

这不是特定于 golang 的问题。但要做好准备: 我正在使用 golang 和 tls 客户端证书。

tls客户端证书配置如下:

cert := tls.Certificate{
    Certificate: crtbytes,
    PrivateKey: signer,
}

这工作正常并且使用了 tls,但是每次调用签名者 .Sign 时,都会发出 UI 提示,要求手动输入 PIN 码进行签名。 我已经审查了系统,并且在签名时无法避免此 PIN 提示,因此剩下的唯一选择就是以某种方式减少 tls 执行的签名操作的数量。

证书和 tls 用于与有限数量的服务器建立多个 HTTPS 连接。

通读 crypto/tls 文档,我找不到任何有用的东西。

TLS 规范是否支持任何可以减少所需签名数量的措施?

go ssl cryptography
1个回答
0
投票

通常,当您建立 TLS 连接时,服务器可以请求客户端证书,如果是这样,双方都会有一个签名。 (如果您使用的是 HTTP/2,则在大多数情况下通常只有一个连接。)服务器“可能”(但不是必需)发出会话票证,将其发送到客户端,客户端将其发送给客户端。客户端可以在后续会话中使用来恢复该会话,而无需完整密钥交换过程的开销。

但是

,会话票证通常是一组由服务器端的对称密钥加密的密钥材料,因此使用会话票证破坏了连接的完美前向保密性,从而削弱了安全性。如果服务器使用 OpenSSL,它也会降低连接的安全性,因为始终使用固定算法。 客户端还必须具有存储该会话票证并重用它的状态(浏览器通常这样做,但其他客户端通常不这样做),但在这些限制内,这可能是解决您的问题的一个可能的解决方案,但代价是完美的前向保密.

如果私钥存储在某种安全密钥中,则可以配置安全密钥,使其不需要 PIN。这仍然需要安全密钥的存在,因为无法从中提取密钥材料,但这会减轻用户的负担。这可能是一个足够的解决方案,尽管您的问题确实暗示在您的配置中这是不可能的。

您还可以将服务器配置为通常不需要客户端证书,但有时(例如每天一次)将客户端重定向到

需要

通过单点登录机制获取客户端证书的站点(例如,OpenID 或 SAML),然后对用户进行身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.