Requests: SSLError "рдЦрд░рд╛рдм рд╣реИрдВрдбрд╢реЗрдХ: рддреНрд░реБрдЯрд┐ ([('рдПрд╕рдПрд╕рдПрд▓ рд░реВрдЯреАрди', 'tls_process_server_certificate', 'рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рд╡рд┐рдлрд▓')],) рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд╕рд╛рде

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдирд╡ре░ 2017  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

рдирдорд╕реНрдХрд╛рд░ред рдореИрдВ https рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реИ рдЬреЛ рдПрдХ рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реИ рдЬрд┐рд╕реЗ рд╕рддреНрдпрд╛рдкрди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ 'рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рд╡рд┐рдлрд▓' рддреНрд░реБрдЯрд┐ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд (рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдЖрдИрдЖрдИрдПрд╕ рджреНрд╡рд╛рд░рд╛) рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рдерд╛ рд▓реЗрдХрд┐рди рдХрд░реНрд▓ рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

рдпрд╣ рдУрдкрдирдПрд╕рдПрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

openssl s_client -showcerts -connect server:44300
CONNECTED(00000003)
depth=0 CN = server
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = server
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/CN=server
   i:/CN=server
-----BEGIN CERTIFICATE-----
<certificate data here>
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=server
issuer=/CN=server
---
No client certificate CA names sent
Peer signing digest: SHA1
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1477 bytes and written 431 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: CC4A000083B1E03B446416C9C0B16CBEAB79949E3CF5C936A309A6F92FA01364
    Session-ID-ctx:
    Master-Key: 798A570B0EC2A0CBB7C4C4DE6167E7579A92239942D869CD794B8BEBEA6EB5E492394634AD32665A8BB829DE1F3858D2
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1510329948
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо

рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╣реИ, рдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЕрдЧрд░ рдореИрдВ рдЕрдЬрдЧрд░ рдХреЗ рдмрд╛рд╣рд░ рдХрд░реНрд▓ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

curl https://server:44300 --cacert /usr/share/ca-certificates/server.crt
 HTTP/1.1 403 Forbidden
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 1158
Content-Type: text/html
Server: Microsoft-IIS/10.0
X-Frame-Options: SAMEORIGIN
P3P: CP=None
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Headers: X-Requested-With,Content-Type
Access-Control-Allow-Credentials: true
Date: Fri, 10 Nov 2017 16:02:26 GMT

(рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ)

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "xxxxx/TestVirtualEnv/local/lib/python2.7/site-packages/requests/api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "xxxxx/TestVirtualEnv/local/lib/python2.7/site-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "xxxxx/TestVirtualEnv/local/lib/python2.7/site-packages/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "xxxxx/TestVirtualEnv/local/lib/python2.7/site-packages/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "xxxxx/TestVirtualEnv/local/lib/python2.7/site-packages/requests/adapters.py", line 506, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='nlybstqvp4nb75n.code1.emi.philips.com', port=44300): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

рдкреНрд░рдЬрдирди рдХрджрдо

import requests
requests.get('https://server:44300', verify='/usr/share/ca-certificates/server.crt')

рдкреНрд░рдгрд╛рд▓реА рдХреА рдЬрд╛рдирдХрд╛рд░реА

$ python -m requests.help
{
  "chardet": {
    "version": "3.0.4"
  },
  "cryptography": {
    "version": "2.1.3"
  },
  "idna": {
    "version": "2.6"
  },
  "implementation": {
    "name": "CPython",
    "version": "2.7.12"
  },
  "platform": {
    "release": "4.10.0-38-generic",
    "system": "Linux"
  },
  "pyOpenSSL": {
    "openssl_version": "1010007f",
    "version": "17.3.0"
  },
  "requests": {
    "version": "2.18.4"
  },
  "system_ssl": {
    "version": "1000207f"
  },
  "urllib3": {
    "version": "1.22"
  },
  "using_pyopenssl": true
}

рдпрд╣ рдЖрджреЗрд╢ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз v2.16.4 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдиреНрдпрдерд╛,
рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг,
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдФрд░ рд╕реА)ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрджрд┐ рдЖрдк рдЕрдЬрдЧрд░ requests рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рд╕рд╛рдорд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рд╛рдЗрдЯреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрд░реНрдмрд╛рдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ - Certificate verify failed рдФрд░ рд╕рднреА рд╢реБрд░реБрдЖрддреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рддрд░рд╣ рдЖрдк auth = session.post( mysecureurl, verify=false) . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрднрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛

рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ SO рдкрджреЛрдВ рдкрд░ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╢реБрд░реБрдЖрддреА рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдмреЗрдХрд╛рд░ рд╣реИред
рдЖрдЗрдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╛рдпрдерди (рдкрд╛рдЗрдк) рдФрд░ рдХреЛрдВрдбрд╛ рдФрд░ рдЬреЛ рднреА рдЕрдЬрдЧрд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рддрд░рд╣ рдЕрд▓рдЧ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд╛рдпрдерди рдЕрдиреБрд░реЛрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕реАрдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдкреИрдХреЗрдЬ рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рд╕рд╛рде рд╣реА, рдкреАрдЖрдИрдкреА curl рдбреВ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рд┐рд╕реНрдЯрдо рдХрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП requests рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдВрдбрд╛ рдпрд╛ рдкреАрдЖрдИрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рд╕реНрдЯреЛрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

Tldr;

  1. рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЗрд╕ рдЕрджреНрднреБрдд рдмреНрд▓реЙрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА .cer рдПрдиреНрдХреЛрдбреЗрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ, рд╡рд╣ рдмреНрд▓реЙрдЧ conda certstore рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ git certstore рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд░реВрдЯ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рд╕рднреА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рд╣реИред
  2. рдЗрд╕рдХреЗ рдмрд╛рдж, certifi рдХрдорд╛рдВрдб pip install certifi рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
  3. рдХреЛрдВрдбрд╛ рдпрд╛ рдкрд╛рдпрдерди рдХреЗ рдкреНрд░рдорд╛рдгрд┐рдд рд╕реНрдЯреЛрд░ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрде рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

import ssl
ssl.get_default_verify_paths() рдпрд╛
import certifi
certifi.where()

  1. рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ cacert.pem рдлрд╝рд╛рдЗрд▓ рдвреВрдВрдв рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ (рдЕрдзрд┐рдорд╛рдирддрдГ рдиреЛрдЯрдкреИрдб ++ рдореЗрдВ) рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рднреА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред (рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╕реАрдорд╛рдВрдХрди -----BEGIN CERTIFICATE----- рдФрд░ -----END CERTIFICATE----- рдзреНрдпрд╛рди рд░рдЦреЗрдВ)ред рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИред
    рдпрд╛ рдпрджрд┐ рдЖрдк рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдХреЛрдВрдбрд╛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
    conda config --set ssl_verify <pathToYourFile>.crt
    (рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдорд╛рдВрдб рд╕рд╛рдорд╛рди рдХреЛ C:\Users\johndoe\.condarc рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ)

  2. рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
    import certifi
    auth = session.post('https://mysecuresite.com/', cert=());

рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЖрдк linux рдкрд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╕реНрдЯрдо cacert рдХреЛ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ ( .bashrc рдпрд╛ .bash_profile ) рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдпрд╣ рдЙрдмрдВрдЯреВ 16.04 рд╣реИ

рдпрд╣ рддреНрд░реБрдЯрд┐ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реА рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЕрдорд╛рдиреНрдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдкреАрдИрдПрдо-рдПрдиреНрдХреЛрдбреЗрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдирдорд╕реНрддреЗред рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реИ:
-----рд╢реБрд░реБрдЖрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░-----
MIID3TCCAsWgAwIBAgIIU/nMdlbWojMwDQYJKoZIhvcNAQELBQAwMDEuMCwGA1UE
AwwlTkxZQlNUUVZQNE5CNzVOLmNvZGUxLmVtaS5waGlsaXBzLmNvbTAeFw0xNzEx
MTAwMDAwMDBaFw0yNzExMTAwMDAwMDBaMDAxLjAsBgNVBAMMJU5MWUJTVFFWUDRO
Qjc1Ti5jb2RlMS5lbWkucGhpbGlwcy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQC3mzWep6k1/FbkzzoyZ8QBy/tE8adfwKvw80zaLL+car1bBZ9U
VIXs4es3babtjD3QJWP5/mwoBdIp8gvQkjA1X7RBNJZXbPz6hGR4eqaeRQLrFV9Y
TtB92MA9CDpCXfalCvzzO1jw3zvP1BHUdnTQEwSnnwtf/рд░рдпрд╛рдЙрдб+e7TDxGq8LThmc
glZgO8d2zaYpIjwWx92bXDF/qlqWBkH5mtKIkWOw6Y71xz0Di62cFrMAPEGBjK3c
szpBa5Ttb9+SFtl16t2xDyCbiPFkoMW/4u3Husy/i18hLhEuQwZMHnWsocm+etZ4
8fDt5Bqhab8zC+LKS+Ll7qZdqMHzobeB6j5JAgMBAAGjgfowgfcwXwYDVR0jBFgw
VoAUGdJ3os9nPtTubuwcy1ugtDMdSMChNKQyMDAxLjAsBgNVBAMMJU5MWUJTVFFW
UDROQjc1Ti5jb2RlMS5lbWkucGhpbGlwcy5jb22CCFP5zHZW1qIzMB0GA1UdDgQW
BBQZ0neiz2c+1O5u7BzLW6C0Mx1IwDAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIE
sDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwOwYDVR0RBDQwMoIlTkxZ
QlNUUVZQNE5CNzVOLmNvZGUxLmVtaS5waGlsaXBzLmNvbYIJbG9jYWxob3N0MA0G
CSqGSIb3DQEBCwUAA4IBAQC0MtflowNB4LTLKD1MW3w0QIY5ale3/sEhNCQgHGN5
iNZJptFuFt5jgPGmFjy0Pb5vLMS/Ag1RF3UgTeZzFnaSgyB4mTnwj1gLdwQidVcr
2SlL7TffCj0m/bYjtNbwExRqXE4pQKb5RKwYwpruZaX/G3oHWOG9+2X9Pw5C42zB
OFE4KvYUwOV+noabXvil8LERIdKYxR/2B6qBiwm47IcioqM07zTYLHJ+WDTEMO2k
Qy51yXwFmeOEr5MIBElYCQ0j2AfI4RCXr+2cyUym7tjEr3/I8EsZ5Crvdf++рдЧреНрд╡рд╛рдЬрд╝
2A05ScPMr+5yfVXygZCenMTwNAyUY1yN9zVj8/n94Psa
-----рдЕрдВрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░-----
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдХрд░реНрд▓ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз рд╡рд╣реА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдкрдирдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдореИрдВ рднреА рдЕрдЬрдЧрд░ рдЕрдиреБрд░реЛрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕реНрд╡рдпрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рдорд╛рдгрд┐рдд рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рдиреАрдЪреЗ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИред

request.get('https://10.10.24.20', Verify='/etc/ssl/certs/certSIGN_ROOT_CA.pem')
рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):
рдлрд╝рд╛рдЗрд▓ "", рд▓рд╛рдЗрди 1, рдЗрди
рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python2.7/dist-packages/requests/api.py", рд▓рд╛рдЗрди 72, рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ
рд╡рд╛рдкрд╕реА рдЕрдиреБрд░реЛрдз ('рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ', url, params = params, *kwargs)рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python2.7/dist-packages/requests/api.py", рд▓рд╛рдЗрди 58, рдЕрдиреБрд░реЛрдз рдореЗрдВрд╡рд╛рдкрд╕реА session.request (рд╡рд┐рдзрд┐ = рд╡рд┐рдзрд┐, url = url, * kwargs)
рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", рд▓рд╛рдЗрди 508, рдЕрдиреБрд░реЛрдз рдореЗрдВ
рд╕рдореНрдорд╛рди = рд╕реНрд╡рдпрдВ рднреЗрдЬреЗрдВ (рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛, *send_kwargs)рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", рд▓рд╛рдЗрди 618, рднреЗрдЬрдиреЗ рдореЗрдВрдЖрд░ = рдПрдбреЗрдкреНрдЯрд░ред рднреЗрдЬреЗрдВ (рдЕрдиреБрд░реЛрдз, * kwargs)
рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", рд▓рд╛рдЗрди 506, рднреЗрдЬрдиреЗ рдореЗрдВ
SSLError рдмрдврд╝рд╛рдПрдБ (рдИ, рдЕрдиреБрд░реЛрдз = рдЕрдиреБрд░реЛрдз)
request.exceptions.SSLError: HTTPSConnectionPool(host='10.10.24.20', port=443): рдЕрдзрд┐рдХрддрдо рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ url рдХреЗ рд╕рд╛рде рдкрд╛рд░ рд╣реЛ рдЧрдП: / (SSLError(SSLError("рдЦрд░рд╛рдм рд╣реИрдВрдбрд╢реЗрдХ: рдПрд░рд░ ([('SSL рд░реВрдЯреАрди', 'tls_process_server_certificate)) рдХреЗ рдХрд╛рд░рдг) ', 'рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓')],)",),))

рдЕрдЧрд░ рдореИрдВ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЧрд▓рдд рд░рдЦрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд = рд╕рддреНрдп рдХреЗ рд╕рд╛рде рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП 'рдЕрдиреБрд░реЛрдз' рд╕рддреНрдпрд╛рдкрд┐рдд = рдЧрд▓рдд рдХреЗ рд╕рд╛рде рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

$ рдЕрдЬрдЧрд░
рдкрд╛рдпрдерди 2.7.13 (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рдЬрдирд╡рд░реА 19 2017, 14:48:08)
[рдЬреАрд╕реАрд╕реА 6.3.0 20170118] linux2 рдкрд░
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП "рд╕рд╣рд╛рдпрддрд╛", "рдХреЙрдкреАрд░рд╛рдЗрдЯ", "рдХреНрд░реЗрдбрд┐рдЯ" рдпрд╛ "рд▓рд╛рдЗрд╕реЗрдВрд╕" рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рдЖрдпрд╛рдд рдЕрдиреБрд░реЛрдз
request.get("https://localhost:9000/getcpuinfo", Verify=False)
рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):
рдлрд╝рд╛рдЗрд▓ "", рд▓рд╛рдЗрди 1, рдЗрди
рдлрд╝рд╛рдЗрд▓ "/usr/lib/python2.7/dist-packages/requests/api.py", рд▓рд╛рдЗрди 70, рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ
рд╡рд╛рдкрд╕реА рдЕрдиреБрд░реЛрдз ('рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ', url, params = params, *kwargs)рдлрд╝рд╛рдЗрд▓ "/usr/lib/python2.7/dist-packages/requests/api.py", рд▓рд╛рдЗрди 56, рдЕрдиреБрд░реЛрдз рдореЗрдВрд╡рд╛рдкрд╕реА session.request (рд╡рд┐рдзрд┐ = рд╡рд┐рдзрд┐, url = url, * kwargs)
рдлрд╝рд╛рдЗрд▓ "/usr/lib/python2.7/dist-packages/requests/sessions.py", рд▓рд╛рдЗрди 488, рдЕрдиреБрд░реЛрдз рдореЗрдВ
рд╕рдореНрдорд╛рди = рд╕реНрд╡рдпрдВ рднреЗрдЬреЗрдВ (рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛, *send_kwargs)рдлрд╝рд╛рдЗрд▓ "/usr/lib/python2.7/dist-packages/requests/sessions.py", рд▓рд╛рдЗрди 609, рднреЗрдЬрдиреЗ рдореЗрдВрдЖрд░ = рдПрдбреЗрдкреНрдЯрд░ред рднреЗрдЬреЗрдВ (рдЕрдиреБрд░реЛрдз, * kwargs)
рдлрд╝рд╛рдЗрд▓ "/usr/lib/python2.7/dist-packages/requests/adapters.py", рд▓рд╛рдЗрди 497, рднреЗрдЬрдиреЗ рдореЗрдВ
SSLError рдмрдврд╝рд╛рдПрдБ (рдИ, рдЕрдиреБрд░реЛрдз = рдЕрдиреБрд░реЛрдз)
request.exceptions.SSLError: ("рдЦрд░рд╛рдм рд╣реИрдВрдбрд╢реЗрдХ: SysCallError (-1, 'рдЕрдирдкреЗрдХреНрд╖рд┐рдд EOF')",)

рдореЗрд░реА рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ,

$ openssl s_client -showcerts -connect localhost:9000
CONNECTED(00000003)
depth=0 CN = localhost
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = localhost
verify return:1
write:errno=0
---
Certificate chain
 0 s:/CN=localhost
   i:/CN=localhost
-----BEGIN CERTIFICATE-----
MIIC/jCCAeagAwIBAgIJAKATu2AY/QT4MA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV
BAMMCWxvY2FsaG9zdDAeFw0xNzExMDkyMTQ1NTBaFw0xNzEyMDkyMTQ1NTBaMBQx
EjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAJTPk5nao0wG/EDFGnq7BvXMkEZ5oUVq7PAUxWi+E/byJk924l7Z5kACgWBa
zQL0lLXLpdMk97EFGWMblz5Ehtqh7U8HaE9OZ6x/pesDTka+REnpXecklRrdZHX7
lfFnNIU58grPpB2GyUXrRdOtcPlaKXUo+VTd7PgwMtYVtt8pyTWxSB2MMYrqJGT8
78KX6trRzQLm7tas3U0jD59+R8j7gxU6FyFaNJBrkJ5T9kHGKOsAzSqZdCgRBjl5
i7xcXJfOAAnZ3jhGlY5DQht+HZDHhjkLG9kcZZhFDYteFk8drzbd3lBw96nLq+8A
Sy92FtQL4GiYSwZ0WVAmwmTCGjUCAwEAAaNTMFEwHQYDVR0OBBYEFLYjwGKbcV9h
sYHxe8l9UvXVivByMB8GA1UdIwQYMBaAFLYjwGKbcV9hsYHxe8l9UvXVivByMA8G
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAHl7okBCJlms+cwfzLhs
sbyyuX2wgngxyvjy497zBmeh1TiueGPhOx9u/sfJSZmoUaeRd/zPGkp2DcPQ+Lo2
EHYrXMPE1Ecgpu/15JZ8jNuE+FwZb9lllULLwzq8pDkdbdsSRltdV/rFlZ2YkscB
c+xvVaCltw5KpKnY6AWHoqwoDcd8TZKzyKXLSuluKbHNC1lvg8cMzs6hFA9P92Ae
9P08AKLAIOGJ7QzRrXQIsAO4p9rHheeZeYQZyNiRrXPQUoWos4+OjynaNs+FabhN
XBtSl/GGPRRRfU/D9v4iKfQx15CEvs1AKn1Z6mIPF05pSqbgIoz2mJBV6UM7e+hz
TRs=
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=localhost
issuer=/CN=localhost
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1198 bytes and written 302 bytes
Verification error: self signed certificate
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 5311B8500C8AF327083E1465FE1E1A6A98E0996B4791150A01D6B130C7F0549909A4BDCDED388E9EDE124BB6C50E150A
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1510599077
    Timeout   : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: no
---

рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд╛рдИрдЬреИрдХ рди рдХрд░реЗрдВред рдЖрдо рддреМрд░ рдкрд░ рдЖрдкрдХреЛ рдЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдпрджрд┐ рдЖрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдореБрдЭреЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВред

@ sg77 рдЖрдкрдХрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ CA=FALSE рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрд░реНрд▓ рдЗрд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд░реВрдЯ рд╕реАрдП рдХреЗ рдмрдЬрд╛рдп рдкрд┐рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: рдпрд╣ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд░реВрдЯ рд╕реАрдП рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ CA=TRUE рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдпрд╛ рдмреЗрд╕рд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдиреНрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред

@ рдЕрд╢реНрд╡рд┐рдиреА-рдХрд╛рдХреНрд▓рд┐рдЬ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╕рддреНрдпрд╛рдкрди рдХреНрдпреЛрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рди рдХрд░реЗрдВ : рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ StackOverflow рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред

@uttampawar рдЖрдкрдХреА рддреНрд░реБрдЯрд┐ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдорд╛рд░реЗ TLS рд╣реИрдВрдбрд╢реЗрдХ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред рдХреГрдкрдпрд╛, рдлрд┐рд░ рд╕реЗ, рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рд▓реЗ рдЬрд╛рдПрдВред

@ рд▓реБрдХрд╛рд╕рд╛ рдореЗрд░рд╛ рдорддрд▓рдм рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд╛рдИрдЬреИрдХ рдХрд░рдиреЗ рдХрд╛ рдирд╣реАрдВ рдерд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рдЬрдЧрд╣ рд╣реЛред рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдЕрд╡рд▓реЛрдХрди рдХреЛ рдЬреЛрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рдкреНрд░рдХреГрддрд┐ рдХрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдкреВрдЫреВрдВрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рджред

рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд╛рдИрдЬреИрдХ рди рдХрд░реЗрдВред рдЖрдо рддреМрд░ рдкрд░ рдЖрдкрдХреЛ рдЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдпрджрд┐ рдЖрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдореБрдЭреЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВред

@ sg77 рдЖрдкрдХрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ CA=FALSE рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрд░реНрд▓ рдЗрд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд░реВрдЯ рд╕реАрдП рдХреЗ рдмрдЬрд╛рдп рдкрд┐рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: рдпрд╣ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд░реВрдЯ рд╕реАрдП рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ CA=TRUE рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдпрд╛ рдмреЗрд╕рд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдиреНрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред

@ рдЕрд╢реНрд╡рд┐рдиреА-рдХрд╛рдХреНрд▓рд┐рдЬ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╕рддреНрдпрд╛рдкрди рдХреНрдпреЛрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдХреГрдкрдпрд╛ _рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рди рдХрд░реЗрдВ_: рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ StackOverflow рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред

@uttampawar рдЖрдкрдХреА рддреНрд░реБрдЯрд┐ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдорд╛рд░реЗ TLS рд╣реИрдВрдбрд╢реЗрдХ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред рдХреГрдкрдпрд╛, рдлрд┐рд░ рд╕реЗ, рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рд▓реЗ рдЬрд╛рдПрдВред

рд╣рд╛рдп рд▓реБрдХрд╛рд╕рд╛ - рдЕрднреА рдЖрдкрдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЦрд╛ред рдЖрдкрдиреЗ @sg77 рдХреЛ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ "рдЖрдкрдХрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ CA=FALSE рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ"ред

рдЖрдк рдХреИрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЧрд▓рдд рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХрд╣рд╛рдВ/рдХреИрд╕реЗ рд╡рд╛рдкрд╕ TRUE рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдВ?

рдзрдиреНрдпрд╡рд╛рджред

рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреБрдВрдЬреА рдХреЛ рдСрдирд▓рд╛рдЗрди рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдЕрдкрдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ

@рд╕рд┐рдирд┐рдбрд╛

рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреБрдВрдЬреА рдХреЛ рдСрдирд▓рд╛рдЗрди рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдЕрдкрдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ

рдЙрдореНрдо, рдирд╣реАрдВред рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдЖрдкрдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ CA рдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдореБрдЦреНрдпрдзрд╛рд░рд╛ рдХреЗ OS рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрдкрдирд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╡реЗ рдЕрдкрдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╕рднреА рдХреЛ рджреЗ рд░рд╣реЗ рд╣реИрдВ?

https://en.wikipedia.org/wiki/Public-key_cryptography

рдпрд╣ рддреНрд░реБрдЯрд┐ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реА рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЕрдорд╛рдиреНрдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдкреАрдИрдПрдо-рдПрдиреНрдХреЛрдбреЗрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдЗрд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВ?

рдпрджрд┐ рдЖрдк рдЕрдЬрдЧрд░ requests рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рд╕рд╛рдорд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рд╛рдЗрдЯреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрд░реНрдмрд╛рдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ - Certificate verify failed рдФрд░ рд╕рднреА рд╢реБрд░реБрдЖрддреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рддрд░рд╣ рдЖрдк auth = session.post( mysecureurl, verify=false) . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрднрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛

рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ SO рдкрджреЛрдВ рдкрд░ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╢реБрд░реБрдЖрддреА рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдмреЗрдХрд╛рд░ рд╣реИред
рдЖрдЗрдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╛рдпрдерди (рдкрд╛рдЗрдк) рдФрд░ рдХреЛрдВрдбрд╛ рдФрд░ рдЬреЛ рднреА рдЕрдЬрдЧрд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рддрд░рд╣ рдЕрд▓рдЧ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд╛рдпрдерди рдЕрдиреБрд░реЛрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕реАрдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдкреИрдХреЗрдЬ рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рд╕рд╛рде рд╣реА, рдкреАрдЖрдИрдкреА curl рдбреВ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рд┐рд╕реНрдЯрдо рдХрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП requests рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдВрдбрд╛ рдпрд╛ рдкреАрдЖрдИрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рд╕реНрдЯреЛрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

Tldr;

  1. рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЗрд╕ рдЕрджреНрднреБрдд рдмреНрд▓реЙрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА .cer рдПрдиреНрдХреЛрдбреЗрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ, рд╡рд╣ рдмреНрд▓реЙрдЧ conda certstore рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ git certstore рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд░реВрдЯ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рд╕рднреА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рд╣реИред
  2. рдЗрд╕рдХреЗ рдмрд╛рдж, certifi рдХрдорд╛рдВрдб pip install certifi рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
  3. рдХреЛрдВрдбрд╛ рдпрд╛ рдкрд╛рдпрдерди рдХреЗ рдкреНрд░рдорд╛рдгрд┐рдд рд╕реНрдЯреЛрд░ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрде рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

import ssl
ssl.get_default_verify_paths() рдпрд╛
import certifi
certifi.where()

  1. рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ cacert.pem рдлрд╝рд╛рдЗрд▓ рдвреВрдВрдв рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ (рдЕрдзрд┐рдорд╛рдирддрдГ рдиреЛрдЯрдкреИрдб ++ рдореЗрдВ) рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рднреА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред (рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╕реАрдорд╛рдВрдХрди -----BEGIN CERTIFICATE----- рдФрд░ -----END CERTIFICATE----- рдзреНрдпрд╛рди рд░рдЦреЗрдВ)ред рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИред
    рдпрд╛ рдпрджрд┐ рдЖрдк рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдХреЛрдВрдбрд╛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
    conda config --set ssl_verify <pathToYourFile>.crt
    (рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдорд╛рдВрдб рд╕рд╛рдорд╛рди рдХреЛ C:\Users\johndoe\.condarc рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ)

  2. рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
    import certifi
    auth = session.post('https://mysecuresite.com/', cert=());

рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЖрдк linux рдкрд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╕реНрдЯрдо cacert рдХреЛ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ ( .bashrc рдпрд╛ .bash_profile ) рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

xsren picture xsren  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jake491 picture jake491  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

avinassh picture avinassh  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eromoe picture eromoe  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tiran picture tiran  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