python 으로 https 사이트 응답값을 받아올때 못받아 오는 경우들이 있습니다.
보면 대부분 ssl 인증서 문제죠
OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 672, in urlopen
chunked=chunked,
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 376, in _make_request
self._validate_conn(conn)
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 994, in _validate_conn
conn.connect()
File "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", line 360, in connect
ssl_context=context,
File "/usr/local/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 383, in ssl_wrap_socket
return context.wrap_socket(sock)
File "/usr/local/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 491, in wrap_socket
raise ssl.SSLError("bad handshake: %r" % e)
ssl.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
내부 시스템 REST API를 호출하기 위해서 호출을 하면.. 100%죠..
보통 내부 시스템들은 local 인증서를 쓰기 때문입니다.
앞에서 curl 로 -k 옵션으로 인증서를 무시하는 게 있었던거.. 기억나시나요?
python 에서 requests 모듈에도 그런 옵션이 있습니다.
python 에서 requests 모듈을 사용 시 ssl 인증을 무시하는 방법
requests 모듈 사이트에서 가져온 화면 입니다.
보면 reqeusts.get(url, verify=False) 로 해결할 수 있는 것을 확인할 수 있습니다.
끝.