[FFmpeg] SHA-256 Digest 인증 대응 FFmpeg 7.1 정적 빌드 – MinGW64 + CUDA + 인증 로직 패치
"본 글은 과거 티스토리에서 발행했던 콘텐츠를 기반으로, 최신 정보를 반영해 새롭게 정리한 업데이트 버전입니다."
📚 목차
1. RTSP Digest 인증 오류 원인: SHA-256 미지원 이슈 분석
2. FFmpeg 소스 코드 수정: SHA-256 Digest 인증 알고리즘 수동 구현
3. MinGW64 환경에서 FFmpeg 정적 빌드: CUDA 및 코덱 포함 구성
4. RTSP 서버 인증 테스트: SHA-256 Digest 인증 처리 결과 확인
✔ 마무리

1. RTSP Digest 인증 오류 원인: SHA-256 미지원 이슈 분석
FFmpeg 7.1 버전에서 RTSP 프로토콜을 통해 SHA-256 기반 Digest 인증을 사용하는 서버에 접속할 경우, 인증 실패가 발생하는 현상을 확인할 수 있습니다.
예를 들어 다음과 같이 ffmpeg 명령어로 RTSP 스트림에 접근을 시도할 경우
D:\TEST\ffmpeg6>ffmpeg -loglevel trace -i "rtsp://xxxxxxxx/media.smp"
-loglevel trace 옵션으로 출력되는 로그를 분석하면, RTSP 서버가 WWW-Authenticate 응답 헤더에 Digest algorithm=SHA-256을 포함하고 있음을 확인할 수 있습니다.
하지만 FFmpeg는 해당 알고리즘을 인식하지 못하고 인증 처리를 진행하지 못해 연결이 실패합니다.

이 문제의 근본적인 원인은 FFmpeg가 Digest 인증 시 기본적으로 MD5 알고리즘만을 지원하도록 구현되어 있기 때문입니다. SHA-256이나 SHA-512와 같은 고급 알고리즘은 아직 공식적으로 구현되어 있지 않습니다.
SHA-256 기반 Digest 인증은 RFC 7616에 정의된 방식으로, 기존의 MD5 기반 Digest 인증(RFC 2617)을 보완하여 보안성을 강화한 프로토콜입니다. RTSP, HTTP 등 다양한 전송 프로토콜에서 사용되며, 최근에는 보안을 강화하기 위해 SHA-256을 기본 인증 알고리즘으로 채택하는 서버가 점점 늘어나고 있습니다.
특히 서버가 MD5와 SHA-256을 모두 지원하더라도, FFmpeg는 서버 응답 중 마지막에 명시된 알고리즘(SHA-256)을 기준으로 인증 처리 흐름을 구성하려고 시도합니다. 이 과정에서 SHA-256 처리 루틴이 누락되어 있으므로, 결과적으로 인증 실패가 발생하게 됩니다.
2. FFmpeg 소스 코드 수정: SHA-256 Digest 인증 알고리즘 수동 구현
FFmpeg 7.1은 기본적으로 Digest 인증 시 MD5 알고리즘만 지원합니다. 따라서 RTSP 서버가 SHA-256 기반 인증을 요구할 경우, 인증 실패가 발생합니다. 이는 FFmpeg가 RFC 7616의 내용을 아직 반영하지 않았기 때문입니다.
참고:
관련 패치 제안은 FFmpeg-devel mailing list에 올라온 내용을 기반으로 했습니다.
일부 코드는 직접 수정하여 정상 동작하도록 보완하였습니다.
이 섹션에서는 MinGW64 환경에서 정적 빌드가 가능한 방식으로 libavformat/httpauth.c 파일을 수정하는 방법을 단계별로 설명합니다.
C:\msys64\home\ubuntu\ffmpeg\libavformat\httpauth.c
이 파일은 FFmpeg의 HTTP/RTSP 인증 로직을 담당하며, Digest 인증 응답 헤더 생성 함수인 ff_http_auth_create_response()가 포함되어 있습니다.
1. SHA-256을 위한 헤더 파일 추가
SHA256() 함수 사용을 위해 OpenSSL 헤더를 상단에 추가합니다

