블로그 HTTPS TLS v1.3 적용하기.

TLS 1.3 확인

블로그 서버에 TLS 1.3을 적용해보기로 했습니다.

이거의 시작은

[crit] 525#525: *6830 SSL_do_handshake() failed (SSL: error:1417D102:SSL routines:tls_process_client_hello:unsupported protocol) while SSL handshaking, client: ..., server: 0.0.0.0:443
[crit] 525#525: *6832 SSL_do_handshake() failed (SSL: error:1417D18C:SSL routines:tls_process_client_hello:version too low) while SSL handshaking, client: ..., server: 0.0.0.0:443

nginx 에러 로그에 찍히는 위 로그 때문이었습니다.

이거 검색해보니 헛점 노려서 뚫어볼려는 시도라는 글이 있었죠.
처음에는 저기 나오는 아이피를 걍 차단할려고 했는데 아이피 조회해보니 국내 여러 대학교 더군요. (가끔은 KT 아이피로도 나옵니다.

그래서 차단은 못하겠고 걍 무시하기로 했죠. 거기서 끝냈어야 했는데 의식의 흐름이 nginx 보안 세팅 좀 찾아보자 라는 생각에 검색해보고 https://cipherli.st/ 라는 사이트를 봤습니다.

여기가 원출처인지 모르겠지만 국내 nginx 보안 세팅 관련된 글은 거의 대부분이 여기 세팅값과 일치 했습니다.

ssl_protocols TLSv1.3;# Requires nginx >= 1.13.0 else use TLSv1.2
ssl_prefer_server_ciphers on; 
ssl_dhparam /etc/nginx/dhparam.pem; # openssl dhparam -out /etc/nginx/dhparam.pem 4096
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout  10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver $DNS-IP-1 $DNS-IP-2 valid=300s;
resolver_timeout 5s; 
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

딴건 다 그럭저럭 세팅했는데 맨위에 ssl_protocols TLSv1.3; 이게 오오 뭔가 필이 와서 삽질을 시작합니다. (여기서 관뒀어야 했는데!!!)

nginx 버전도 충분하고 1.3으로 세팅해도 별다른 오류 없이 서버시작이 됩니다. 하지만!

보안 연결 실패 SSL_ERROR_PROTOCOL_VERSION_ALERT

크롬이나 파이어폭스나 둘다 위처럼 페이지가 뜨지 않습니다. TLS v1.2로는 잘 되는데 말이죠.

다시 검색을 했습니다.
OpenSSL 버전이 1.1.1 부터 TLS v1.3이 가능하다는 어느 해외 포럼 댓글을 봤습니다.
그래서 현재 버전을 확인해봤더니…

openssl version 1.1.0g

앗..a  버전 딸리네요.

이게 ARM 계열이라 그런건지 아님 우분투 저장소에 OpenSSL 버전이 저기까지 밖에 포팅 안된건지 모르겠습니다.
그래서 인터넷 검색해서 소스 빌드해서 설치를 했습니다.

OpenSSL : https://www.openssl.org/source/ 여기서  openssl-1.1.1a.tar.gz으로 했습니다.

wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz

파일을 받고

tar -zxf openssl-1.1.1a.tar.gz

압축을 풀고

sudo apt install build-essential

소스 빌드 툴을 설치합니다.

./config
make
make test

컨피그 하고 메이크 하고 테스트 까지 합니다.

여기까지 별다른 에러가 없으면 설치를 합니다.

sudo make install

저 같은 경우에는 별다른 오류없이 설치가 완료됬습니다.
하드커널 Odroid H2 시퓨가 폰계열이라 그런지 생각보다 오래 걸립니다.

설치가 완료되면

openssl version 1.1.1a

업그레이드 완료됬습니다.

그리고 nginx 설정을 바꿔서 TLS 1.3으로 세팅하면 맨위 사진 처럼 TLS 1.3으로 적용되어 정상적으로 웹페이지가 열립니다.

파이어폭스에서도 정상적으로 열립니다… 근데!!!

엣지 이 페이지에 안전하게 연결할 수 없음

Edge에서 안열립니다. (버전: Microsoft Edge 44.17763.1.0)

인터넷 익스플로어 이 페이지에 안전하게 연결할 수 없음

Internet explorer에서 안열립니다. (버전: 11.253.17763.0)

그래서 다시 TLS v1.2로 돌아왔습니다.

 

하지만 문제는 여기서 끝나지 않습니다.
SSH가 SSL 라이브러리 구버전을 사용하고 있습니다.
그로 인해 터미널 접속이 안됩니다. (Odroid 시리얼 포트로만 접속 가능)

ldd /usr/bin/ssh

위 명령을 치면

linsoo@odroid:/etc/ssh$ ldd /usr/bin/ssh
	linux-vdso.so.1 (0xbea42000)
	libselinux.so.1 => /lib/arm-linux-gnueabihf/libselinux.so.1 (0xb6e47000)
	libcrypto.so.1.0.0 => not found

처럼 나오는데 저 libcrypto.so.1.0.0 파일이 없어서 안되더군요.

OpenSSL 설치하면 /usr/local/lib/libcrypto.so.1.1 파일이 있습니다.
혹시나 해서 링크해봤지만 역시 안됩니다.

여기서 부터 재난이 시작되죠. 저 라이브러리 파일만 설치할려고 여기저기 검색해보니 SSH를 다시 깔아라…OpenSSL을 다시 깔아라..libssl 라이브러리를 다시 깔아라 하는데

뭐가 꼬인건지 전부 다 다시 설치해도 안되더군요. (리눅스 실력부족)
그 와중에 삭제 잘못해서 의존성 걸려서 여기저기 와르르..

결국엔 데이터 백업하고 싹다 밀고 다시 깔았습니다.

오늘의 교훈: APT 명령으로 설치 안되는건 걍 포기하자 (포기하면 편해) 

괜히 한다고 시작하는 바람에 새벽 4시에 블로그 서버 복구 완료 -0-;;;
이 글이 팁,사용기 글이 아니라 일상생활인건 개망했기 때문 ㅋ


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다