mirror of
https://github.com/python/cpython.git
synced 2025-10-10 00:43:41 +00:00
Issue #19940: ssl.cert_time_to_seconds() now interprets the given time string in the UTC timezone (as specified in RFC 5280), not the local timezone.
Patch by Akira.
This commit is contained in:
parent
3a74ce2088
commit
c695c95626
5 changed files with 126 additions and 16 deletions
32
Lib/ssl.py
32
Lib/ssl.py
|
@ -879,12 +879,34 @@ def wrap_socket(sock, keyfile=None, certfile=None,
|
|||
# some utility functions
|
||||
|
||||
def cert_time_to_seconds(cert_time):
|
||||
"""Takes a date-time string in standard ASN1_print form
|
||||
("MON DAY 24HOUR:MINUTE:SEC YEAR TIMEZONE") and return
|
||||
a Python time value in seconds past the epoch."""
|
||||
"""Return the time in seconds since the Epoch, given the timestring
|
||||
representing the "notBefore" or "notAfter" date from a certificate
|
||||
in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C locale).
|
||||
|
||||
import time
|
||||
return time.mktime(time.strptime(cert_time, "%b %d %H:%M:%S %Y GMT"))
|
||||
"notBefore" or "notAfter" dates must use UTC (RFC 5280).
|
||||
|
||||
Month is one of: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
|
||||
UTC should be specified as GMT (see ASN1_TIME_print())
|
||||
"""
|
||||
from time import strptime
|
||||
from calendar import timegm
|
||||
|
||||
months = (
|
||||
"Jan","Feb","Mar","Apr","May","Jun",
|
||||
"Jul","Aug","Sep","Oct","Nov","Dec"
|
||||
)
|
||||
time_format = ' %d %H:%M:%S %Y GMT' # NOTE: no month, fixed GMT
|
||||
try:
|
||||
month_number = months.index(cert_time[:3].title()) + 1
|
||||
except ValueError:
|
||||
raise ValueError('time data %r does not match '
|
||||
'format "%%b%s"' % (cert_time, time_format))
|
||||
else:
|
||||
# found valid month
|
||||
tt = strptime(cert_time[3:], time_format)
|
||||
# return an integer, the previous mktime()-based implementation
|
||||
# returned a float (fractional seconds are always zero here).
|
||||
return timegm((tt[0], month_number) + tt[2:6])
|
||||
|
||||
PEM_HEADER = "-----BEGIN CERTIFICATE-----"
|
||||
PEM_FOOTER = "-----END CERTIFICATE-----"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue