안녕하세요
이전글에서 tlsv1.3 기반의 APM을 설치를 진행했습니다.
이번에는 실제 tlsv1.3이 인증서에서 적용이 되었는지 확인하기 위해서 무료 인증서 letsencrypt를 이용해서 설치를 진행하겠습니다.
기존 letsencrypt는 90일 기간이지만 무료인증서중 180일 보장하는 buypass 인증서가 있어 이것으로 인증서를 설치하겠습니다.

간단한 웹페이지를 만들겠습니다.
디렉토리도 만들겠습니다.

도메인이름은 test.co.kr 으로 하겠습니다.

mkdir -p /home/test.co.kr/public_html
echo "TEST test.co.kr index Page" >> /home/test.co.kr/public_html/index.html



# vi /usr/local/apache/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
ServerAdmin root@localhost
DocumentRoot "/home/test.co.kr/public_html"
ServerName test.co.kr
ServerAlias www.test.co.kr
ErrorLog "logs/test.co.kr-error_log"
CustomLog "logs/test.co.kr-access_log" common

<Directory "/home/test.co.kr/public_html/*">
AllowOverride All
Options FollowSymLinks
Require all granted
</Directory>

</VirtualHost>

# vi /usr/local/apache/conf/httpd.conf

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
-> 주석처리 풀기

#Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-vhosts.conf
-> 주석처리 해제 후 저장

# apachectl -t
Syntax OK

# apachectl -S

VirtualHost configuration:
*:80 test.co.kr (/usr/local/apache/conf/extra/httpd-vhosts.conf:32)
ServerRoot: "/usr/local/apache"
Main DocumentRoot: "/usr/local/apache/htdocs"
Main ErrorLog: "/usr/local/apache/logs/error_log"
Mutex authdigest-client: using_defaults
Mutex ssl-stapling: using_defaults
Mutex ldap-cache: using_defaults
Mutex proxy: using_defaults
Mutex authn-socache: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/usr/local/apache/logs/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex cache-socache: using_defaults
Mutex authdigest-opaque: using_defaults
Mutex watchdog-callback: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex rewrite-map: using_defaults
PidFile: "/usr/local/apache/logs/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="nobody" id=99
Group: name="nobody" id=99

apache 설정파일 적용및 실행
# /etc/init.d/apachectl graceful

SSL 관련 모듈 확인
# apachectl -l
Compiled in modules:
core.c
mod_so.c -> 동적 방식 (DSO)로 설치되어있다. 만약 정적방식일 경우 mod_ssl.c로 설치가 되어있습니다.
http_core.c
prefork.c

mod_ssl.so 모듈이 실제 있는지 확인
ll /usr/local/apache/modules/ | grep ssl
-rwxr-xr-x 1 root root 615936 Jul 26 06:26 mod_ssl.so

# vi /usr/local/apache/conf/httpd.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
-> 해당 부분 주석처리 해제 후 저장

무료인증서 툴 certbot 관련 설치

yum install -y certbot* certbot-apache certbot-nginx

무료인증서를 받는 방식중에서 webroot 방식으로 하겠습니다.

90일 인증서 발급 명령어
# certbot certonly --webroot --agree-tos -m [서버관리자이메일] -w [웹루트 디렉토리 위치] -d [도메인 1] -d [도메인 2(보통 www.원도메인)] -d [도메인 3] --rsa-key-size 4096

180일 인증서 발급 명령어
# certbot certonly --webroot --agree-tos --server https://api.buypass.com/acme/directory -m [서버관리자이메일] -w [웹루트 디렉토리 위치] -d [도메인 1] -d [도메인 2(보통 www.원도메인)] -d [도메인 3] --rsa-key-size 4096

마지막에 --dry-run 을 붙이면 테스트도 가능합니다.

dry-run 하면 결과값을 알 수 있습니다. 성공을 한다면 저렇게 나옵니다.
IMPORTANT NOTES:
- The dry run was successful.

아래 그림은 인증서를 발급 결과와 발급받은 인증서 위치 입니다.




ssl.conf를 원본을 백업 복사해주자
cp -arp /usr/local/apache/conf/extra/httpd-ssl.conf /usr/local/apache/conf/extra/httpd-ssl.conf_ori

# vi /usr/local/apache/conf/extra/httpd-ssl.conf

Listen 443
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLHonorCipherOrder on
SSLProtocol all +TLSv1.2 +TLSv1.3
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
<VirtualHost *:443>
ServerAdmin root@localhost
DocumentRoot "/home/test.co.kr/public_html"
ServerName test.co.kr
ServerAlias www.test.co.kr
ErrorLog "logs/ssl-test.co.krr-error_log"
TransferLog "logs/ssl-test.co.kr-access_log"

<Directory "/home/test.co.kr/public_html/*">
AllowOverride All
Options FollowSymLinks
Require all granted
</Directory>

SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/test.co.kr/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/test.co.kr/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/test.co.kr/fullchain.pem
#SSLCACertificatePath "/usr/local/apache/conf/ssl.crt"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

CustomLog "/usr/local/apache/logs/ssl_request_log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>
ssl.conf 파일 내용 추가 및 변경하고 저장

# apachectl -t
Syntax OK

Apache에 연동된 도메인 목록 확인
# apache -S
VirtualHost configuration:
*:80 test.co.kr (/usr/local/apache/conf/extra/httpd-vhosts.conf:32)
*:443 test.co.kr (/usr/local/apache/conf/extra/httpd-ssl.conf:121)


apache 설정파일 변경후 적용 실행
/etc/init.d/apachectl graceful

https://도메인이름.co.kr


적용된 인증서 180일 인증기간

실제 서버에서 인증서 만료기간 확인 명령어
# openssl x509 -in /etc/letsencrypt/live/test.co.kr/fullchain.pem -noout -dates
notBefore=Jul 26 02:33:30 2022 GMT
notAfter=Jan 21 22:59:00 2023 GMT


TLS 버전 확인 사이트
https://www.ssllabs.com/ssltest/index.html
TLS Checker - Instant Results | CDN77.com


2번째 링크에서 해당 도메인을 TLS 검사를 해봤을때 TLS 1.3 1.2는 enable로 나와있습니다.
그러나 TLS1.1, TLS1.0도 enable로 되어 있디만 앞에 deprecated, 즉 권장하지 않는다고 나와 있습니다.
그렇기 때문에 이것을 변경하고자 합니다.
TLSv1.2, TLSv1.3 을 제외한 나머지를 disabled로 변경해봅니다.


ssl.conf 에서 TLSv1.2, TLSv1.3 을 제외한 나머지를 disabled로 변경하기위해 아래 설정을 변경합니다.
# vi /usr/local/apache/conf/extra/httpd-ssl.conf
SSLProtocol all +TLSv1.2 +TLSv1.3 -> 이 설정은 all 때문에 모두 포함됩니다.
아래와 같이 변경해줍니다.
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

변경 후 apachectl -t 문법검사 후 통과가 된다면 세션때문에 재시작을 해줍니다.
/etc/init.d/apachectl restart

위 그림과 같이 disabled로 변경되어 안전하게 사이트를 운영할 수 있습니다.

실제 타 서버에서 해당 서버가 tls 버전이 어떻게 되는지 확인해봅시다.

openssl 작업을 하지 않은 순정 서버에서 확인해봅시다.

# openssl s_client -connect test.co.kr:443 -tls1

# openssl s_client -connect test.co.kr:443 -tls1_1

# openssl s_client -connect test.co.kr:443 -tls1_2




# openssl s_client -connect test.co.kr:443 -tls1_3
참고로 저 명령어는 애초에 서버에 설치되어 있는 openssl 버전 기반으로 하기 때문에 순정 CentOS 에서는 불가능합니다.
그래서 openssl 소스업그레이드를 한 CentOS7버전에서 저 명령어를 입력해야합니다.

만약 간단하게 소스업그레이드를 안하고 확인하고 싶다면
# yum install -y openssl11*
# openssl11 s_client -connect test.co.kr:443 -tls1_3

이상입니다.
========================================== 끝 ===============================================

'WEB&WAS > Apahce' 카테고리의 다른 글

Apache 기본페이지 설정 및 디렉토리 리스팅 설정  (0) 2022.02.18
Apache mod_url 설정  (0) 2022.01.09
Mod_cband 모듈 추가설치  (0) 2021.05.07
Alma Linux 8 apache 소스설치  (0) 2021.04.22
Oracle Linux8 apache 소스설치  (0) 2021.04.13
Posted by returnrisk
,