본문 바로가기

장애&오류&예외/인프라

[ Apache-Error ] SSL3_GET_RECORD:wrong version number(OpenSSL)

2020년 브라우저 vendor사 TLS Protocol 규제에 따른 사이드 이펙트로 인한 특정 서버들의 OS버전업/JDK버전업/OpenSSL프로토콜 버전업이 이루어졌다.

이로 인한 여러 오류들을 확인 할 수 있었으며, WEB영역에서도 예상치 못한 오류가 확인되었다.

해당 오류에 대한 사항을 기재한다.

오류가 발생한다는 사항을 확인하게된 것은 웹 서비스가 정상적으로 이루어지지 않는 것으로 발단이 되었다.

명확한 오류로그(WAS/WEB/OS)를 확인할 수 없었기에 어느 영역에서 오류가 발생하는지 좀처럼 확인이 되지않았다.

명시적으로 대상서버에서 이루어진 작업에서 문제가 될만한 소지가 있을 부분에 대해서 소거법으로 확인을 진행하였고,

결론적으로 https/3handshake를 통해 어느 구간에서 오류 발생하는지 유추가 가능하였다.

 

확인결과 초기 WEB을 설치했을 당시에 참조되는 OpenSSL 버전과 mod_ssl.so의 컴퍼일이 서로 의존성관계를 맺어 컴파일이 이루어지는 부분이었다.

- ex) 1. Apache 설치 당시 Openssl 버전 : 0.9x (TLS1.2미지원) <-> Apache mod_ssl.so 컴파일

-     2. OpenSSL 패치 후, 버전 : 1.0x(TLS1.2지원) <?> Apache mod_ssl.so 컴파일안됨

 

따라서, 해당이슈를 해결하기 위해서 단순히 OpenSSL 버전만 업그레이드를 해서는 안된다는 사항을 알게되었다.

 

#- 오류가 발생하는지 여부를 확인하는 방법(HTTPS/3HandShaking)

openssl s_client -connect localhost:443 -tls1_2 -state -debug -msg 

오류가 발생시, 여러가지 오류가 발생할 수 있으나, 저자의 오류는 하기와 같이 발생하였다.

TLS 1.0 Alert [length 0002], fatal protocol_version
SSL routines:SSL3_GET_RECORD:wrong version number

(전체 로그는 길며, 중요한 키워드만 스크립한다.)

추가 참고사항은 동일한 이슈를 겪으신분의 내용인 여기를 참고하겠다.(로그O/솔루션X)

 

#- Openssl 암호화알고리즘 및 인증서 정보확인명령어

openssl ciphers -v | awk '{print $2}' | sort | uniq 
openssl ciphers -v | awk '{print $2, $1}' | sort -u 
openssl x509 -in /apache/apache24/ssl_private/certs/cert.pem -noout -text

 

#- 현재, OpenSSL 버전확인 및 Apache 의존성관계맺은 Apache OpenSSL 버전확인

#- OS OpenSSL 버전확인
 openssl version
 
#- Apache OpenSSL 의존성관계확인
 cat /ap_log/error.`date +%Y%m%d`.log

문제의 서버는 폐쇄망 서버이기에 캡처 불가하여 참고용 파일 기재

아파치 기동 시, 초기화되는 과정에서 참조되는 OpenSSL버전을 확인할 수 있다.

 

#- mod_ssl.so recompile 방법(apxs 유틸을 이용한 단독컴파일)

${apache_dir}/bin/apxs -i -a -c ${mod_ssl_class_dir}/mod_ssl.c

 

#- 결론

아파치 설치 시, 컴파일 과정에서 현재 설치되어있는 OpenSSL을 참조하며 컴파일이 되기 때문에

TLSv1~1.2 버전을 지원하지 않는 OpenSSL을 대상으로 컴파일이 되었다면,

필수적으로 WEB서버의 mod_ssl.so을 재컴파일을 검토하도록한다.

 

#- Refernces

(github)openssl_issues

(apache_docs)mod_ssl_v2.2
(apache_docs)mod_ssl_v2.4
(openssl)changelog