# Gitea HTTPS 클론 실패 - TLS 패킷 디코딩 오류 ## 작성일: 2025-09-07 ## 작성자: happybell80 ## 환경: Ubuntu 22.04, Gitea 1.23.8 (최신: 1.24.5), nginx HTTP/2 ## 문제 증상 HTTPS를 통한 Git 클론 시 TLS 패킷 디코딩 오류로 실패 ### 에러 메시지 ```bash # HTTP/2 사용 시 error: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly: INTERNAL_ERROR (err 2) error: 497 bytes of body are still expected fetch-pack: unexpected disconnect while reading sideband packet # HTTP/1.1 강제 사용 시 error: RPC failed; curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet. error: 663 bytes of body are still expected ``` ## 검증 과정 ### 1. 서비스 상태 확인 ```bash systemctl status gitea # Active (running) - 1개월 이상 정상 운영 ss -tlnp | grep 3000 # 포트 정상 리스닝 curl -I https://git.ro-being.com # HTTP/2 200 정상 응답 ``` ### 2. 클론 테스트 ```bash # 서버 내부에서도 동일 오류 발생 git clone https://git.ro-being.com/happybell80/company-x_hompage.git # HTTP/1.1 강제해도 실패 git -c http.version=HTTP/1.1 clone https://git.ro-being.com/... ``` ## 원인 분석 1. **GnuTLS 라이브러리 문제**: Ubuntu Git이 GnuTLS 사용, TLS 패킷 처리 중 오류 2. **Gitea Git 프로토콜 처리**: 대용량 데이터 스트리밍 중 버퍼 문제 추정 3. **HTTP/2 멀티플렉싱**: 스트림이 정상 종료되지 않음 (INTERNAL_ERROR) 4. **작은 저장소도 실패**: 4.5MB 크기에도 발생 → 프로토콜 레벨 이슈 ## 해결 방법 ### 즉시 해결 (권장) SSH 프로토콜 사용으로 우회 (포트 51123 사용) ```bash # SSH 키 설정 후 GIT_SSH_COMMAND="ssh -p 51123" git clone git@git.ro-being.com:happybell80/company-x_hompage.git ``` ### 임시 해결 1. Gitea 서비스 재시작 ```bash sudo systemctl restart gitea ``` 2. nginx HTTP/2 비활성화 (성능 저하) ```nginx # /etc/nginx/sites-enabled/default listen 443 ssl; # http2 제거 ``` ### 근본 해결 1. nginx 설정 최적화 - client_max_body_size 512M 이상 설정 - proxy 버퍼 크기 증가 2. Git 버퍼 크기 증가 ```bash git config http.postBuffer 524288000 # 500MB ``` 3. Gitea 설정에서 LFS 크기 증가 ```ini # /etc/gitea/app.ini [server] LFS_MAX_FILE_SIZE = 10485760 ``` ## 관련 이슈 - Gitea Issue #10838: HTTP/2 PROTOCOL_ERROR (파일 크기 문제로 확인) - nginx client_max_body_size 제한이 주요 원인 - Git GnuTLS vs OpenSSL 호환성 문제 ## 실제 해결 과정 (2025-09-07 21:56) ### SSH 포트 발견 및 성공 ```bash # 기본 22번 포트 연결 실패 ssh -p 22 git@git.ro-being.com # Connection timed out # 51123 포트로 시도 → 성공! ssh -i ~/.ssh/gitea_key -p 51123 git@git.ro-being.com # 연결 성공 # 51123 포트로 클론 성공 GIT_SSH_COMMAND="ssh -i ~/.ssh/gitea_key -p 51123" \ git clone git@git.ro-being.com:happybell80/company-x_hompage.git ``` ### 핵심 교훈 - **Gitea SSH 포트가 51123으로 변경되어 있었음** (보안상 22번 차단) - HTTPS 클론 문제는 여전히 미해결 → SSH 51123 포트 사용 필수 ## 결론 SSH 프로토콜 사용이 가장 안정적이며, HTTPS 클론은 nginx/Git 버퍼 설정 조정으로 해결 가능 **중요: SSH 포트는 51123 사용**