Linux OS/Redhat (CentOS & Rocky Linux)

CentOS 7 TLSv1.3를 위한 openssl, curl 소스 업그레이드

서버엔지니어 2023. 3. 9.
728x90

안녕하세요. 현재 모든 웹브라우저 보안정책은 TLSv1.2, TLSv1.3 만 지원이 가능합니다.

최신 브라우저에서는 TLSv1.0, TLSv1.1은 로 운영되고 있는 보안 사이트들은 접속조차 불가능합니다.

웹브라우저단에서 차단하고 있습니다.

 

리눅스에서 TLSv1.2를 지원 못하는 CentOS 버전은 CentOS 5 (TLSv1.0 ~ TLSv1.1 만 지원), Ubuntu 12.04 (TLSv1.0 ~ TLSv1.1 만 지원) 버전입니다.

TLSv1.2는 지원이 가능하지만, EoS (End of Service) OS는 CentOS 6(2020-11-30), Ubuntu 14.04 (2019-04), Ubuntu 16.04(2021-04) 입니다.

TLS 버전을 담당하는 프로그램은 openssl로 해당 버전에 따라 지원이 가능합니다. 

각 OS 버전의 openssl 관련 버전입니다.

 

Redhat

CentOS 5 = openssl 0.9.8e (TLSv1.0 ~ TLSv1.1 지원)

CentOS 6 = openssl 1.0.1g (TLSv1.0 ~ TLSv1.2, SSLv3 지원)

CentOS 7 = openssl 1.0.2k (TLSv1.0 ~ TLSv1.2, SSLv3 지원)

CentOS 8(Rocky Linux 8) = openssl 1.1.1g (TLSv1.0 ~ TLSv1.3 지원)

 

Debian

Ubuntu 14.04 = openssl 1.0.1f (TLSv1.0 ~ TLSv1.2 지원)

Ubuntu 16.04 = openssl 1.0.2g (TLSv1.0 ~ TLSv1.2 지원)

Ubuntu 18.04 = openssl 1.1.1 (TLSv1.0 ~ TLSv1.3 지원)

Ubuntu 20.04 = openssl 1.1.1f (TLSv1.0 ~ TLSv1.3 지원)

Ubuntu 22.04 = openssl 3.0.2 (TLSv1.2 ~ TLSv1.3,  SSLv3지원)

 

마이크로소프트사 TLS 관련 문서링크

https://docs.microsoft.com/ko-kr/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-

 

=================================================================

TLS v1.2 최소 요구 사항

- OpenSSL 1.0.1 이상
- httpd 2.2.22 이상
- JAVA 7 이상
- Windows Server 2008 SP2 이상

=================================================================

 

=================================================================

TLS v1.3 최소 요구 사항

-OpenSSL version 1.1.1 버전이상
-Apache 2.4.37 버전 이상
-Nginx 1.13 버전이상
-Windows Server 2022 버전이상
-Windows 11 버전이상

=================================================================

 

보통 openssl 버전을 이용하여 통신하는 프로세스가 있는데 curl 입니다.

curl 통신으로 ftp, http 통신등 다양한 통신을 합니다. 또한 tls버전도 확인하여 통신하게 됩니다.

 

Ubuntu는 실질적으로 EoS 기간전인 OS가 18.04이며, tls 1.3을 지원하기 때문에 EoS 23.04이 되기 전에 tls 1.3 서버를 구축해놓는다면 문제가 없습니다.

CentOS 7은 지원기간이 대략 10년이며, EoS 2024-06-30 입니다.

아직 1년 11개월 정도 남았으나, 출시한 년도가 CentOS 7 2014년이기 때문에 openssl 1.1.1은 2018년에 출시되었기 때문에 서버에서 기본이 아니므로 openssl 1.1.1이 없습니다.

패키지로 관련 라이브러리는 다운로드 및 설치는 가능하나 아래 그림과 같이 openssl은 여전히 이전것으로 되어 있습니다.

 

# yum install openssl11*

그렇기 때문에 실질적으론 설치만 됩니다.

아래에 curl 기본설치와 city-fan repo를 참조하여 업그레이드 한 이후 버전및 참조하는 라이브러리를 확인한 내용입니다.

 

# cat /etc/yum.repos.d/city-fan.repo     // curl 패키지 업그레이드 repo, 각 OS 별로 가능합니다. (CentOS 5~7, Rocky Linux 8)

 

[CityFan]
name=City Fan Repo
baseurl=http://www.city-fan.org/ftp/contrib/yum-repo/rhel$releasever/$basearch/
enabled=1
gpgcheck=0

curl를 최신버전으로 업그레이드 하여도, 똑같이 이전 라이브러리를 참조하기 때문에 tls 1.3으로 APM이나 curl 통신은 할 수 없습니다.

 

그렇기 때문에 CentOS 7는 패키지로 구조상으로 힘들며, 결국 openssl, curl 소스설치를 진행을 해야합니다.

openssl 과 curl은 OS의 근간이 되므로 만약 기존에 소스로 APM이 설치되어 있는 상태에서 openssl, curl를 업그레이드 한다면 APM을 다시 설치해야합니다.

이부분은 참고하셔야합니다.

이번에는 Openssl과 Curl만 업그레이드하여 tls 1.3통신을 할 수 있게 구성하겠습니다.

 

기본적인 devel 설치

# yum install -y libdb-devel enchant-devel libxslt libxslt-devel net-snmp-devel readline-devel readline aspell-devel unixODBC unixODBC-devel libicu-devel icu libicu libc-client libc-client-devel libc-client-2007f freetype-devel freetype* freetype libXpm libXpm-devel libpng-devel libpng* libvpx-devel libvpx libcurl libcurl-devel curl* curl-devel curl tcp_wrappers-devel libzip environment-modules uw-imap-utils uw-imap-devel uw-imap uw-imap-static pam-devel libldb-devel openldap-devel cyrus-sasl-devel bzip2-devel bzip2 bzip2-libs ncurses-devel ncurses mysql-devel libjpeg-devel libjpeg* libjpeg-devel openssl-devel openssl* openssl-libs libxml* libxml2 libxml2-devel libmcrypt libmcrypt-devel libmcrypt* mcrypt mhash* mhash mhash-devel libmhash libmhash-devel expat-devel expat expat* gmp* gmp gmp-devel krb5* krb5-devel db4 db4-devel wget make cmake libtool* pcre* gdbm* gdbm gdbm-devel libtiff* libtiff libtiff-devel flex zlib* zlib-devel zlib gd* gd gd-devel patch t1lib t1lib-devel readline libedit-devel libtidy libtidy-devel gcc* gcc gcc-c++ libtermcap-devel dialog sqlite-devel oniguruma oniguruma-devel libzip5 mod_ssl postgresql-devel lcov systemtap-sdt-devel mod_ldap elfutils-devel libwebp-devel libwebp git gzip libnghttp2-devel valgrind* mod_proxy* editline editline-devel patchelf systemd-devel ImageMagick-devel libzstd-devel libffi libffi-devel libraqm-devel libraqm libsodium libsodium-devel brotli* libssh2* c-ares*

 

Openssl 최신버전 설치

# mkdir /usr/local/src/OS_Update

# cd /usr/local/src/OS_Update

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

# tar zxvf openssl-1.1.1q.tar.gz

# cd openssl-1.1.1q

# ./config -fPIC shared --prefix=/usr/local

# make -j8 && make install

# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

 

CURL 최신버전 설치

# cd /usr/local/src/OS_Update

# wget https://curl.se/download/curl-7.84.0.tar.gz

# tar zxvf curl-7.84.0.tar.gz

# cd curl-7.84.0

# ./configure --prefix=/usr/local --enable-maintainer-mode --enable-silent-rules --enable-debug --enable-optimize --enable-curldebug --enable-symbol-hiding --enable-ares --enable-code-coverage --enable-dependency-tracking --enable-fast-install --enable-http --enable-ftp --enable-file --enable-ldap --enable-ldaps --enable-rtsp --enable-proxy --enable-dict --enable-telnet --enable-tftp --enable-pop3 --enable-imap --enable-smb --enable-smtp --enable-gopher --enable-mqtt --enable-manual --enable-libcurl-option --enable-libgcc --enable-openssl-auto-load-config --enable-versioned-symbols --enable-threaded-resolver --enable-pthreads --enable-verbose --enable-sspi --enable-crypto-auth --enable-ntlm --enable-ntlm-wb --enable-tls-srp --enable-unix-sockets --enable-cookies --enable-socketpair --enable-http-auth --enable-doh --enable-mime --enable-dateparse --enable-netrc --enable-progress-meter --enable-dnsshuffle --enable-get-easy-options --enable-alt-svc --enable-headers-api --enable-hsts --with-schannel --with-secure-transport --with-amissl --with-libssh2 --with-libssh --with-wolfssh --with-winidn --with-schannel --with-secure-transport --with-amissl --with-ssl=/usr/local/lib64/pkgconfig --with-openssl=/usr/local --with-gnutls --with-mbedtls --with-wolfssl --with-bearssl --with-nss-deprecated --with-nss --with-pic --with-aix-soname=both --with-gnu-ld --with-sysroot --with-zlib --with-brotli --with-zstd --with-libssh2 --with-libssh --with-wolfssh --with-winidn --with-libidn2 --with-nghttp2 --with-ngtcp2 --with-nghttp3 --with-quiche --with-msh3

// 컴파일옵션은 최대한 호환성 연동을 위하여 enable, with 옵션들을 추가하였다.

# make -j8 && make install

빨간색 네모박스로 되어 있는 부분이 openssl를 연동한 부분인데, 보통 패키지라면 /usr/lib64 또는 /usr/lib를 참조하지만 소스설치를 openssl를 /usr/local로 했기 때문에 /usr/local/lib64로 라이브러리를 참조하고 있습니다.

OS에서 openssl 와 curl를 최신버전으로 업그레이드 하였습니다.

혹시나 이전 버전의 openssl을 인식을 못하기 위해서 기존 openssl와 curl를 변경해줍니다.

# mv /usr/bin/openssl /usr/bin/openssl_1.0.2k

# ln -s /usr/local/bin/openssl /usr/bin/openssl

# mv /usr/bin/curl /usr/bin/curl_7.29.0

# ln -s /usr/local/bin/curl /usr/bin/curl

 

실제로 openssl이 지원하는 tls 버전들을 확인해보겠습니다. 아래 명령어는 지원하는 버전들을 알 수 있습니다.

 

# /usr/local/bin/openssl ciphers -v | awk '{print $2}' | sort | uniq             // openssl 1.1.1q
SSLv3
TLSv1
TLSv1.2
TLSv1.3

 

# /usr/bin/openssl_1.0.2k ciphers -v | awk '{print $2}' | sort | uniq          // openssl 1.0.2k
SSLv3
TLSv1.2

이렇게 tls 1.3을 지원하고 있는지 확인할 수 있습니다.

다음 게시글은 업그레이드한 CentOS 7에서 openssl, curl로 APM 설치를 진행하겠습니다. 감사합니다.

댓글