Skip to content

OpenSSL 3.0 performance issue: SSLContext.set_default_verify_paths / load_verify_locations about 5x slower #95031

Description

@fcfangcc

Bug report
Example code in ubuntu20.04(openssl1.1) is much faster than ubuntu22.04(openssl3.x)
Not just speed, CPU occupancy ubuntu22.04(openssl3.x) is many times of ubuntu20.04(openssl1.1)
I'm not sure whether it's OpenSSL or Python adaptation problem

importsocketimportsslimporttimeimportcertifihostname='www.python.org'# any support https hostnametimes=100pem_where=certifi.where()
context=ssl.create_default_context()
verify_total_time=0foriinrange(times):
withsocket.create_connection((hostname, 443)) assock:
withcontext.wrap_socket(sock, server_hostname=hostname) asssock:
verify_start_time=time.time()
context.load_verify_locations(pem_where)
verify_total_time+=time.time() -verify_start_timessock.version()
print(f"total {verify_total_time:.4f}, avg {verify_total_time/times:.4f}")

in my environment with docker:

 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3321 root 20 0 304140 81148 12792 S 42.0 0.8 0:29.69 ipython (ubuntu22.04)
3850 root 20 0 203348 52632 11576 S 16.7 0.5 0:06.34 ipython (ubuntu20.04)
total 5.8634, avg 0.0586 (ubuntu22.04)
total 0.6753, avg 0.0068 (ubuntu20.04)

Your environment

  • CPython versions tested on: 3.10.5
  • Operating system and architecture: ubuntu20.04(openssl1.1) and ubuntu22.04(openssl3.0.2), build from source
  • certifi==2022.6.15

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.12only security fixesextension-modulesC modules in the Modules dirperformancePerformance or resource usagetype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions