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.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (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.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (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.)