Python HTTPS 연결시 TLS 1.0 사용
TLS 1.0 은 이제 보안 정책으로 사용이 금지되어 있다.
그래서 기술적으로는 구현이 되어있음에도 불구하고, 브라우저나 각종 라이브러리로 사용을 하려고 하면 오류가 난다.
크롬 기준 이러한 사이트에 접속하려고 하면
The connection to this site uses
TLS 1.0 (an obsolete protocol),
RSA (an obsolete key exchange),
3DES_EDE_CBC with HMAC-SHA1 (an obsolete cipher).
이런 메시지를 내면서 접속을 불허한다.
이런 사이트에 대해 Python 을 사용하여 요청을 보낼때 이를 굳이 우회하는 방법.
urllib3.util.ssl_.DEFAULT_CIPHERS 에 'DES-CBC3-SHA' 을 추가해주면 됨.
콜론으로 구분되기 때문에
urllib3.util.ssl_.DEFAULT_CIPHERS += ':DES-CBC3-SHA'
이렇게 작성해주면 된다.
(DES-CBC3-SHA 과 3DES_EDE_CBC 은 명명법만 다르지 같다고 한다.)
requests 라이브러리를 쓴다면
requests.packages.urllib3 로 임포트 되어 있으니 여기다 해줘도 됨(혹은 여기다가 해줘야만 할 수도?)
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':DES-CBC3-SHA'
이래도 안되는 경우가 있는데, OpenSSL 문제인 것 같다.
안되는 시스템에서
$ curl --sslv3 주소
을 해봤을 때,
curl: (4) OpenSSL was built without SSLv3 support
같은 오류가 나온다면 v3을 지원하는 버전으로 재컴파일 하거나 설치해주도록 하자.
Trivial
requests 기준으로 인증서 오류도 날테니 요청을 보낼때 verify=False 인자도 추가해주자.
그리고 이러면 또 warning 이 매번 출력되는데, 아래와 같은 방법으로 비활성화 할 수 있다.
똑같은 코드지만, 상황에 맞게 복붙해서 사용하자.
# urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# requests
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)