저는 "feedparser" 모듈을 통해 RSS 피드에서 항목을 선택하기 위해 Python 스크립트(Ubuntu 14.04LTS의 2.7.6)를 사용하고 있습니다. 이번 주에는 특정 웹사이트 하나에서 작동이 중단되었습니다. 여기저기 살펴본 후, Feedparser.parse()는 오류 코드가 있는 구조를 반환합니다.
'bozo_exception': URLError(SSLError(1, '_ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure'),)
특정 SSL 또는 TLS 버전을 강제해야 합니까?
더 낮은 수준에 도달하려면 다양한 urllib 모듈(urllib, urllib2, urllib3)을 사용해 보세요. 결과는 다음과 같습니다.
import urllib3
req = urllib3.PoolManager().request('GET', my_https_url)
다음과 같은 몇 가지 경고로 응답합니다.
/usr/lib/python2.7/dist-packages/urllib3/util/ssl_.py:133: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecurePlatformWarning
분명히 이 문제는 Python 2.7.9에서 해결되었지만 이전 버전의 Ubuntu 14.04는 시스템에 사전 설치되어 제공되지 않습니다. 하지만 계속 실행해야 하는 오래된 소프트웨어가 있기 때문에 이 OS를 원합니다.
간단한 해결책: python3만 사용하도록 RSS 선택기를 업데이트하는 것만으로도 충분했습니다(3.4.3은 최신 14.04입니다). 전송 수준 옵션(예: 특정 방식으로 SSLContext 생성)과 같은 특별한 것을 Feedparser 모듈에 전달할 필요가 없습니다. 기본값은 잘 작동합니다. python2->3에 필요한 유일한 변경 사항은 print() 및 일부 문자열-바이트 s.encode('utf-8') 항목입니다.
답변1
SSLv3 협상 오류가 표시되었습니다. SSLv3은 더 이상 사용되지 않습니다.
SSLv2는 2011년에, SSLv3은 2015년에 더 이상 사용되지 않습니다.
최신 릴리스에서는 더 이상 SSLv2 및 v3을 구현하지 않습니다. 이러한 프로토콜을 여전히 지원하는 이전 Unix/Linux 버전을 사용하여 올바르게 구성된 사이트에서도 Apache는 오랫동안 해당 프로토콜을 비활성화하도록 구성되었습니다.
발견한 대로 해결책은 다른 프로토콜을 지원하는 보다 현대적인 라이브러리/소프트웨어로 업그레이드하는 것입니다. SSLv3를 사용하는 일부 내부 레거시 솔루션이 있는 경우 업그레이드하는 소프트웨어 버전에 따라 가까운 시일 내에 문제가 발생할 수 있습니다.