1

因此,我编写了一个使用requests_pkcs12-library和 .p12-cert 的刮板。

目前我提出了很多请求,我按照文档中的描述使用它

from requests_pkcs12 import get

r = get('https://example.com/test', pkcs12_filename='clientcert.p12', pkcs12_password='correcthorsebatterystaple') 

文档还显示您可以在会话中使用它。

from requests import Session 
from requests_pkcs12 import Pkcs12Adapter 

session = Session()
session.mount('https://example.com', Pkcs12Adapter(pkcs12_filename='clientcert.p12', pkcs12_password='correcthorsebatterystaple')) 
r = session.get('https://example.com/test')

所以这也很好。但是这样做有什么好处呢?它是否对它进行身份验证的服务器施加了较小的压力?

它似乎没有向会话添加经过身份验证的 cookie,所以我想知道为什么一个会比另一个更受欢迎。

有人知道吗?

提前致谢

4

1 回答 1

2

是的,使用会话可以提高客户端的性能并减少服务器端的负载。

请注意,这几乎与库无关requests_pkcs12,而是库的通用机制requests

requests手册指出:

Session 对象允许您跨请求保留某些参数。它还在从 Session 实例发出的所有请求中保留 cookie,并将使用 urllib3 的连接池。因此,如果您向同一主机发出多个请求,则底层 TCP 连接将被重用,这可能会显着提高性能(请参阅HTTP 持久连接)。

HTTP 持久连接的链接 Wikipedia 条目指出:

优点

并且关于TLS 握手的 Wikipedia 部分指出:

客户端认证的 TLS 握手

...

  1. 谈判阶段:
    • ...
    • 服务器发送一个 CertificateRequest 消息,向客户端请求一个证书,以便可以相互验证连接。
    • ...
    • 客户端使用包含客户端证书的证书消息进行响应。

总而言之,使用requests会话会导致连接池,从而导致更少的 TCP 连接和更少的 TLS 握手,这反过来意味着更少的客户端证书身份验证。请注意,这与客户端证书如何提供给 无关requests,无论是 PKCS12 格式(使用requests_pkcs12)还是 PEM 格式(使用 plain requests)。

于 2020-07-04T06:29:29.587 回答