【问题标题】:Should I use a session with p12-certificate我应该使用带有 p12-certificate 的会话吗
【发布时间】:2020-07-03 15:18:55
【问题描述】:

所以我编写了一个使用 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,所以我想知道为什么一个会比另一个更受欢迎。

有人知道吗?

提前致谢

【问题讨论】:

    标签: python-requests pkcs#12 p12


    【解决方案1】:

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

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

    requests manual 声明:

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

    HTTP persistent connection 的链接维基百科条目指出:

    优势

    • ...
    • 由于更少的新连接和TLS handshakes,减少了CPU 的使用和往返次数。

    TLS handshakes 上的维基百科部分指出:

    经过客户端验证的 TLS 握手

    ...

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 2011-04-25
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多