Apache2.4.37에서 TLS1.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.conf94行目 セッションキャッシュモジュールの有効化
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.conf144行目 上記で作った証明書
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도 바뀌고 있고, 사실은 부하도 굉장히 검증하고 싶었습니다만 시간이 없었기 때문에 또 이번.
Reference
이 문제에 관하여(Apache2.4.37에서 TLS1.3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mmotoi/items/9ab98c60ef74d4d75f07
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그런 말하는 상사는 본 적 없지만 대응해 보겠습니다. 정치적은 아무것도 아파치입니다.
환경: 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도 바뀌고 있고, 사실은 부하도 굉장히 검증하고 싶었습니다만 시간이 없었기 때문에 또 이번.
Reference
이 문제에 관하여(Apache2.4.37에서 TLS1.3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mmotoi/items/9ab98c60ef74d4d75f07
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Apache2.4.37에서 TLS1.3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mmotoi/items/9ab98c60ef74d4d75f07텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)