Amazon CloudWatch Synthetics를 실행했더니 SSL: DH_KEY_TOO_SMALL 에러가 발생 해결 방법은?
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Amazon CloudWatch Synthetics를 실행했더니 SSL: DH_KEY_TOO_SMALL 에러가 발생했으므로 해결하는 방법에 대해서 정리해 봤습니다.
문제 발생
Amazon CloudWatch Synthetics 생성 시 웹 사이트를 지정하고 Canary를 실행했더니 에러가 발생했습니다.
ERROR: <urlopen error [SSL: DH_KEY_TOO_SMALL] dh key too small>
에러 내용에 대해서는 대상 사이트가 사용하고 있는 Diffie-Hellman 키의 사이즈가, 최신 보안 기준(2048bit 이상 권장)보다 작은 값(1024bit 이하)이라는 에러 내용이며, 실제 웹 사이트에 끼치는 영향에 대해서는 다음과 같습니다.
- 웹 사이트의 열람이나 기능에는 영향이 없습니다
- 최신 Python/OpenSSL 환경에서는 보안 정책을 통해이 설정을 검지하는 사양으로 되어 있습니다
이러한 사양으로 구축된 웹 사이트를 유지하고 싶고, 이 에러 메시지는 무시하고 싶은 경우 다음과 같은 대응이 필요합니다.
Canary 코드 수정
Canary를 [인라인 편집기]로 변경하여 코드를 직접 입력하고 수정할 수 있도록 변경합니다.

다음 코드를 통해 문제를 해결합니다.
from selenium.webdriver.common.by import By
from aws_synthetics.selenium import synthetics_webdriver as syn_webdriver
from aws_synthetics.common import synthetics_logger as logger
def main():
url = "감시할 웹 사이트 URL"
takeScreenshot = True
browser = syn_webdriver.Chrome()
browser.set_page_load_timeout(30)
try:
logger.info(f"Navigating to {url}")
browser.get(url)
browser.implicitly_wait(10)
if takeScreenshot:
browser.save_screenshot("loaded.png")
page_source = browser.page_source
if len(page_source) < 100:
raise Exception("Page content is too short!")
logger.info(f"Page loaded successfully. Content length: {len(page_source)}")
logger.info("Canary successfully executed.")
except Exception as e:
logger.error(f"Failed to load page: {str(e)}")
browser.save_screenshot("error.png")
raise
finally:
browser.quit()
def handler(event, context):
logger.info("Selenium Python heartbeat canary.")
return main()
해결 흐름으로는 다음과 같습니다.
- Blueprint의 pageLoadBlueprint.py가 syn_webdriver.get_http_response(url) 함수를 사용
- 이 함수가 Python의 urllib로 별도 HTTP 요청을 보냄
- urllib이 약한 SSL/TLS 설정을 거부
- Selenium 브라우저만 사용 - urllib 사용 안 함
- AWS Synthetics의 Chrome은 기본적으로 SSL 오류를 관대하게 처리
- HTTP 응답 코드 체크 제거 - 페이지 로드 성공 여부만 확인







