#!/usr/bin/env python3 import ssl import urllib.request dummy_certificate = '''-----BEGIN CERTIFICATE----- MIIFJTCCAw2gAwIBAgIJAJHJC53yVGdEMA0GCSqGSIb3DQEBCwUAMCkxCzAJBgNV BAYTAmZpMRowGAYDVQQKDBFUaGUgTWVzb24gUHJvamVjdDAeFw0xNTA3MTYxNzUx NDRaFw0xNTA4MTUxNzUxNDRaMCkxCzAJBgNVBAYTAmZpMRowGAYDVQQKDBFUaGUg TWVzb24gUHJvamVjdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMOd p9HIbIC3rPxFWge1KUoMWipGw5/FsR+AJEKPutVj/w005buYwvocczDLF0+wpgMs Mw51vXsr916/d+9Mj2bRzN8Ktm4/algDZSscZBlcljIySKkPICV5hT/LtnjvpSHw Z/kn1YIrR3Cjy/qAI9XVpUAq1avFWYo6XY1jgcIT1baAauBmqt0m0gnRcNsK+3hh DM4SmN+Nvtz4E+0lX+pbBNUJxt0lY2vWl0O8Tro3RsK1oFu9g0Wp8m5gdfxmTpmo ojSU0TBWoZJ7lL8F9zU6nlm7Vrb856pFr1gitpB4rzpFxDqPNzMkxFZy1BeEARYU otmuQq77s4v1qVz1oIapnuvgxYsqKpEbMruISgzF7dCV/aL4hiV/dyavQ4hNk1xg z9KdewA45lcor0aJBiKTan3686co72jr20e5g4hAlJ4mIMODJNHS48cYZLjSS8DU LhFB2/qlgY7QR4H11wgaRMehqzO2XFy3t7bWAG/CSHeUWyl/lRoS24MKyXGAqJjb iGnN9JasX9IYcL1K9AYB0gksPAPDvkyz/TGbRP7vUA2K8mXRtlxXJET9a/AKOEZ+ Vd0HaHeqIIxDCd1xyEHthzguEm48+uHNhnlQuO4LeadOPprhlT71/DC4f2YLzTAc 2DFCM5Zdsc7Zq743geELD5ABClFRyA/TGb/fsv/fAgMBAAGjUDBOMB0GA1UdDgQW BBSoALbvkVNO9Sc5XejNCN18Af7PwDAfBgNVHSMEGDAWgBSoALbvkVNO9Sc5XejN CN18Af7PwDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQC4aLbVE1tF smjNVoAPwWQWq4Q+bfvzZm5a7HZCahgbJRzwvVWPAOQ6cbhFR85Z6Nf/PbOfyriW 9zHFo6da7dZ3LTEWEa8kEOfViaGUYIlLMSiGK76018xVojhbDV+OBeAbb0TrvUNO BvO8T+eiCGL7QwSsqxglV9qIXYwrpTjyO2UzN3SLBVUgGHdxPHh4p4coOunlk3ij I8EdajwHfgEiCTp/97PifRaxF2UX01AA/MNqgQgb70iDqtgvwE27vxOF4mhAh39m EDv5n3HeiB+EozLPWuV+9yklgK/R28MBH1X7HAY7RgBnq1u3rMAQf0ISUtyYskmr KK2DAUK6Q/7/ZbTJBTGnwQzPbKHq8f3WOAZ8uJ3INLiwDLzIrrxqL470fmfeLhgm 3KW2TCe6AffqXbWzjuF1eV6SIEtYUSbJO+AfT8KZutyRPR1g91zI94qE3tk0wAQZ ArXZUqL6I3XraHk0ZmfIOQsCYW/4+iv7/1eOdtoqRtBZ58XWskhCX5ZUrsKi7W2m Qn52JubWbJhupMY45EWScdL/eCywDtSj+7MZgDUq+cwngLyGxzkMNatUA3c1+dxU /MsWmmuhEcr7CLm2ugVjbxnZx1jBKzF4jS2G6oL4xeK9Ab9HNDJnU1mJw8KFQnz/ QvlbJPnUc5ojQTq2uO/4XGxxxwirjQGKOQ== -----END CERTIFICATE----- ''' ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1) ctx.verify_mode = ssl.CERT_REQUIRED ctx.load_verify_locations(cadata=dummy_certificate) print('This many certificates we know about:') print(ctx.cert_store_stats()) u = urllib.request.urlopen('https://www.google.com', context=ctx) print('Connection opened even though certificate validation should have failed.') data = u.read() print('Read', len(data), 'bytes over a falsely validated connection.')