Apache2.4.37에서 TLS1.3

7049 단어 TSL1.3Apache2.4
이 기사는 MicroAd Advent Calendar 2018의 3일째 기사입니다.

소개



「뭐, TLS1.3이 나온 것은 알고 있을까. 당연히 우리 회사에서도 대응은 진행할까? 아?」

시도하다



그런 말하는 상사는 본 적 없지만 대응해 보겠습니다. 정치적은 아무것도 아파치입니다.

환경: Amazon linux2

yum만으로 간단하게 포치포치 할 수 없었기 때문에 소스로부터 하지 않으면 안 되는 녀석이군요.
우선은 적당한 사이즈의 인스턴스 시작해 로그인합니다. 그리고 컴파일을 위해 gcc를 설치하십시오.
※ 시험만으로 모두 root로 작업하고 있습니다
# yum install gcc

openessl-1.1.1 설치



OpenSSL 사이트에서 TLS1.3 대응 1.1.1을 다운로드합니다.
# cd /usr/local/src/
# wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz

압축을 풀고 설치 위치를 --prefix로 지정합니다.
# tar xfvz openssl-1.1.1a.tar.gz 
# cd openssl-1.1.1a/
# ./config --prefix=/usr/local/openssl-1.1.1
# make
# make install

공유 라이브러리 설정
# echo /usr/local/openssl-1.1.1/lib > /etc/ld.so.conf.d/openssl-1.1.1.conf
# ldconfig 

확인
# /usr/local/openssl-1.1.1/bin/openssl version
OpenSSL 1.1.1a  20 Nov 2018
# /usr/local/openssl-1.1.1/bin/openssl ciphers -v TLSv1.3
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD

이제 TLS1.3을 사용할 수 있는 OpenSSL을 준비했습니다.
다음은 Apache 설치입니다.

Apache2.4.37 설치



실은 Amazon Linux2에는 Apache의 http/2화를 간단하게 할 수 있는 libnghttp2, mod_http2가 yum으로 넣어집니다! 어차피라면 http/2에 대응시키고 싶기 때문에 이것을 그대로 유용해 버립시다.
yum install libnghttp2-devel
yum install apr-devel apr-util-devel

다운로드
# cd /usr/local/src/
# wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.37.tar.gz
# tar xfvz httpd-2.4.37.tar.gz 

컴파일합니다. 이 때 --enable-ssl에서 SSL을 활성화하고 --with-ssl에서 이전 OpenSSL을 지정합니다. 그리고는 http/2도 유효하게 하고 싶기 때문에 --enable-http2 를 붙이고 있습니다.
# cd httpd-2.4.37/
# ./configure \
   --prefix=/usr/local/httpd24 \
   --enable-http2 \
   --enable-ssl \
   --with-ssl=/usr/local/openssl-1.1.1 \
   --enable-so \
   --enable-mods-shared=reallyall \
   --enable-mpms-shared=all 

이제 설치가 완료되었지만 설정을 괴롭히기 전에 올레올레 인증서를 만듭니다.

올레올레 증명서



모처럼이므로 설치한 OpenSSL을 사용해 보겠습니다. 뭐 특히 차이는 없지만.

개인 키 만들기
/usr/local/openssl-1.1.1/bin/openssl genrsa -out /etc/pki/tls/private/server.key 2048

서명 요청 작성, 대화가 번거롭기 때문에 --subj
/usr/local/openssl-1.1.1/bin/openssl req -new -key /etc/pki/tls/private/server.key -out /etc/pki/tls/private/server.csr -subj "/C=JP/ST=Tokyo/O=organization/CN=hoge.example.com" 

인증서 만들기
/usr/local/openssl-1.1.1/bin/openssl x509 -days 3650 -req -signkey /etc/pki/tls/private/server.key -in /etc/pki/tls/private/server.csr -out /etc/pki/tls/private/server.crt

아파치 설정



정말 잡으로 움직일 만한 설정입니다.

/usr/local/httpd24/conf/httpd.conf
94行目 セッションキャッシュモジュールの有効化
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

155行目 SSLモジュールの有効化
LoadModule ssl_module modules/mod_ssl.so

161行目 HTTP/2モジュールの有効化
LoadModule http2_module modules/mod_http2.so

536行目
Include conf/extra/httpd-default.conf

534行目
Include conf/extra/httpd-ssl.conf


/usr/local/httpd24/conf/extra/httpd-ssl.conf
144行目 上記で作った証明書
SSLCertificateFile "/etc/pki/tls/private/server.crt"

154行目 上記で作った秘密鍵
SSLCertificateKeyFile "/etc/pki/tls/private/server.key"

VirtualHost内のどこかで下記1行を追加、</VirtualHost>の上とかでよいかも
Protocols h2 http/1.1
</VirtualHost>

설정 확인
# /usr/local/httpd24/bin/apachectl configtest
Syntax OK

시작
# /usr/local/httpd24/bin/apachectl start

고객(Chrome)에서 확인



도구 메뉴에서 "기타 도구"→ "개발자 도구"를 엽니다.

프로토콜이 HTTP/2군요. 그리고 Security 탭을 클릭하면 Connection 항목이 있습니다.


TLS1.3입니다.
당연히 올레올레 인증서이므로 Certificate는 오류가 발생합니다. .

서버측 확인



기본적으로 SSL SSL_PROTOCOL, SSL_CIPHER 로그가 나오므로 확인
# tail /usr/local/httpd24/logs/ssl_request_log 
[03/Dec/2018:08:42:54 +0000] xx.xx.xx.xx TLSv1.3 TLS_AES_256_GCM_SHA384 "GET / HTTP/2.0" 45

프로토콜이 TLSv1.3이고 Cipher Suite가 TLS_AES_256_GCM_SHA384입니다.
이런 상황에서 TLS1.3 환경을 구축하여 연결 확인을 할 수 있었습니다.

요약



실제로 표면적으로 TLS1.3이에요! 라고 하는 것은 없고, 이렇게 말하는 것도 무엇입니다만 일반적으로는 신경쓰지 않아도 좋은 부분일까. 분명 그 중 CDN 측에서 대응해 나갈 것 같아. (이미 대응하고 있는 곳도 있습니다만.)

핸드 셰이크 주위나 Cipher Suite도 바뀌고 있고, 사실은 부하도 굉장히 검증하고 싶었습니다만 시간이 없었기 때문에 또 이번.

좋은 웹페이지 즐겨찾기