Skip to content

Instantly share code, notes, and snippets.

@stefan2904
Last active April 14, 2022 10:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stefan2904/96e9c7692cfb48ac4558e8143cbf3da4 to your computer and use it in GitHub Desktop.
Save stefan2904/96e9c7692cfb48ac4558e8143cbf3da4 to your computer and use it in GitHub Desktop.
Python Requests Demo: How to handle a web server which serves a misconfigured TLS chain
import requests
# via https://whatsmychaincert.com/?webportal.stromnetz-graz.at
# "Generate the Correct Chain" + "Include Root Certificate"
# --> https://whatsmychaincert.com/generate?include_leaf=1&host=webportal.stromnetz-graz.at&submit_btn=Generate+Chain&include_root=1
CUSTOMSTORE='/tmp/webportal.stromnetz-graz.at.chained+root.crt'
print('without chain:')
try:
requests.get('https://webportal.stromnetz-graz.at/login')
except requests.exceptions.SSLError as e:
print(' geht nit: {}'.format(e))
print('with chain:')
r = requests.get('https://webportal.stromnetz-graz.at/login', verify=CUSTOMSTORE)
print(' geht: {}'.format(r.status_code))
% python3 certtest.py :(
without chain:
geht nit: HTTPSConnectionPool(host='webportal.stromnetz-graz.at', port=443): Max retries exceeded with url: /login (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)')))
with chain:
geht: 200
-----BEGIN CERTIFICATE-----
MIIGuTCCBaGgAwIBAgIQBxoQw2iEhlvoH1cQNUs+4zANBgkqhkiG9w0BAQsFADBZ
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMTMwMQYDVQQDEypS
YXBpZFNTTCBUTFMgRFYgUlNBIE1peGVkIFNIQTI1NiAyMDIwIENBLTEwHhcNMjEw
NDE2MDAwMDAwWhcNMjIwNTE3MjM1OTU5WjAmMSQwIgYDVQQDExt3ZWJwb3J0YWwu
c3Ryb21uZXR6LWdyYXouYXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQDWPaB4v0cMQ6NOeFfAWc2vICvZnHdXs+zk6Z1RCwn+xSOAAbNB4G4H08MlBIis
tC/Q4gBqSppvtqzjqI3eviVBulUvVz6Ziopp3TKQxLHCQLsW6cv94d87/1q/5lvR
r3OAZdz4WDBMQvAv+WQu7TOwjIKrwCPlWZ3RiwTGV5bQhuAdlPewoGdd4KFqoQ04
6IoEsGpaQz0Ze3eLZBNc4SvYO3zxdxKoWOjgKloUWW9EjQUaJVENp51oKxn/6+/p
A8IishAoUiAhmBUP+v2Z33PjoF3cpB7UCcl1C2cAqt4XZtod1HFk1si/X/Jkm1ao
1IyVP+J8+R3+trKuZBE2r0khAgMBAAGjggOuMIIDqjAfBgNVHSMEGDAWgBSkjeW+
fHnkcCNtLik0rSNY3PUxfzAdBgNVHQ4EFgQUeNmiZhPwVvm6GyHLaRPTcqJJCLAw
RwYDVR0RBEAwPoIbd2VicG9ydGFsLnN0cm9tbmV0ei1ncmF6LmF0gh93d3cud2Vi
cG9ydGFsLnN0cm9tbmV0ei1ncmF6LmF0MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUE
FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwgZsGA1UdHwSBkzCBkDBGoESgQoZAaHR0
cDovL2NybDMuZGlnaWNlcnQuY29tL1JhcGlkU1NMVExTRFZSU0FNaXhlZFNIQTI1
NjIwMjBDQS0xLmNybDBGoESgQoZAaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL1Jh
cGlkU1NMVExTRFZSU0FNaXhlZFNIQTI1NjIwMjBDQS0xLmNybDA+BgNVHSAENzA1
MDMGBmeBDAECATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNv
bS9DUFMwgYUGCCsGAQUFBwEBBHkwdzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au
ZGlnaWNlcnQuY29tME8GCCsGAQUFBzAChkNodHRwOi8vY2FjZXJ0cy5kaWdpY2Vy
dC5jb20vUmFwaWRTU0xUTFNEVlJTQU1peGVkU0hBMjU2MjAyMENBLTEuY3J0MAkG
A1UdEwQCMAAwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB3ACl5vvCeOTkh8FZz
n2Old+W+V32cYAr4+U1dJlwlXceEAAABeNomP4cAAAQDAEgwRgIhAPqOgKbG+1O0
7TPspd147uD9GWUAipt+tBlTvxcAQ/tLAiEAjzm9goOZv6N9tK3LmDrGK+DjyGVQ
bYBGTH1lhtaoLI8AdQAiRUUHWVUkVpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAA
AXjaJj+sAAAEAwBGMEQCIEk/Op8b4PA6pnl681LpboBQQ4uTmGH4aPHySgPSzoVz
AiA2xgLHKmrO6b1euFJLPqzQHNK5Y3ywJ7Bc7jKDySm4WgB1AFGjsPX9AXmcVm24
N3iPDKR6zBsny/eeiEKaDf7UiwXlAAABeNomP8gAAAQDAEYwRAIgC4nsixdCpBE/
E3KxrkNnIKUf+PD+1B8kGhS6kQKgujECIGIJcIDZVL5PD618fO1Sf4OhcMHUNuKZ
qmMAa8z+6q3MMA0GCSqGSIb3DQEBCwUAA4IBAQBEHKNR6LFSTz1U+g4/oZVY2/Qv
915ZrykxEIVM5IozpzdBELIaVJHZbjCK1fnfJpmHLSdE06P3YBmQYY4LaPC0tKvG
ryuYOKK+m+X7L3yJzlVNEzucG6CAuzpUn08sA4Nyl0oIZH3T2GhcBo3QCNBbeyjy
OHyfepnBwZ43j3EJMAUlJGAR11TNTppU8ma7L0HXvgvMQ/TKLtbYC+/tyJ6/KQal
inaj5kMqFh6x2y4MvRANNY0FlHxCg9c2DpYT4hZ/D60ukDjN0rCRPom+IfnA2KTN
ya60AS9MEo+R7a1dhV5JuG4ssIQ+HVT40rf1n6+XZjSoym37Q2QeKlxivSN5
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFUTCCBDmgAwIBAgIQB5g2A63jmQghnKAMJ7yKbDANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0yMDA3MTYxMjI1MjdaFw0yMzA1MzEyMzU5NTlaMFkxCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxMzAxBgNVBAMTKlJhcGlkU1NMIFRMUyBE
ViBSU0EgTWl4ZWQgU0hBMjU2IDIwMjAgQ0EtMTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBANpuQ1VVmXvZlaJmxGVYotAMFzoApohbJAeNpzN+49LbgkrM
Lv2tblII8H43vN7UFumxV7lJdPwLP22qa0sV9cwCr6QZoGEobda+4pufG0aSfHQC
QhulaqKpPcYYOPjTwgqJA84AFYj8l/IeQ8n01VyCurMIHA478ts2G6GGtEx0ucnE
fV2QHUL64EC2yh7ybboo5v8nFWV4lx/xcfxoxkFTVnAIRgHrH2vUdOiV9slOix3z
5KPs2rK2bbach8Sh5GSkgp2HRoS/my0tCq1vjyLJeP0aNwPd3rk5O8LiffLev9j+
UKZo0tt0VvTLkdGmSN4h1mVY6DnGfOwp1C5SK0MCAwEAAaOCAgswggIHMB0GA1Ud
DgQWBBSkjeW+fHnkcCNtLik0rSNY3PUxfzAfBgNVHSMEGDAWgBQD3lA1VtFMu2bw
o+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
CCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8CAQAwNAYIKwYBBQUHAQEEKDAmMCQG
CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wewYDVR0fBHQwcjA3
oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9v
dENBLmNybDA3oDWgM4YxaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0
R2xvYmFsUm9vdENBLmNybDCBzgYDVR0gBIHGMIHDMIHABgRVHSAAMIG3MCgGCCsG
AQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMIGKBggrBgEFBQcC
AjB+DHxBbnkgdXNlIG9mIHRoaXMgQ2VydGlmaWNhdGUgY29uc3RpdHV0ZXMgYWNj
ZXB0YW5jZSBvZiB0aGUgUmVseWluZyBQYXJ0eSBBZ3JlZW1lbnQgbG9jYXRlZCBh
dCBodHRwczovL3d3dy5kaWdpY2VydC5jb20vcnBhLXVhMA0GCSqGSIb3DQEBCwUA
A4IBAQAi49xtSOuOygBycy50quCThG45xIdUAsQCaXFVRa9asPaB/jLINXJL3qV9
J0Gh2bZM0k4yOMeAMZ57smP6JkcJihhOFlfQa18aljd+xNc6b+GX6oFcCHGr+gsE
yPM8qvlKGxc5T5eHVzV6jpjpyzl6VEKpaxH6gdGVpQVgjkOR9yY9XAUlFnzlOCpq
sm7r2ZUKpDfrhUnVzX2nSM15XSj48rVBBAnGJWkLPijlACd3sWFMVUiKRz1C5PZy
el2l7J/W4d99KFLSYgoy5GDmARpwLc//fXfkr40nMY8ibCmxCsjXQTe0fJbtrrLL
yWQlk9VDV296EI/kQOJNLVEkJ54P
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
-----END CERTIFICATE-----
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment