반응형

출처 : https://stackoverflow.com/questions/27981545/suppress-insecurerequestwarning-unverified-https-request-is-being-made-in-pytho


python 으로 https 요청을 하는데... https 라서 ssl 인증서를 검증받는다..

그래서 

requests.post(url, data, verify=False)

라고 옵션을 넣어서 검증을 하지 않도록 한다.


그랬더니 실행이 될때마다 system warning 메세지가 자꾸 뜬다..

Unverified HTTPS Request......


request is being made to host '192.168.1.100'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

  InsecureRequestWarning,


error

InsecureRequestWarning 이라고 시스템 에러가 자꾸 발생한다.

처음엔 그냥 냅뒀는데.. 시간이 지나고 보니 뭔가 계속 뜨는게 신경쓰였다..;;;;

그!래!서!

이걸 안뜨게 싶어서 검색을 좀 해봤더니.. 방법을 겟!! 


#impport urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


에러가 나는 urllib3 에서 insecureRequestWarning 메세지를 예외처리(except)하는 방법이 있었음..!!

반응형
반응형

사설SSL 인증서(certificate)을 이용하여 서비스 중인 사이트에 요청을 하게되면.. 인증서를 확인할 수 없다고 에러가 많이 뜨죠


그래서

1. python 으로 request할때 ssl cert verification 안하도록 검증 안하도록 하는 방법  (요기 링크)

을 썼었고

2. curl을 쓸때도 마찬가지로 ssl cert를 검증 안하도록 -k 옵션을 넣는 방법 (요기 링크)

도 있었죠


근데.. 이러지 않아도 될 것 같아요

혹시 모르니 코딩상에는 저렇게 해놓고

서비스 시작할때 환경변수를 아래와 같이 설정하면 될 것 같습니다.


2번째 방법도 아래 환경변수를 추가하면 먹히는지 모르겠네요

pythonhttpsverify라는 환경변수값을 0으로 설정하면 python 에서는 검증을 안하도록 기본 설정이 되더라고요! 굿굿


저는 .service 파일에 배치파일을 실행하게하고 그 전에 환경변수를 추가하도록 했습니다.

끄읏. finish


export PYTHONHTTPSVERIFY=0


반응형
반응형

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 모듈에도 그런 옵션이 있습니다.

reqeust ssl cert verificationpython 에서 requests 모듈을 사용 시 ssl 인증을 무시하는 방법

requests 모듈 사이트에서 가져온 화면 입니다.


보면 reqeusts.get(url, verify=False) 로 해결할 수 있는 것을 확인할 수 있습니다.


끝.

반응형

+ Recent posts