29
29
30
30
HOST = support .HOST
31
31
32
- data_file = lambda name : os .path .join (os .path .dirname (__file__ ), name )
32
+ def data_file (* name ):
33
+ return os .path .join (os .path .dirname (__file__ ), * name )
33
34
34
35
# The custom key and certificate files used in test_ssl are generated
35
36
# using Lib/test/make_ssl_certs.py.
47
48
KEY_PASSWORD = "somepass"
48
49
CAPATH = data_file ("capath" )
49
50
BYTES_CAPATH = os .fsencode (CAPATH )
51
+ CAFILE_CACERT = data_file ("capath" , "5ed36f99.0" )
50
52
51
- SVN_PYTHON_ORG_ROOT_CERT = data_file ("https_svn_python_org_root.pem" )
53
+ REMOTE_HOST = "self-signed.pythontest.net"
54
+ REMOTE_ROOT_CERT = data_file ("selfsigned_pythontestdotnet.pem" )
52
55
53
56
EMPTYCERT = data_file ("nullcert.pem" )
54
57
BADCERT = data_file ("badcert.pem" )
@@ -229,7 +232,7 @@ def test_parse_cert_CVE_2013_4238(self):
229
232
self .assertEqual (p ['subjectAltName' ], san )
230
233
231
234
def test_DER_to_PEM (self ):
232
- with open (SVN_PYTHON_ORG_ROOT_CERT , 'r' ) as f :
235
+ with open (CAFILE_CACERT , 'r' ) as f :
233
236
pem = f .read ()
234
237
d1 = ssl .PEM_cert_to_DER_cert (pem )
235
238
p2 = ssl .DER_cert_to_PEM_cert (d1 )
@@ -592,7 +595,7 @@ def test_load_cert_chain(self):
592
595
# Mismatching key and cert
593
596
ctx = ssl .SSLContext (ssl .PROTOCOL_TLSv1 )
594
597
with self .assertRaisesRegex (ssl .SSLError , "key values mismatch" ):
595
- ctx .load_cert_chain (SVN_PYTHON_ORG_ROOT_CERT , ONLYKEY )
598
+ ctx .load_cert_chain (CAFILE_CACERT , ONLYKEY )
596
599
# Password protected key and cert
597
600
ctx .load_cert_chain (CERTFILE_PROTECTED , password = KEY_PASSWORD )
598
601
ctx .load_cert_chain (CERTFILE_PROTECTED , password = KEY_PASSWORD .encode ())
@@ -759,11 +762,11 @@ def test_subclass(self):
759
762
class NetworkedTests (unittest .TestCase ):
760
763
761
764
def test_connect (self ):
762
- with support .transient_internet ("svn.python.org" ):
765
+ with support .transient_internet (REMOTE_HOST ):
763
766
s = ssl .wrap_socket (socket .socket (socket .AF_INET ),
764
767
cert_reqs = ssl .CERT_NONE )
765
768
try :
766
- s .connect (("svn.python.org" , 443 ))
769
+ s .connect ((REMOTE_HOST , 443 ))
767
770
self .assertEqual ({}, s .getpeercert ())
768
771
finally :
769
772
s .close ()
@@ -772,42 +775,42 @@ def test_connect(self):
772
775
s = ssl .wrap_socket (socket .socket (socket .AF_INET ),
773
776
cert_reqs = ssl .CERT_REQUIRED )
774
777
self .assertRaisesRegex (ssl .SSLError , "certificate verify failed" ,
775
- s .connect , ("svn.python.org" , 443 ))
778
+ s .connect , (REMOTE_HOST , 443 ))
776
779
s .close ()
777
780
778
781
# this should succeed because we specify the root cert
779
782
s = ssl .wrap_socket (socket .socket (socket .AF_INET ),
780
783
cert_reqs = ssl .CERT_REQUIRED ,
781
- ca_certs = SVN_PYTHON_ORG_ROOT_CERT )
784
+ ca_certs = REMOTE_ROOT_CERT )
782
785
try :
783
- s .connect (("svn.python.org" , 443 ))
786
+ s .connect ((REMOTE_HOST , 443 ))
784
787
self .assertTrue (s .getpeercert ())
785
788
finally :
786
789
s .close ()
787
790
788
791
def test_connect_ex (self ):
789
792
# Issue #11326: check connect_ex() implementation
790
- with support .transient_internet ("svn.python.org" ):
793
+ with support .transient_internet (REMOTE_HOST ):
791
794
s = ssl .wrap_socket (socket .socket (socket .AF_INET ),
792
795
cert_reqs = ssl .CERT_REQUIRED ,
793
- ca_certs = SVN_PYTHON_ORG_ROOT_CERT )
796
+ ca_certs = REMOTE_ROOT_CERT )
794
797
try :
795
- self .assertEqual (0 , s .connect_ex (("svn.python.org" , 443 )))
798
+ self .assertEqual (0 , s .connect_ex ((REMOTE_HOST , 443 )))
796
799
self .assertTrue (s .getpeercert ())
797
800
finally :
798
801
s .close ()
799
802
800
803
def test_non_blocking_connect_ex (self ):
801
804
# Issue #11326: non-blocking connect_ex() should allow handshake
802
805
# to proceed after the socket gets ready.
803
- with support .transient_internet ("svn.python.org" ):
806
+ with support .transient_internet (REMOTE_HOST ):
804
807
s = ssl .wrap_socket (socket .socket (socket .AF_INET ),
805
808
cert_reqs = ssl .CERT_REQUIRED ,
806
- ca_certs = SVN_PYTHON_ORG_ROOT_CERT ,
809
+ ca_certs = REMOTE_ROOT_CERT ,
807
810
do_handshake_on_connect = False )
808
811
try :
809
812
s .setblocking (False )
810
- rc = s .connect_ex (('svn.python.org' , 443 ))
813
+ rc = s .connect_ex ((REMOTE_HOST , 443 ))
811
814
# EWOULDBLOCK under Windows, EINPROGRESS elsewhere
812
815
self .assertIn (rc , (0 , errno .EINPROGRESS , errno .EWOULDBLOCK ))
813
816
# Wait for connect to finish
@@ -829,61 +832,65 @@ def test_non_blocking_connect_ex(self):
829
832
def test_timeout_connect_ex (self ):
830
833
# Issue #12065: on a timeout, connect_ex() should return the original
831
834
# errno (mimicking the behaviour of non-SSL sockets).
832
- with support .transient_internet ("svn.python.org" ):
835
+ with support .transient_internet (REMOTE_HOST ):
833
836
s = ssl .wrap_socket (socket .socket (socket .AF_INET ),
834
837
cert_reqs = ssl .CERT_REQUIRED ,
835
- ca_certs = SVN_PYTHON_ORG_ROOT_CERT ,
838
+ ca_certs = REMOTE_ROOT_CERT ,
836
839
do_handshake_on_connect = False )
837
840
try :
838
841
s .settimeout (0.0000001 )
839
- rc = s .connect_ex (('svn.python.org' , 443 ))
842
+ rc = s .connect_ex ((REMOTE_HOST , 443 ))
840
843
if rc == 0 :
841
- self .skipTest ("svn.python.org responded too quickly" )
844
+ self .skipTest ("REMOTE_HOST responded too quickly" )
842
845
self .assertIn (rc , (errno .EAGAIN , errno .EWOULDBLOCK ))
843
846
finally :
844
847
s .close ()
845
848
846
849
def test_connect_ex_error (self ):
847
- with support .transient_internet ("svn.python.org" ):
850
+ with support .transient_internet (REMOTE_HOST ):
848
851
s = ssl .wrap_socket (socket .socket (socket .AF_INET ),
849
852
cert_reqs = ssl .CERT_REQUIRED ,
850
- ca_certs = SVN_PYTHON_ORG_ROOT_CERT )
853
+ ca_certs = REMOTE_ROOT_CERT )
851
854
try :
852
- rc = s .connect_ex (("svn.python.org" , 444 ))
855
+ rc = s .connect_ex ((REMOTE_HOST , 444 ))
853
856
# Issue #19919: Windows machines or VMs hosted on Windows
854
857
# machines sometimes return EWOULDBLOCK.
855
- self .assertIn (rc , (errno .ECONNREFUSED , errno .EWOULDBLOCK ))
858
+ errors = (
859
+ errno .ECONNREFUSED , errno .EHOSTUNREACH ,
860
+ errno .EWOULDBLOCK ,
861
+ )
862
+ self .assertIn (rc , errors )
856
863
finally :
857
864
s .close ()
858
865
859
866
def test_connect_with_context (self ):
860
- with support .transient_internet ("svn.python.org" ):
867
+ with support .transient_internet (REMOTE_HOST ):
861
868
# Same as test_connect, but with a separately created context
862
869
ctx = ssl .SSLContext (ssl .PROTOCOL_SSLv23 )
863
870
s = ctx .wrap_socket (socket .socket (socket .AF_INET ))
864
- s .connect (("svn.python.org" , 443 ))
871
+ s .connect ((REMOTE_HOST , 443 ))
865
872
try :
866
873
self .assertEqual ({}, s .getpeercert ())
867
874
finally :
868
875
s .close ()
869
876
# Same with a server hostname
870
877
s = ctx .wrap_socket (socket .socket (socket .AF_INET ),
871
- server_hostname = "svn.python.org" )
878
+ server_hostname = REMOTE_HOST )
872
879
if ssl .HAS_SNI :
873
- s .connect (("svn.python.org" , 443 ))
880
+ s .connect ((REMOTE_HOST , 443 ))
874
881
s .close ()
875
882
else :
876
- self .assertRaises (ValueError , s .connect , ("svn.python.org" , 443 ))
883
+ self .assertRaises (ValueError , s .connect , (REMOTE_HOST , 443 ))
877
884
# This should fail because we have no verification certs
878
885
ctx .verify_mode = ssl .CERT_REQUIRED
879
886
s = ctx .wrap_socket (socket .socket (socket .AF_INET ))
880
887
self .assertRaisesRegex (ssl .SSLError , "certificate verify failed" ,
881
- s .connect , ("svn.python.org" , 443 ))
888
+ s .connect , (REMOTE_HOST , 443 ))
882
889
s .close ()
883
890
# This should succeed because we specify the root cert
884
- ctx .load_verify_locations (SVN_PYTHON_ORG_ROOT_CERT )
891
+ ctx .load_verify_locations (REMOTE_ROOT_CERT )
885
892
s = ctx .wrap_socket (socket .socket (socket .AF_INET ))
886
- s .connect (("svn.python.org" , 443 ))
893
+ s .connect ((REMOTE_HOST , 443 ))
887
894
try :
888
895
cert = s .getpeercert ()
889
896
self .assertTrue (cert )
@@ -896,12 +903,12 @@ def test_connect_capath(self):
896
903
# OpenSSL 0.9.8n and 1.0.0, as a result the capath directory must
897
904
# contain both versions of each certificate (same content, different
898
905
# filename) for this test to be portable across OpenSSL releases.
899
- with support .transient_internet ("svn.python.org" ):
906
+ with support .transient_internet (REMOTE_HOST ):
900
907
ctx = ssl .SSLContext (ssl .PROTOCOL_SSLv23 )
901
908
ctx .verify_mode = ssl .CERT_REQUIRED
902
909
ctx .load_verify_locations (capath = CAPATH )
903
910
s = ctx .wrap_socket (socket .socket (socket .AF_INET ))
904
- s .connect (("svn.python.org" , 443 ))
911
+ s .connect ((REMOTE_HOST , 443 ))
905
912
try :
906
913
cert = s .getpeercert ()
907
914
self .assertTrue (cert )
@@ -912,7 +919,7 @@ def test_connect_capath(self):
912
919
ctx .verify_mode = ssl .CERT_REQUIRED
913
920
ctx .load_verify_locations (capath = BYTES_CAPATH )
914
921
s = ctx .wrap_socket (socket .socket (socket .AF_INET ))
915
- s .connect (("svn.python.org" , 443 ))
922
+ s .connect ((REMOTE_HOST , 443 ))
916
923
try :
917
924
cert = s .getpeercert ()
918
925
self .assertTrue (cert )
@@ -924,9 +931,9 @@ def test_makefile_close(self):
924
931
# Issue #5238: creating a file-like object with makefile() shouldn't
925
932
# delay closing the underlying "real socket" (here tested with its
926
933
# file descriptor, hence skipping the test under Windows).
927
- with support .transient_internet ("svn.python.org" ):
934
+ with support .transient_internet (REMOTE_HOST ):
928
935
ss = ssl .wrap_socket (socket .socket (socket .AF_INET ))
929
- ss .connect (("svn.python.org" , 443 ))
936
+ ss .connect ((REMOTE_HOST , 443 ))
930
937
fd = ss .fileno ()
931
938
f = ss .makefile ()
932
939
f .close ()
@@ -940,9 +947,9 @@ def test_makefile_close(self):
940
947
self .assertEqual (e .exception .errno , errno .EBADF )
941
948
942
949
def test_non_blocking_handshake (self ):
943
- with support .transient_internet ("svn.python.org" ):
950
+ with support .transient_internet (REMOTE_HOST ):
944
951
s = socket .socket (socket .AF_INET )
945
- s .connect (("svn.python.org" , 443 ))
952
+ s .connect ((REMOTE_HOST , 443 ))
946
953
s .setblocking (False )
947
954
s = ssl .wrap_socket (s ,
948
955
cert_reqs = ssl .CERT_NONE ,
@@ -988,12 +995,12 @@ def _test_get_server_certificate(host, port, cert=None):
988
995
if support .verbose :
989
996
sys .stdout .write ("\n Verified certificate for %s:%s is\n %s\n " % (host , port ,pem ))
990
997
991
- _test_get_server_certificate ('svn.python.org' , 443 , SVN_PYTHON_ORG_ROOT_CERT )
998
+ _test_get_server_certificate (REMOTE_HOST , 443 , REMOTE_ROOT_CERT )
992
999
if support .IPV6_ENABLED :
993
1000
_test_get_server_certificate ('ipv6.google.com' , 443 )
994
1001
995
1002
def test_ciphers (self ):
996
- remote = ("svn.python.org" , 443 )
1003
+ remote = (REMOTE_HOST , 443 )
997
1004
with support .transient_internet (remote [0 ]):
998
1005
with ssl .wrap_socket (socket .socket (socket .AF_INET ),
999
1006
cert_reqs = ssl .CERT_NONE , ciphers = "ALL" ) as s :
@@ -2150,7 +2157,7 @@ def test_main(verbose=False):
2150
2157
print (" HAS_SNI = %r" % ssl .HAS_SNI )
2151
2158
2152
2159
for filename in [
2153
- CERTFILE , SVN_PYTHON_ORG_ROOT_CERT , BYTES_CERTFILE ,
2160
+ CERTFILE , REMOTE_ROOT_CERT , BYTES_CERTFILE ,
2154
2161
ONLYCERT , ONLYKEY , BYTES_ONLYCERT , BYTES_ONLYKEY ,
2155
2162
BADCERT , BADKEY , EMPTYCERT ]:
2156
2163
if not os .path .exists (filename ):
0 commit comments