openssl 은 데이터통신을 위한 TLS, SSL 프로토콜을 이용할 수 있는 오픈소스 라이브러리 입니다.
인터넷을 통해 클라이언트와 서버가 통신할 때 통신 내용을 안전하게 보호하는 방법으로 SSL(Secure Sockets Layer)을 사용할 수 있습니다. SSL은 서버 인증(Server Authentication), 클라이언트 인증(Client Authentication) 그리고 데이타 암호화(Data Encryption) 기능을 제공합니다.
인증(Authentication)은 통신의 상대방이 맞는지 확인하는 절차를 의미합니다. 암호화는 데이타가 누출되더라도 외부에서 이 내용을 해독할 수 없게 하는 걸 의미합니다.
보통 openssl은 http 80포트 웹사이트를 443으로 적용시킬때 필요합니다. 웹사이트에서 443을 인증하고 만약 구글, 네이버 연동 로그인을 할때 curl 기능을 통해서 openssl 이 연동되어 있다면 로그인이 가능합니다.
보통 APM 버전에서 phpinfo 페이지에서 curl 부분 모듈이 있는지 확인후 cURL Information 을 확인해야합니다.
그리고 웹브라우저 정책이 대부분 1.0 1.1을 지원을 안하고 있고 1.2부터 지원을 합니다.
TLS v1.2 사용조건
Apache HTTP Server 2.2.22 버전 이상 SSLProtocol All -SSLv3 - SSLv2 -TLSv1 -TLSv1.1 옵션넣기
Openssl 1.0.1c 버전 이상
JAVA 7 이상
Windows Server 2008 SP2 이상에서 TLS v1.2 사용이 가능
TLS v1.3 사용조건
openssl 1.1.1 이상
Nginx 1.13.0 이상
Apache 2.4.37 이상
2014년 하트블리드 (Heartbleed) 사태로 인해 위기를 맞긴 했지만 패치 이후 지금까지도 현업에서도 많이 사용하고 있다.
하트 블리드 관련 설명 KISA
https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=20884
영향받는 버전
OpenSSL 1.0.1 ~ OpenSSL 1.0.1f
OpenSSL 1.0.2-beta, OpenSSL 1.0.2-beta1
영향받지 않는 버전
OpenSSL 1.0.1g
OpenSSL 1.0.0대 버전
OpenSSL 0.9.8대 버전
해당 취약점으로 인해 가급적이면 1.0.2 버전 이상의 OpenSSL을 설치할 것을 권장하고 있다.
openssl 버전 목록
~ 0.9.8zf release date 2016 jan 29 최종버전
1.0.0s release date 2016 Jan 29 최종버전
1.0.1u release date 2016 Sep 22 최종버전
1.0.2u release date 2019 Dec 20 최종버전
1.0.0l release date 2019 Sec 10 최종버전
1.1.1k release date 2021 Mar 25 현재까지 업그레이드중
3.0 알파버전으로 실사용 X
버전 목록 확인은 openssl 공식사이트에서 확인하세요.
https://www.openssl.org/source/old/
현재 많은 웹 브라우저들이 tls 1.0, tls 1.1 지원을 중단하고 있습니다. 그렇기 때문에 한국 인터넷 진흥원이나 https를 권장하고 있는데 openssl 이 낮으면 버전올려야합니다.
CentOS 5 openssl 버전 openssl version = OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
-> 해당 버전은 https 통신버전에서 tls 1.2를 지원하지 않습니다. 지원버전은 tls 1.0, tls 1.1
openssl 버전을 올려야하지만 yum repo 지원기간이 2017년 3월 31일로 끝났기 때문에 설치가 안됩니다.
현재 openssl 버전은 다음과 같습니다. 또한 wget 패키지도 업그레이드를 해야하고 기본적으로 현재 OS 가 tls 1.0을 쓰고 있다면 wget도 안되어 소스설치도 거의 불가능합니다.
또한 repo를 변경한다해도, 기존에 설치되어있는 openssl, curl, wget를 전부 소스설치로 재컴파일 설정을 해줘야하기 때문에 기본적으로 새로운 서버에 최신 OS CentOS 7 or Rocky Linux 8 을 설치하는 방향으로 가야합니다.
CentOS 버전으로 기준으로 하겠습니다.
CentOS 6 openssl 버전 openssl version = OpenSSL 1.0.1e-fips 11 Feb 2013
-> 해당 버전은 https 통신버전에서 tls 1.2를 지원합니다. 지원버전은 tls 1.0, tls 1.1 tls 1.2
그러나 1.0.1e도 1.0.1g 전버전이기때문에 하트블리드사태의 버전으로 버전 업그레이드를 해주는것이 맞다.
CentOS 7 openssl 버전 opnessl version = OpenSSL 1.0.2k-fips 26 Jan 2017
-> 해당 버전은 https 통신버전에서 tls 1.2를 지원합니다. 지원버전은 tls 1.0, tls 1.1 tls 1.2
CentOS 8 openssl 버전 opnessl version = OpenSSL 1.1.1k FIPS 25 Mar 2021
-> 해당 버전은 https 통신버전에서 tls 1.2를 지원합니다. 지원버전은 tls 1.0, tls 1.1 tls 1.2 tls 1.3
그러나 한가지 염두해야하는 것들이 있습니다. openssl, curl 업그레이드를 하게될시 또는 OS 업그레이드를 하게된다면 기존에 설치되어 있는 소스프로그램, RPM 패키지 프로그램들를 재설치를 해줘야합니다.
소스프로그램들은 소스컴파일할때 openssl 업그레이드 설치한 곳을 컴파일 디렉토리를 바라보게 설정하면 됩니다.
그러나 RPM 패키지 프로그램들은 /usr/lib, /usr/lib64 해당 OS에 직접적인 라이브러리들을 수정해줘야합니다.
그전에 OS 라이브러리를 수정하기전에 백업은 필수입니다.
만약에 /usr/lib /usr/lib64에 연결된 운영서비스 프로그램들이 무엇인지 모르겠다면 해당 명령어로 판별해야합니다.
현 OS에서 운영중인 openssl 버전 확인
# openssl version (CentOS 6 버전기준)
OpenSSL 1.0.2k 26 Jan 2017
# /usr/bin/openssl version (CentOS 6 버전기준)
OpenSSL 1.0.2k 26 Jan 2017
-> 두개 명령어 값들이 동일하다면 openssl을 업그레이드 한적이 없습니다.
해당 명령어들이 의존하고 있는 공유 라이브러리 확인 명령어
# ldd /usr/bin/openssl
linux-vdso.so.1 => (0x00007ffeb4579000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007ff9351a1000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007ff934f51000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007ff934c61000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007ff934a51000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007ff934821000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007ff934431000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ff934221000)
libz.so.1 => /lib64/libz.so.1 (0x00007ff934001000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff933c61000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007ff933a49000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007ff933839000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007ff933619000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff9333f1000)
/lib64/ld-linux-x86-64.so.2 (0x0000563ce9e79000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff9331c9000)
-> 그렇기 때문에 공유라이브러리 목록 확인 후 openssl 버전을 업그레이드하고 기존의 공유라이브러리를 업그레이드 openssl로 맞춰야 합니다.
또한 APM 버전 소스설치시 openssl 버전 호환성을 체크해야합니다.
1.0.2 버전 : PHP 5.x 및 7.x와 호환 가능 (1.0.2u가 마지막 버전)
1.1.1 버전 : PHP 7.x와 호환 가능 PHP 5.x와 호환이 되지 않으며, PHP 5.x와 호환이 되던 OpenSSL 1.0.2 버전은 2020년부터 더 이상 업데이트 되지 않는다. 각 사이트마다 상황은 다를 수 있으나 PHP 5.x에서 7.x로의 업데이트를 고려해야 할 수도 있다.
즉 Rocky Linux는 기본 버전이 OpenSSL 1.1.1k FIPS 25 Mar 2021 이기 때문에 기존 서버가 php 5 버전이라면 openssl을 다운그레이드하고 설치해야합니다.
- 관련 문서 링크
https://www.sslcert.co.kr/guides/kb/49
https://blog.chromium.org/2019/10/chrome-ui-for-deprecating-legacy-tls.html
다음글에는 openssl을 업그레이드하고, 적용해보겠습니다. CentOS 6 에서 openssl 업그레이드, 하고 CentOS 8 openssl 다운그레이드 해보겠습니다.
업그레이드, 다운그레이드 후 php 5버전 소스설치 이후 phpinfo 페이지에서 확인
'Linux OS > 관리' 카테고리의 다른 글
vncserver 서비스 데몬 만들기 (0) | 2023.03.12 |
---|---|
crontab (0) | 2023.03.12 |
log 관리하기 (rsyslog) (0) | 2023.03.12 |
rsync, scp 사용법 (원격 파일,소스보내기) (0) | 2023.03.12 |
FTP 설치, 설정, 관리 (0) | 2022.11.16 |
댓글