11"""Make the custom certificate and private key files used by test_ssl
22and friends."""
33
4+ import argparse
45import os
56import pprint
67import shutil
78import tempfile
89from subprocess import *
910
1011startdate = "20180829142316Z"
11- enddate = "20371028142316Z"
12+ enddate_default = "20371028142316Z"
13+ days_default = "7000"
1214
1315req_template = """
1416 [ default ]
7981 default_startdate = {startdate}
8082 enddate = {enddate}
8183 default_enddate = {enddate}
82- default_days = 7000
83- default_crl_days = 7000
84+ default_days = {days}
85+ default_crl_days = {days}
8486 certificate = pycacert.pem
8587 private_key = pycakey.pem
8688 serial = $dir/serial
117119here = os .path .abspath (os .path .dirname (__file__ ))
118120
119121
120- def make_cert_key (hostname , sign = False , extra_san = '' ,
122+ def make_cert_key (cmdlineargs , hostname , sign = False , extra_san = '' ,
121123 ext = 'req_x509_extensions_full' , key = 'rsa:3072' ):
122124 print ("creating cert for " + hostname )
123125 tempnames = []
@@ -130,11 +132,12 @@ def make_cert_key(hostname, sign=False, extra_san='',
130132 hostname = hostname ,
131133 extra_san = extra_san ,
132134 startdate = startdate ,
133- enddate = enddate
135+ enddate = cmdlineargs .enddate ,
136+ days = cmdlineargs .days
134137 )
135138 with open (req_file , 'w' ) as f :
136139 f .write (req )
137- args = ['req' , '-new' , '-nodes' , '-days' , '7000' ,
140+ args = ['req' , '-new' , '-nodes' , '-days' , cmdlineargs . days ,
138141 '-newkey' , key , '-keyout' , key_file ,
139142 '-extensions' , ext ,
140143 '-config' , req_file ]
@@ -175,7 +178,7 @@ def make_cert_key(hostname, sign=False, extra_san='',
175178def unmake_ca ():
176179 shutil .rmtree (TMP_CADIR )
177180
178- def make_ca ():
181+ def make_ca (cmdlineargs ):
179182 os .mkdir (TMP_CADIR )
180183 with open (os .path .join ('cadir' ,'index.txt' ),'a+' ) as f :
181184 pass # empty file
@@ -192,7 +195,8 @@ def make_ca():
192195 hostname = 'our-ca-server' ,
193196 extra_san = '' ,
194197 startdate = startdate ,
195- enddate = enddate
198+ enddate = cmdlineargs .enddate ,
199+ days = cmdlineargs .days
196200 )
197201 t .write (req )
198202 t .flush ()
@@ -219,14 +223,22 @@ def make_ca():
219223 shutil .copy ('capath/ceff1710.0' , 'capath/b1930218.0' )
220224
221225
222- def print_cert (path ):
226+ def write_cert_reference (path ):
223227 import _ssl
224- pprint .pprint (_ssl ._test_decode_cert (path ))
228+ refdata = pprint .pformat (_ssl ._test_decode_cert (path ))
229+ print (refdata )
230+ with open (path + '.reference' , 'w' ) as f :
231+ print (refdata , file = f )
225232
226233
227234if __name__ == '__main__' :
235+ parser = argparse .ArgumentParser (description = 'Make the custom certificate and private key files used by test_ssl and friends.' )
236+ parser .add_argument ('--days' , default = days_default )
237+ parser .add_argument ('--enddate' , default = enddate_default )
238+ cmdlineargs = parser .parse_args ()
239+
228240 os .chdir (here )
229- cert , key = make_cert_key ('localhost' , ext = 'req_x509_extensions_simple' )
241+ cert , key = make_cert_key (cmdlineargs , 'localhost' , ext = 'req_x509_extensions_simple' )
230242 with open ('ssl_cert.pem' , 'w' ) as f :
231243 f .write (cert )
232244 with open ('ssl_key.pem' , 'w' ) as f :
@@ -243,24 +255,24 @@ def print_cert(path):
243255 f .write (cert )
244256
245257 # For certificate matching tests
246- make_ca ()
247- cert , key = make_cert_key ('fakehostname' , ext = 'req_x509_extensions_simple' )
258+ make_ca (cmdlineargs )
259+ cert , key = make_cert_key (cmdlineargs , 'fakehostname' , ext = 'req_x509_extensions_simple' )
248260 with open ('keycert2.pem' , 'w' ) as f :
249261 f .write (key )
250262 f .write (cert )
251263
252- cert , key = make_cert_key ('localhost' , sign = True )
264+ cert , key = make_cert_key (cmdlineargs , 'localhost' , sign = True )
253265 with open ('keycert3.pem' , 'w' ) as f :
254266 f .write (key )
255267 f .write (cert )
256268
257- cert , key = make_cert_key ('fakehostname' , sign = True )
269+ cert , key = make_cert_key (cmdlineargs , 'fakehostname' , sign = True )
258270 with open ('keycert4.pem' , 'w' ) as f :
259271 f .write (key )
260272 f .write (cert )
261273
262274 cert , key = make_cert_key (
263- 'localhost-ecc' , sign = True , key = 'param:secp384r1.pem'
275+ cmdlineargs , 'localhost-ecc' , sign = True , key = 'param:secp384r1.pem'
264276 )
265277 with open ('keycertecc.pem' , 'w' ) as f :
266278 f .write (key )
@@ -280,7 +292,7 @@ def print_cert(path):
280292 'RID.1 = 1.2.3.4.5' ,
281293 ]
282294
283- cert , key = make_cert_key ('allsans' , sign = True , extra_san = '\n ' .join (extra_san ))
295+ cert , key = make_cert_key (cmdlineargs , 'allsans' , sign = True , extra_san = '\n ' .join (extra_san ))
284296 with open ('allsans.pem' , 'w' ) as f :
285297 f .write (key )
286298 f .write (cert )
@@ -297,17 +309,17 @@ def print_cert(path):
297309 ]
298310
299311 # IDN SANS, signed
300- cert , key = make_cert_key ('idnsans' , sign = True , extra_san = '\n ' .join (extra_san ))
312+ cert , key = make_cert_key (cmdlineargs , 'idnsans' , sign = True , extra_san = '\n ' .join (extra_san ))
301313 with open ('idnsans.pem' , 'w' ) as f :
302314 f .write (key )
303315 f .write (cert )
304316
305- cert , key = make_cert_key ('nosan' , sign = True , ext = 'req_x509_extensions_nosan' )
317+ cert , key = make_cert_key (cmdlineargs , 'nosan' , sign = True , ext = 'req_x509_extensions_nosan' )
306318 with open ('nosan.pem' , 'w' ) as f :
307319 f .write (key )
308320 f .write (cert )
309321
310322 unmake_ca ()
311- print ("update Lib/test/test_ssl.py and Lib/test/test_asyncio/utils.py" )
312- print_cert ('keycert.pem' )
313- print_cert ('keycert3.pem' )
323+ print ("Writing out reference data for Lib/test/test_ssl.py and Lib/test/test_asyncio/utils.py" )
324+ write_cert_reference ('keycert.pem' )
325+ write_cert_reference ('keycert3.pem' )
0 commit comments