Caused by SSLError(SSLError(1, '[SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1000)'))), 503

solarrrrr·2024년 5월 28일

Python

목록 보기
10/11

requests 사용 중 이러한 오류를 만났다.
이 오류는 SSL 인증서와 관련된 문제인데
서버가 사용하는 Diffie-Hellman (DH) 키가 너무 작아서
클라이언트에서 허용되지 않는다는 의미이다.

서버에서 더 강력한 암호화를 제공하면 되는데,
내 경우 외부 서버로의 호출이어서 클라이언트단에서 보안 등급을 낮춰서
해결할 수밖에 없었다.

2024년 기준으로
허용 프로토콜과 기본 암호화 사용 및 보안 수준은 아래의 값이 권장된다.
MinProtocol = TLSv1.3
CipherString = DEFAULT:@SECLEVEL=2

내 경우 이 설정으로 진행했더니 위와 같은 오류를 만나서
어쩔 수 없이 TSLv1.2, SECLEVEL은 1로 낮춰서 해결했었다.

그런데 다른 서버에 동일한 작업을 진행할 때
위 방식으로 해도 같은 문제가 발생했는데 인터넷을 찾아보니
파이썬의 certifi라는 라이브러리를 사용해서 해결할 수 있다는 글을 발견했다.

certifi는 파이썬용 CA 번들 인증서를 제공하는데
requests를 던질 때 매개변수로 verify 값을 지정해서 넘기면 된다.
특정 인증서 경로를 지정할 수도 있는데
나는 verify=certifi.where()를 사용했다.
이 경우 최신 루트 인증서를 포함한 번들을 제공해
보안 검증을 수행할 수 있다.

인터넷에 찾아보니 동일 문제를 verify=False로 해결했다는 글들이 많던데,
개인 학습 시에는 별 문제 없겠지만 운영에서는 검증을 비활성하겠다는 뜻이므로
사용해서는 안 된다.

profile
몰입

0개의 댓글