Amazon CloudWatch Synthetics를 실행했더니 SSL: DH_KEY_TOO_SMALL 에러가 발생 해결 방법은?

Amazon CloudWatch Synthetics를 실행했더니 SSL: DH_KEY_TOO_SMALL 에러가 발생 해결 방법은?

Amazon CloudWatch Synthetics를 실행했더니 SSL: DH_KEY_TOO_SMALL 에러가 발생했으므로 해결하는 방법에 대해서 정리해 봤습니다.
2025.12.11

안녕하세요 클래스메소드 김재욱(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를 [인라인 편집기]로 변경하여 코드를 직접 입력하고 수정할 수 있도록 변경합니다.

image1

다음 코드를 통해 문제를 해결합니다.

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 응답 코드 체크 제거 - 페이지 로드 성공 여부만 확인

この記事をシェアする

FacebookHatena blogX

関連記事