반응형

사설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) 로 해결할 수 있는 것을 확인할 수 있습니다.


끝.

반응형
반응형

requests.exceptions.SSLError: HTTPSConnectionPool(host='localhost', port=443): Max retries exceeded with url: /api/v4/users/login (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert internal error')],)",),))


이런 에러가 떠서.. SSL 인증서에 문제가 있는 줄 알고 엄청 뒤졌네요


검색해보니 대부분 pyOpenSSL 을 업데이트 하라는데 centos 기본은 0.13.1 까지 밖에 릴리즈가 안되어 있어요..

사이트 들어가서 설치 했습니다.


wget 으로 다운로드 받고 

tar zxvf 파일명으로 압축 해제 후

cd 경로로 이동 후

./setup install


이랬는데도 계속 안됨..

미치는 줄.............................................


근데 어느순간 갑자기 된다...?????

싶어서 이상해서 보니.. 아직도 잘 모르겠음. ㅠㅠㅠ


근데 결국 한건 pyOpenSSL upgrade 밖에 없어요..

그냥 계속 다운로드 받아서 설치만 반복..


낮은 버전을 설치하면 python2에서 적용받고

높은 최신 버전을 설치하면 python3에서 적용 받던데..

잘 몰라서 그냥 되는대로 계속 설치했습니다.......


그러다 문득 해봤는데 갑자기 되는 이런 아이러니한 상황.. ㅠㅠ

결론.. pyOpenSSL upgrade를 통해 해결은 했는데 언제 됐는지 모르겠어요..    



추가. 저거 말고 한게 있다면

위에 에러를 보면 알겠지만 localhost 로 conf 파잃에 설정해놨었는데

그 부분을 수정했더니 된거 같아요

복합적인 내용으로 앞서 설명한 pyopenssl upgrade랑 같이 conf 파일에 설정이 잘 되어 있는지 확인해보셔야 될 것 같습니다.


ssl 인증서를 도메인으로 발급 받았는데 conf 파일에서는 localhost 로 처리했더니 이런 문제가 발생한 것 같아요!!

반응형

+ Recent posts