레이블이 SSL인증서인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SSL인증서인 게시물을 표시합니다. 모든 게시물 표시

2018년 9월 9일

CentOS7 Apache httpd-2.4.34 + HTTP / 2 + Brotli 설치 로그

2018년 7월 16일 Apache httpd2.4.34가 안정판으로 출시되었네요. 근 4개월 만의 버전업입니다.
Apache httpd 2.4.34에서는 mod_md (ACME 프로토콜을 사용하여 SSL / TLS 인증서 배포 및 업데이트를 자동화 해주는 모듈)의 버그 수정을 중심으로 각종 취약점 (CVE-2018-8011, CVE-2018 -1333)에 대해 패치 되었습니다. 그래서, CentOS7.5 (1804)에 Apache httpd 2.4.34을 설치하는 방법을 정리해 보았습니다. 

참고 자료 : 2.4 용 Complete ChangeLog


1. 개발 도구 설치

Apache httpd 및 각종 라이브러리를 소스에서 컴파일하기 때문에 CentOS7.5 (1804)를 "최소 설치"에서 설치하는 경우 기본 명령과 개발 도구를 설치하고 둡시다.

설치가 되어있다면 무시할꺼고, 버전이 옛날꺼면 업데이트 할 것이며, 이게 없다면 설치하겠죠!
yum -y groupinstall base
yum -y groupinstall development
yum -y update 

2. Nghttp2 설치

HTTP / 2 (mod_http2)의 핵심 엔진인 Nghttp2를 설치합니다.
Nghttp2 설치에 필요한 라이브러리 설치
yum -y install openssl-devel
yum -y install jansson-devel
yum -y install libev-devel
yum -y install c-ares-devell
Nghttp2 다운로드 (다운로드 전에 Nghttp2의 최신 버전 을 확인하여 둡시다)
cd /usr/local/src/ 
wget https://github.com/nghttp2/nghttp2/releases/download/v1.33.0/nghttp2-1.33.0.tar.gz
Nghttp2를 컴파일하고 설치합니다. (적당히 시간이 걸립니다)
tar xvzf nghttp2-1.33.0.tar.gz
cd nghttp2-1.33.0/
./configure -enable-app
make
make install 
HTTP / 2 라이브러리인  "libnghttp2" 는
/usr/local/lib 아래에 설치됩니다.
Nghttp2 관련 명령은 /usr/local/bin 아래에 설치됩니다.
(h2load는 참편합니다.)

3. Brotli 설치

Brotli 컴파일은 cmake를 사용하기 때문에 요놈을 설치해야합니다.
yum -y install cmake
Brotli 다운로드 (다운로드 전에 Brotli의 최신 버전 을 확인하여 둡시다)
cd /usr/local/src/
wget https://github.com/google/brotli/archive/v1.0.5.tar.gz 
Brotli를 컴파일하고 설치합니다.
tar xvzf v1.0.5.tar.gz
cd brotli-1.0.5/
mkdir out && cd out
../configure-cmake
make
make test
make install 
Brotli 라이브러리가 /usr/local/lib 아래에 설치됩니다.

4. 라이브러리 경로 추가

HTTP / 2와 Brotli 라이브러리가 "/ usr / local / lib"다음에 설치되어 있었으므로, 라이브러리 경로에 추가해야합니다. (이 후 설치 curl 최신 버전의 라이브러리도 이곳에 설치됩니다)
echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
ldconfig 

5. curl의 최신 버전을 설치

mod_md 컴파일 버전 7.5 이상 curl 라이브러리가 필요하므로 최신 버전을 설치해야합니다. (설치 전에 curl의 최신 버전 을 확인하여 둡시다)
cd /usr/local/src/
wget https://curl.haxx.se/download/curl-7.61.0.tar.gz
tar xvzf curl-7.61.0.tar.gz
cd curl-7.61.0/
./configure
make
make install 

6. Apache httpd 설치 준비

Apache httpd 컴파일에 필요한 패키지를 설치해야합니다.
yum -y install pcre-devel
yum -y install expat-devel 
또한 Apache 2.4을 소스 코드에서 설치하는 경우에는 APR과 APR-util 가 필요하므로 설치해야합니다.
APR
cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.6.3.tar.gz
tar xvzf apr-1.6.3.tar.gz
cd apr-1.6.3/
./configure
make
make install 
APR-util
cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.6.1.tar.gz
tar xvzf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1/
./configure --with-apr=/usr/local/apr
make
make install 

7. Apache httpd 2.4.34 설치