configure 시 --enable-openssl 플래그가 반드시 포함되어 있어야 정상적으로 컴파일됩니다.
2. 알고리즘 정규화 함수 추가
FFmpeg는 내부적으로 알고리즘 문자열을 직접 비교하므로, "SHA-256" → "SHA256"으로 정규화하는 함수가 필요합니다.
이는 ff_http_auth_create_response() 진입 전에 실행됩니다.


예: 서버에서 받은 "SHA-256" 문자열은 위 함수를 거치면 "SHA256"으로 변환되어 FFmpeg 내부 비교에 사용할 수 있습니다.
3. SHA-256 해시 계산 함수 구현
다음은 Digest 인증 응답 계산에 사용할 SHA-256 해시 함수입니다

4. Digest 인증 처리 분기 추가
이제 핵심 함수인 ff_http_auth_create_response() 내부에 알고리즘 분기 처리 코드를 삽입합니다.

기존의 MD5 처리 로직은 유지한 채, "SHA-256" 응답 시에도 정상적으로 대응할 수 있도록 확장한 구조입니다.
위와 같이 소스를 수정하면 FFmpeg는 서버로부터 WWW-Authenticate: Digest algorithm="SHA-256" 응답을 수신했을 때도 SHA-256 해시를 계산해 인증 응답을 생성할 수 있게 됩니다.
실무 RTSP 서버 환경에서 SHA-256 인증을 기본으로 사용하는 경우 이 수정이 필수입니다.
3. MinGW64 환경에서 FFmpeg 정적 빌드: CUDA 및 코덱 포함 구성
SHA-256 Digest 인증 처리를 위한 소스 코드를 수정한 후에는, 수정 내용을 반영하여 FFmpeg를 정적으로 다시 빌드해야 합니다.
이 과정에서는 CUDA 가속 기능과 다양한 코덱(libx264, libx265 등)을 함께 포함하여 실무 환경에서 활용 가능한 실행 파일(ffmpeg.exe)을 제작하게 됩니다.
이 빌드는 MinGW64 또는 MSYS2 환경에서 수행하며, Windows 실행 환경에서도 별도 의존성 없이 동작하도록 정적 링크 구성으로 설정합니다.
1. FFmpeg 디렉토리로 이동
cd /home/ubuntu/ffmpeg
2. configure 설정
./configure --prefix=/home/ubuntu/dist \
--arch=x86_64 --enable-static --disable-shared \
--disable-debug --disable-doc \
--enable-gpl --enable-version3 --enable-nonfree \
--enable-libwebp --enable-libx264 --enable-libx265 \
--enable-libvpx --enable-libfdk-aac \
--enable-libvorbis --enable-libopus --enable-libmp3lame \
--enable-openssl --enable-ffnvcodec --enable-nvdec \
--enable-nvenc --enable-cuda-llvm --enable-libnpp \
--enable-cuvid \
--disable-libass --disable-iconv --disable-autodetect \
--disable-w32threads \
--extra-cflags="-static -static-libgcc -static-libstdc++ -I/home/ubuntu/cuda_sdk" \
--extra-ldflags="-static -static-libgcc -static-libstdc++ -L/home/ubuntu/cuda_sdk" \
--pkg-config-flags="--static"
3. make 및 설치
$ make -j $(nproc)
$ make install
이 실행 파일은 Windows에서 별도 DLL이나 라이브러리 설치 없이도 SHA-256 Digest 인증을 포함한 RTSP 스트리밍, CUDA 가속 인코딩/디코딩, 다양한 코덱 처리가 가능한 완성형 바이너리입니다.
4. RTSP 서버 인증 테스트: SHA-256 Digest 인증 처리 결과 확인
수정된 FFmpeg를 정적 빌드한 후에는 실제 SHA-256 기반 Digest 인증을 사용하는 RTSP 서버를 통해 인증 동작이 제대로 수행되는지 확인해야 합니다.
ffmpeg로 rtsp연결을 시도한 경우 서버에서 지원하는 알고리즘을 확인합니다.
D:\TEST\ffmpeg6>ffmpeg -loglevel trace -i "rtsp://xxxxxxxx/media.smp"
이때 -loglevel trace 옵션은 FFmpeg 내부의 요청 및 응답 과정을 상세히 출력하여, Digest 인증 절차의 흐름을 정확히 파악하는 데 매우 유용합니다.
해당 명령을 실행하면, RTSP 서버로부터 WWW-Authenticate 헤더를 포함한 응답을 수신하게 됩니다. 아래는 "MD5"와 "SHA-256" 알고리즘을 모두 지원하는 서버의 응답 예시입니다:

서버가 algorithm=SHA-256을 명시한 경우, 수정한 FFmpeg가 SHA-256 해시를 이용해 올바른 Digest 인증 응답을 생성하면 스트림이 정상적으로 재생됩니다.
스트리밍이 종료될 때 FFmpeg는 TEARDOWN 요청을 서버에 전송합니다. 이 요청에도 Digest 인증 헤더가 포함되어 있으며, 다음과 같이 로그를 통해 확인할 수 있습니다:

✔ 마무리
FFmpeg 7.1은 기본적으로 SHA-256 기반 Digest 인증을 지원하지 않기 때문에, 보안 수준이 높은 RTSP 서버와의 통신에서 인증 실패가 발생할 수 있습니다. 특히 RFC 7616에 기반한 Digest 인증을 사용하는 환경에서는, 기본 빌드만으로는 인증 절차를 통과할 수 없습니다.
이 글에서는 FFmpeg 소스 코드에서 인증 처리 로직을 수정하여 SHA-256 해시 기반의 응답을 생성할 수 있도록 구현하고, MinGW64 환경에서 CUDA 및 다양한 코덱을 포함한 정적 빌드를 수행하는 전 과정을 실습 중심으로 정리했습니다.
인증 테스트 단계에서는 RTSP 서버의 WWW-Authenticate 응답을 분석하고, 수정된 FFmpeg가 Digest 응답을 SHA-256 알고리즘으로 정확히 계산해 전송하는지 확인함으로써 실질적인 검증 절차까지 완료하였습니다.
또한 정적 빌드를 적용함으로써 실행 환경에 OpenSSL이나 CUDA SDK가 별도로 설치되어 있지 않아도 동일한 실행 파일을 그대로 배포할 수 있어, 배포 효율성과 안정성 측면에서도 유리한 구성이 됩니다.
👉 관련 글 링크
1. [FFmpeg] Windows 환경에서 FFmpeg 7.1 정적 빌드하기 – MinGW64 + H.264 인코딩 지원
2. [FFmpeg] FFmpeg 7.1 + H.265(libx265) 지원 정적 빌드 – 기존 MinGW64 환경 확장
3. [FFmpeg] CUDA 가속 포함 FFmpeg 7.1 정적 빌드 – MinGW64 + libx264/x265 + NVENC
4. [FFmpeg] SHA-256 Digest 인증 대응 FFmpeg 7.1 정적 빌드 – MinGW64 + CUDA + 인증 로직 패치
5. [FFmpeg] RTSP 스트림을 fMP4로 변환해 초저지연 TCP 전송하기
6. [FFmpeg] 인코딩 실습: CPU(libx264)와 CUDA(h264_nvenc) 비교
※ 게시된 글 및 이미지 중 일부는 AI 도구의 도움을 받아 생성되거나 다듬어졌습니다.
'1.시스템&인프라 > 스트리밍' 카테고리의 다른 글
| [FFmpeg] 인코딩 실습: CPU(libx264)와 CUDA(h264_nvenc) 비교 (0) | 2025.11.05 |
|---|---|
| [FFmpeg] RTSP 스트림을 fMP4로 변환해 초저지연 TCP 전송하기 (0) | 2025.11.05 |
| [FFmpeg] CUDA 가속 포함 FFmpeg 7.1 정적 빌드 – MinGW64 + libx264/x265 + NVENC (0) | 2025.11.05 |
| [FFmpeg] FFmpeg 7.1 + H.265(libx265) 지원 정적 빌드 – 기존 MinGW64 환경 확장 (0) | 2025.11.05 |
| [FFmpeg] Windows 환경에서 FFmpeg 7.1 정적 빌드하기 – MinGW64 + H.264 인코딩 지원 (0) | 2025.11.05 |