드디어 본론의 Apache httpd 설치합니다.
Apache httpd 소스 코드 다운로드
cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.34.tar.gz 
다운로드 한 소스 코드를 압축하여 디렉토리를 이동합니다.
tar xvzf httpd-2.4.34.tar.gz
cd httpd-2.4.34/ 
HTTP / 2와 Brotli 모듈, SSL / TLS와 mod_md를 사용하여 설치합니다.
./configure \
--enable-http2 \
--enable-brotli \
--with-brotli=/usr/local/lib \
--enable-ssl \
--enable-md \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--enable-so \
--enable-mods-shared=all \
--enable-mpms-shared=all
 
make
make install 
이상에서 Apache/usr/local/apache2/ 아래에 설치되었습니다. 
바로 SSL 서버 인증서 만들기 및 Apache 설정합니다.

8. 자체 서명 된 SSL 서버 인증서 만들기

정품 인증 기관에서 발급 한 서버 인증서를 무료로 얻을 수 있습니다. 참고하세요 mod_md을 사용하여 Let 's Encrypt 서버 인증서를 얻을 수 있습니다. 
HTTP / 2 및 Brotli은 HTTPS가 필요하므로 Apache의 설정 전에 SSL 서버 인증서를 작성해야합니다.
비밀 키를 생성 ECDSA (256 비트 키를 생성)
openssl ecparam -name prime256v1 -genkey -out server.key
CSR (인증서 서명 요청) 만들기 (아래 2개만 입력하세요)
openssl req -new -key server.key > server.csr
 
Country Name (2 letter code) [XX]:KR
State or Province Name (full name) []:<엔터>
Locality Name (eg, city) [Default City]:<엔터>
Organization Name (eg, company) [Default Company Ltd]:<엔터>
Organizational Unit Name (eg, section) []:<엔터>
Common Name (eg, your name or your server's hostname) []:www.example.com
Email Address []:<엔터>
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<엔터>
An optional company name []:<엔터> 
SSL 서버 인증서 생성 (유효 기간 10 년)
openssl x509 -days 3650 -req -signkey server.key <server.csr> server.crt
비밀키와 SSL 인증서 이동
mv -i server.key / etc / pki / tls / private / 
mv -i server.crt / etc / pki / tls / certs
권한 변경
chmod 600 /etc/pki/tls/private/server.key 
chmod 600 /etc/pki/tls/certs/server.crt
SELinux를 사용하는 경우는 비밀 키와 SSL 인증서에 보안 컨텍스트를 붙여 둡시다. (Apache 시작시 오류가 발생할 수 있으니)
restorecon -v /etc/pki/tls/private/server.key 
restorecon -v /etc/pki/tls/certs/server.crt
CSR 삭제
rm server.csr

9. Apache httpd 설정

원래의 설정 파일 백업
mv -i /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.org
mv -i /usr/local/apache2/conf/extra/httpd-ssl.conf /usr/local/apache2/conf/extra/httpd-ssl.conf.org 
· 설정 파일을 만들자
vi /usr/local/apache2/conf/httpd.conf
vim /usr/local/apache2/conf/extra/httpd-ssl.conf

10. systemd 서비스 파일 만들기

Apache httpd 용 systemd 서비스 파일 (시작 스크립트의 일종)을 만듭니다.
vim /etc/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl graceful
ExecStop=/usr/local/apache2/bin/apachectl stop
 
[Install]
WantedBy=multi-user.target 
만든 서비스 파일을 systemd에 반영
systemctl daemon-reload 
systemd에 반영되어 있는지 확인
systemctl list-unit-files | grep httpd 
httpd.service disabled  ← 이렇게 나오면 OK
시작
systemctl start httpd
자동 시작 설정
systemctl enable httpd

11. firewalld 설정

HTTP (80 / tcp)와 HTTPS (443 / tcp)를 열어 둡니다.
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload 
· 확인 
firewall-cmd --list-all
public (default, active)
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client ssh
ports: 443/tcp 80/tcp ← 이게 나오면 OK
(생략)

12. 로그 순환 설정

· 설정 파일을 만듭니다 
vi /etc/logrotate.d/httpd
· 확인합니다 
logrotate -dv /etc/logrotate.d/httpd 
----- (아래와 같이 나오면 됩니다) -----
reading config file /etc/logrotate.d/httpd
 
Handling 1 logs
 
rotating pattern: /usr/local/apache2/logs/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(중략) 
이상! 끝.

추천 게시물

홈페이지 은행 입금시 자동으로 입금 확인처리하기

 기존에 rtpay라는 유료앱을 사용해서 은행 입금확인을 했는데. 이것도 어차피 내 휴대폰의 알람을 가로채 입금 확인하는 방식이다   오히려 휴대폰 알람을 가로채서 내가 그 알람을 볼수 없다는 단점이 있어. 무료로 알람을 가로채 휴대폰에서 자동화하는 ...