서버 운영/APM 서버 구축

[Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명

씨실과 날실 2020. 10. 19. 09:00

 

[관련 게시물]

Ubuntu 20.04 LTS에서 APM 설치

2020/09/14 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 아파치(Apache2 설치

2020/09/16 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 마리아DB(MariaDB) 10.3 설치

2020/09/18 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 마리아DB(MariaDB) 10.5 설치

2020/09/20 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - PHP 7.4 설치

2020/09/22 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - APM 설치 후 방화벽 설정

2020/09/24 - [서버 운영/APM 서버 구축] - MariaDB 10.4 이후의 계정 인증 관련 변화(unix_socket, mysql_native_password 인증 / 계정, 암호 및 전역 권한 정보 저장 테이블 변경 등)

2020/09/26 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 기본 환경 파일 설정 - apache2.conf 기본 설정

2020/09/28 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 기본 환경 파일 설정 - php.ini 기본 설정

 

Ubuntu 20.04에서 설치한 Apache2 서버 주요 설정 파일 원문

2020/09/30 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 목록

2020/10/05 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - Apache2

2020/10/07 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - PHP 7.4 - php.ini

Ubuntu 20.04에서 설치한 Apache2 서버 주요 설정 파일 내 지시어 설명

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

2020/10/11 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] ports.conf 의 기본값에 사용된 지시어 설명

2020/10/13 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] envvars의 기본값에 사용된 지시어 설명

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

2020/10/19 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명


Ubuntu 20.04에서 phpMyAdmin 설치 및 설정

2021.02.20 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 01 - 저장소 설치

2021.03.15 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 02 - Apache 서버 관리자를 위한수동 설치(버전 5.1.0 기준)

2021.03.17 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 03 - 보안강화 작업

2021.03.19 - [서버 운영/APM 서버 구축] - phpMyAdmin 설치 04 - 웹호스팅 사용자를 위한 수동 설치(버전 5.1.0 기준)

2021.03.21 - [서버 운영/APM 서버 구축] - phpMyAdmin 설치 05 - setup 페이지를 통한 구성 파일 생성

Ubuntu 18.04 LTS에서 APM 설치

2018/11/09 - [서버 운영/APM 서버 구축] - Apache 서버 설치

2018/11/14 - [서버 운영/APM 서버 구축] - MariaDB 설치

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 1

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 2 - ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 3

2018/11/19 - [서버 운영/APM 서버 구축] - PHP7 설치

2018/11/21 - [서버 운영/APM 서버 구축] - 서버 환경 파일 수정 - php.ini, apache2.conf

 

Ubuntu 18.04 LTS에서 MariaDB 백업 및 업그레이드

2019/01/15 - [서버 운영/APM 서버 구축] - MariaDB & MySQL 백업과 복원 - Nextcloud 14

2019/06/27 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 (Upgrading from MariaDB 10.3 to MariaDB 10.4)

 

Ubuntu 18.04 LTS에서 PHP 버전 전환

2019/07/05 - [서버 운영/APM 서버 구축] - Apache와 Shell에서 PHP 버전 전환하기(How to Switch between Multiple PHP Version)

 

Ubuntu 18.04 LTS에서 phpmyadmin 설치 및 운용

2018/11/23 - [서버 운영/APM 서버 구축] - phpmyadmin 설치 - APT 패키지 관리자를 통한 설치

2019/06/18 - [서버 운영/APM 서버 구축] - APT 패키지 관리자를 통해 설치한 phpMyAdmin 업그레이드 방법(업그레이드 버전 4.9.0.1)

2019/07/01 - [서버 운영/APM 서버 구축] - phpMyAdmin 수동 설치 01 - 일반 설치

2019/07/03 - [서버 운영/APM 서버 구축] - phpMyAdmin 수동 설치 02 - 심볼릭 링크를 이용한 보안 접속

2019/06/16 - [서버 운영/APM 서버 구축] - phpMyAdmin 4.6.6deb5와 PHP 7.2 간 호환성 문제 해결 - Warning in ./libraries/sql.lib.php#613

 

XAMPP 설치 및 운용

2019/04/20 - [서버 운영/서버 구축 꾸러미] - XAMPP에 대하여(버전 7.1.28 / 7.2.17 / 7.3.4)

2019/04/22 - [서버 운영/서버 구축 꾸러미] - XAMPP for Windows 7.3.4 인스톨러 설치

2019/04/25 - [서버 운영/서버 구축 꾸러미] - XAMPP for Windows 설정

2019/06/03 - [서버 운영/서버 구축 꾸러미] - XAMPP 포터블(portable) 사용법

2019/06/05 - [서버 운영/서버 구축 꾸러미] - XAMPP for Linux 4.3.5 설치 및 사용법

 

서버 운영을 위한 관련 연재글

2018/11/07 - [리눅스/Ubuntu] - 방화벽 설정 - ufw

2018/11/12 - [서버 운영/버추얼박스(VirtualBox)] - 가상머신(Virtualbox) 내 서버 외부접속

2019/01/05 - [미디어위키/미디어위키 설치 및 관리] - 호스트 컴퓨터에서 가상머신 내 미디어위키 접속 및 작업을 위한 버추얼박스 포트포워딩 설정

2019/03/15 - [서버 운영/APM 서버 구축] - PHP 7.3으로의 업그레이드 및 사용 연기 권장 안내 - PHP Notice: compact(): Undefined variable:

 

 

 

default-ssl.conf 파일에 대한 개략적인 설명

Apache2 서버 개발진 제공하는 SSL/TLS 연결 지원 위한 기본 설정값입니다.

이 파일을 바탕으로 자신의 서버 환경에 맞춰 지시어 등을 첨삭하거나 수정하시면 됩니다.

 

default-ssl.conf 원문

2020/09/30 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 목록

2020/10/05 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - Apache2

 

지시어 사용 안내 설명 주석 제거 후 원문

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html

        #LogLevel info ssl:warn

        ErrorLog $/error.log
        CustomLog $/access.log combined

        #Include conf-available/serve-cgi-bin.conf

        SSLEngine on

        SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

        #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt

        #SSLCACertificatePath /etc/ssl/certs/
        #SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt

        #SSLCARevocationPath /etc/apache2/ssl.crl/
        #SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl

        #SSLVerifyClient require
        #SSLVerifyDepth  10

        #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

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

    </VirtualHost>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

 


 

이 섹션 안에 있는 지시어에 대한 설명은 각 지시어마다 존재하는 하단 상자 안의 링크를 참고하시기 ㅏㅂ랍니다.

 

<IfModule mod_ssl.c> ~ </IfModule>

 

2020/10/11 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] ports.conf 의 기본값에 사용된 지시어 설명

 

    <VirtualHost _default_:443> ~ </VirtualHost>

 

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

 

        ServerAdmin webmaster@localhost

 

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

 

        DocumentRoot /var/www/html

 

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

 

        #LogLevel info ssl:warn

 

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

 

        ErrorLog $/error.log
        CustomLog $/access.log combined

 

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

 

        #Include conf-available/serve-cgi-bin.conf

 

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

 


 

        SSLEngine on

위 지시어는 SSL 엔진 스위치입니다. 가상 호소트의 SSL 사용 여부를 설정합니다.

지시어 : SSLEngine

요약 설명 : SSL Engine 작동 스위치

구문 : SSLEngine on|off|optional

기본값 : SSLEngine off

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

   디렉터리 섹션 안

   .htaccess 파일

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

SSLEngine 지시어는 SSL/TLS 프로토콜 엔진의 사용 여부를 선택합니다. 해당 가상 호스트에 대해 SSL/TLS를 활성화하려면 <VirtualHost> 섹션 내에서 사용해야합니다. 기본적으로 SSL/TLS 프로토콜 엔진은 주 서버와 구성된 모든 가상 호스트에 대해 비활성화되어 있습니다.

<VirtualHost _default_:443>
SSLEngine on
#...
</VirtualHost>

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslengine

 


 

 

        SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

SSL 자체 서명 인증서 파일과 SSL 인증 Key 파일의 경로를 설정합니다.

자체 서명 (snakeoil) 인증서는 ssl-cert 패키지를 설치하여 생성할 수 있습니다. 자세한 정보는 /usr/share/doc/apache2/README.Debian.gz를 참조하시기 바랍니다.

키와 인증서가 모두 같은 파일에 저장되어있는 경우 SSLCertificateFile 지시어만 필요합니다.

 

지시어 : SSLCertificateFile

요약 설명 : 서버 PEM 인코딩 X.509 인증서 데이터 파일 또는 토큰 식별자

구문 : SSLCertificateFile file-path|certid

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

호환성 : 2.4.42 이상에서 사용 가능한 certid

SSLCertificateFile 지시어는 PEM 형식의 인증서 데이터가 있는 파일 또는 구성된 암호화 토큰을 통한 인증서 식별자를 가리킵니다.

이 지시어는 서버 인증을 위한 여러 알고리즘 (일반적으로 RSA, DSA 및 ECC)을 지원하기 위해 여러 번 (다른 파일 이름 참조) 사용할 수 있습니다.

지원되는 알고리즘의 수는 mod_ssl에 사용되는 OpenSSL 버전에 따라 다릅니다. 버전 1.0.0 이상에서는 openssl list-public-key-algorithms가 지원되는 알고리즘 목록을 출력합니다. 

파일에는 leaf에서 Root까지의 중간 CA 인증서가 포함될 수도 있습니다. 이는 버전 2.4.8 이상에서 지원되며 SSLCertificateChainFile 지시어는 더 이상 사용되지 않습니다.

OpenSSL 1.0.2 이상에서 실행하는 경우 인증서별로 중간 CA 체인을 구성할 수 있습니다.

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile

 

 


 

 

지시어 : SSLCertificateKeyFile

요약 설명 : 서버 PEM 인코딩 개인 키 파일

구문 : SSLCertificateKeyFile file-path|keyid

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

호환성 : 2.4.42 이상에서 사용 가능한 certid

SSLCertificateKeyFile 지시어는 서버의 PEM 인코딩 개인 키 파일 또는 구성된 암호화 토큰을 통한 키 ID를 가리킵니다.

이 지시어는 서버 인증을 위한 다중 알고리즘을 지원하기 위해 여러 번 사용할 수 있습니다. 각 SSLCertificateKeyFile 지시어에 대해 일치하는 SSLCertificateFile 지시어가 있어야 합니다.

 

# PEM 인코딩 파일에서 개인키 사용:
SSLCertificateKeyFile "/usr/local/apache2/conf/ssl.key/server.key"

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatekeyfile

 


 

 

        #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt

서버 인증서 체인 파일의 경로를 설정합니다.

SSLCertificateChainFile은 PEM 방식으로 인코딩된 CA 인증서의 연결 정보를 포함하고 있습니다. 이 CA 인증서는 서버 인증서의 인증서 체인을 형성합니다.

참고로 참조된 파일은 편의를 위해 CA 인증서가 서버 인증서에 직접 첨부될 때 SSLCertificateFile과 동일할 수 있습니다.

 

지시어 : SSLCertificateChainFile

요약 설명 : PEM으로 인코딩 된 서버 CA 인증서 파일

구문 : SSLCertificateChainFile file-path

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

 

SSLCertificateChainFile 지시어 유지 보수 지원 중단

Apache2 버전 2.4.8 이후부터 SSLCertificateFile 지시어가 중간 CA 인증서도 로드하도록 확장되어 해당 버저 이후부터는 SSLCertificateChainFile 지시어는 더 이상 사용되지 않습니다.

 

SSLCertificateChainFile "/usr/local/apache2/conf/ssl.crt/ca.crt"

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatechainfile

 


 

        #SSLCACertificatePath /etc/ssl/certs/
        #SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt

인증기관 인증서(CA Certificate) 설정 부분입니다.

클라이언트 인증을 위한 CA 인증서를 찾을 수 있는 CA 인증서 디렉터리 경로를 설정하거나 모든 인증서를 포함하는 하나의 대용량 파일을 설정합니다. 이때 파일은 PEM으로 인코딩되어야 합니다.

SSLCACertificatePath 내에서 인증서 파일을 가리키는 해시 심볼릭 링크가 필요합니다.

 

지시어 : SSLCACertificatePath

요약 설명 : 클라이언트 인증을 위한 PEM 인코딩 CA 인증서 디렉터리

구문 : SSLCACertificatePath directory-path

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

SSLCACertificatePath 지시어는 사용자(서버 관리자)가 거래하는 인증 기관 (CA)의 인증서를 보관하는 디렉터리를 설정합니다. 클라이언트 인증에서 클라이언트 인증서를 확인하는 데 사용됩니다.

이 디렉터리 안의 파일은 PEM으로 인코딩되어야 하며 해시 파일 이름을 통해 액세스됩니다. 따라서 일반적으로 단순히 인증서 파일을 해당 디렉터리에 놓는 것만으로 정상적으로 자공하지 않습니다.

hash-value.N이라는 심볼릭 링크도 같이 만들어 주어야 합니다. 그리고 항상 이 디렉터리에 적절한 심볼릭 링크가 포함되어 있는지 확인해야 합니다.

 

SSLCACertificatePath "/usr/local/apache2/conf/ssl.crt/"

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcacertificatepath

 


 

지시어 : SSLCACertificateFile

요약 설명 : 클라이언트 인증을 위해 연결된 PEM 인코딩 CA 인증서 파일

구문 : SSLCACertificateFile file-path

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

SSLCACertificateFile 지시어는 CA (인증 기관)의 인증서를 조합할 수 있는 올인원 파일을 설정합니다. 이들은 클라이언트 인증에 사용됩니다.

이러한 파일은 단순히 다양한 PEM 인코딩 인증서 파일을 선호 순서대로 연결한 것입니다. SSLCACertificatePath 지시어에 대한 대안으로 사용하거나 또는 SSLCACertificatePath 지시어와 함께 추가로 사용할 수 있습니다.

SSLCACertificateFile "/usr/local/apache2/conf/ssl.crt/ca-bundle-client.crt"

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcacertificatefile

 


 

        #SSLCARevocationPath /etc/apache2/ssl.crl/
        #SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl

인증서 해지 목록 (CRL) 설정 부분입니다.

클라이언트 인증을 위한 CA CRL을 찾을 수 있는 CA 해지 디렉터리 경로를 설정하거나 또는 이들을 모두 포함하는 하나의 대용량 파일을 설정합니다. 이때 파일은 PEM으로 인코딩되어야 합니다.

SSLCARevocationPath 내에서 인증서 파일을 가리키는 해시 심볼릭 링크가 필요합니다.

 

지시어 : SSLCARevocationPath

요약 설명 : 클라이언트 인증을 위한 PEM 인코딩 CA CRL의 디렉터리

구문 : SSLCARevocationPath directory-path

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

SSLCARevocationPath 지시어는 CA (인증 기관)의 CRL (인증서 해지 목록)을 보관하는 디렉터리를 설정합니다. 클라이언트 인증에서 클라이언트 인증서를 해지하는 데 사용됩니다.

이 디렉터리 안의 파일은 PEM으로 인코딩되어야 하며 해시 파일 이름을 통해 액세스됩니다. 따라서 일반적으로 단순히 CRL 파일을 해당 디렉터리에 놓는 것만으로 정상적으로 작동하지 않습니다.

hash-value.rN이라는 심볼릭 링크도 같이 만들어 주어야 합니다. 그리고 항상 이 디렉터리에 적절한 심볼릭 링크가 포함되어 있는지 확인해야 합니다.

 

SSLCARevocationPath "/usr/local/apache2/conf/ssl.crl/"

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcarevocationpath

 


 

지시어 : SSLCARevocationFile

요약 설명 : 클라이언트 인증을 위해 연결된 PEM 인코딩 CA CRL 파일

구문 : SSLCARevocationFile file-path

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

SSLCARevocationFile 지시어는 CA (인증 기관)의 CRL (인증서 해지 목록)을 조합할 수있는 올인원 파일을 설정합니다. 이들은 클라이언트 인증 설정에 사용됩니다.

이러한 파일은 단순히 다양한 PEM 인코딩 CRL 파일을 선호 순서대로 연결한 것입니다. SSLCARevocationPath 지시어에 대한 대안 또는 SSLCARevocationPath 지시어와 함께 추가로 사용할 수 있습니다.

 

SSLCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-client.crl"

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcarevocationfile

 


 

        #SSLVerifyClient require
        #SSLVerifyDepth  10

클라이언트 인증서 확인 유형 및 깊이를 설정하는 부분입니다.

확인 유형은 아래와 같이 설정할 수 있습니다.

none, optional, require, optional_no_ca

Depth는 인증서가 유효하지 않다고 결정하기 전에 인증서 발급자 체인을 얼마나 깊이 확인해야 하는지를 지정하는 숫자입니다.

 

지시어 : SSLVerifyClient

요약 설명 : 클라이언트 인증서 확인 유형

구문 : SSLVerifyClient level

기본값 : SSLVerifyClient level

Override 옵션 : AuthConfig

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

SSLVerifyClient 지시어는 클라이언트 인증에 대한 인증서 확인 수준을 설정합니다. 이 지시어는 서버별 및 디렉토리별 컨텍스트 모두에서 사용할 수 있습니다.

레벨 수준은 아래와 같이 설정할 수 있습니다.

     none : 클라이언트 인증서가 전혀 필요하지 않습니다.

     optional : 클라이언트가 유효한 인증서를 제시할 수 있습니다.

     require : 클라이언트는 유효한 인증서를 제시해야합니다.

     optional_no_ca : 클라이언트가 유효한 인증서를 제시할 수 있습니다. 그러나 (성공적으로) 검증 가능할 필요는 없습니다. 이 옵션은 클라이언트 인증에 의존할 수 없습니다.

 

SSLVerifyClient require

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslverifyclient

 


 

지시어 : SSLVerifyDepth

요약 설명 : 클라이언트 인증서 확인 시 CA 인증서의 인증 수준 최대 깊이

구문 : SSLVerifyDepth number

기본값 : SSLVerifyDepth 1

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Extension

모듈 : mod_ssl

SSLVerifyDepth 지시어는 클라이언트에 유효한 인증서가 없음을 결정하기 전에 mod_ssl이 얼마나 깊이 확인해야 하는지를 설정합니다.

이 지시어는 서버별 및 디렉토리별 컨텍스트 모두에서 사용할 수 있습니다.

깊이는 실제로 최대 중간 인증서 발급자 수, 즉 클라이언트 인증서를 확인하는 동안 추적 가능한 최대 CA 인증서 수입니다.

깊이 0은 자체 서명된 클라이언트 인증서만 허용됨을 의미하고, 기본 깊이 1은 클라이언트 인증서가 자체 서명될 수 있거나 서버에 직접 알려진 CA에 의해 서명되어야 함을 의미합니다.

 

SSLVerifyDepth 10

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslverifydepth

 


 

#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

SSL 엔진에 대한 다양한 옵션을 설정합니다.

 

# o FakeBasicAuth :

클라이언트 X.509를 기본 인증으로 변환합니다. 사용자 이름은 클라이언트 X.509 인증서의 '한 줄'버전입니다.

사용자로부터 암호를 얻지 못합니다. 사용자 파일의 모든 항목에는 'xxj31ZMTZzkVA'비밀번호가 필요합니다.

# o ExportCertData :

SSL_CLIENT_CERT 및 SSL_SERVER_CERT의 두 가지 추가 환경 변수를 내보냅니다. 여기에는 서버 (항상 존재) 및 클라이언트(클라이언트 인증이 사용되는 경우에만 존재)의 PEM 인코딩 인증서가 포함됩니다. 이것은 인증서를 CGI 스크립트로 가져 오는 데 사용할 수 있습니다.

# o StdEnvVars :

이것은 표준 SSL/TLS 관련 'SSL_ *' 환경 변수를 내 보냅니다.

기본적으로 이 내보내기는 성능상의 이유로 꺼져 있습니다.

일반적으로 CGI 및 SSI 요청에 대해서만 내보내기를 활성화합니다.

# o OptRenegotiate :

이는 SSL 지시어가 디렉터리별 컨텍스트에서 사용될 때 최적화된 SSL 연결 renegotiation 처리를 가능하게합니다.

 

지시어 : SSLOptions

요약 설명 : 다양한 SSL 엔진 런타임 옵션 구성

구문 : SSLOptions [+|-]option ...

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

   디렉터리 섹션 안

   .htaccess 파일

상태 : Extension

모듈 : mod_ssl

SSLOptions 지시어를 사용하여 디렉터리별로 다양한 런타임 옵션을 제어할 수 있습니다.

일반적으로 여러 SSLOptions가 디렉터리에 적용된 경우 가장 구체적인 옵션이 선택됩니다.

SSLOptions 지시어의 모든 옵션 앞에 더하기 (+) 또는 빼기 (-) 기호가 있으면 옵션이 병합되거나 제거됩니다.

+가 앞에 오는 모든 옵션은 현재 시행 중인 옵션에 추가되고, - 기호 앞에 있는 모든 옵션은 현재 시행중인 옵션에서 제거됩니다.

다음의 옵션들을 사용할 수 있습니다.

 

StdEnvVars

이 옵션이 활성화되면 SSL 관련 CGI/ SSI 환경 변수의 표준 세트가 생성됩니다.일반적으로 CGI 및 SSI 요청에 대해서만 이 옵션을 활성화합니다.

 

ExportCertData

이 옵션을 사용하면 SSL_SERVER_CERT, SSL_CLIENT_CERT 및 SSL_CLIENT_CERT_CHAIN_n (n = 0,1,2, ..)과 같은 추가 CGI/SSI 환경 변수가 생성됩니다.

여기에는 현재 HTTPS 연결에 대한 서버 및 클라이언트의 PEM 인코딩 X.509 인증서가 포함되어 있으며 CGI 스크립트에서 보다 자세한 인증서 확인을 위해 사용할 수 있습니다.

또한 클라이언트 인증서 체인의 다른 모든 인증서도 제공됩니다. 이로 인해 환경이 약간 부풀려지기 때문에 이 옵션은 필요한 경우에만 활성화해야 합니다.

 

FakeBasicAuth

이 옵션이 활성화되면 클라이언트 X509 인증서의 주체 식별 이름 (DN)이 HTTP 기본 인증 사용자 이름으로 변환됩니다. 이는 표준 Apache 인증 방법을 액세스 제어에 사용할 수 있음을 의미합니다.

사용자 이름은 클라이언트의 X509 인증서의 제목일 뿐입니다. 그리고 이 제목은 OpenSSL의 openssl x509 명령을 실행하여 정의할 수 있습니다

$ openssl x509 -noout -subject -in certificate.crt

 

사용자로부터 암호를 얻지 못합니다. 사용자 파일의 모든 항목에는 아래 암호가 필요합니다

xxj31ZMTZzkVA

위 암호는 단어 password의 DES 암호화 문자열입니다.

mod_auth_basic 내의 AuthBasicFake 지시어는 사용자 이름과 암호의 구조를 제어하면서 기본 인증을 위조하기 위한 보다 일반적인 메커니즘으로 사용될 수 있습니다.

mod_auth_basic 내의 AuthBasicFake 지시문은 사용자 이름과 비밀번호의 구조를 제어함으로써 기본 인증을 위조하기 위한보다 일반적인 메커니즘으로 사용할 수 있습니다.

 

StrictRequire

이 옵션을 사용하면 SSLRequireSSL 또는 SSLRequire가 액세스를 금지해야 한다고 결정한 경우 액세스 금지가 강제됩니다.

일반적으로 기본값은 'Satisfy any' 지시어가 사용되고 기타 액세스 제한이 전달되는 경우 SSLRequireSSL 또는 SSLRequire로 인한 액세스 거부가 무시됩니다 (Apache Satisfy 메커니즘이 작동하는 방식).

엄격한 액세스 제한을 위해 SSLRequireSSL 또는 SSLRequire를 'SSLOptions + StrictRequire'와 함께 사용할 수 있습니다. 그런 다음 mod_ssl이 액세스를 거부하면 추가적인 'Satisfy Any'가 작동하지 않습니다.

 

OptRenegotiate

이 옵션은 SSL 지시어가 디렉터리별 컨텍스트에서 사용될 때 최적화된 SSL 연결 renegotiation 처리를 가능케 합니다.

기본적으로 SSL 매개 변수의 모든 디렉토리별 재구성이 전체 SSL 재협상 핸드셰이크를 발생시킬 경우 엄격한 체계를 사용할 수 있습니다.

이 옵션을 사용하면 mod_ssl은 보다 세분화된 (그러나 여전히 안전한) 매개 변수 검사를 수행하여 불필요한 핸드셰이크를 방지할 수 있습니다. 그러나 이러한 상세 검사는 때때로 사용자가 기대하는 것과 다를 수 있으므로 디렉터리 단위로만 활성화하는 것을 권장합니다.

 

LegacyDNStringFormat

이 옵션은 SSL_ _ _DN 변수의 값이 형식화(format) 방식에 영향을 줍니다.

Apache2 버전 2.3.11부터 Apache HTTPD는 기본적으로 RFC 2253 호환 형식을 사용합니다. 이는 속성 사이의 구분 기호로 쉼표를 사용하고 비 ASCII 문자 (UTF8로 변환됨) 사용을 허용하고 백 슬래시(\)로 다양한 특수 문자를 이스케이프하며 "C" 속성이 마지막에 있는 속성을 정렬합니다.

LegacyDNStringFormat이 설정되면 "C" 속성을 먼저 정렬하고 슬래시를 구분 기호로 사용하며 비 ASCII 및 특수 문자를 일관된 방식으로 처리하지 않는 이전 형식이 사용됩니다.

 

SSLOptions +FakeBasicAuth -StrictRequire
<Files ~ "\.(cgi|shtml)$">
    SSLOptions +StdEnvVars -ExportCertData
</Files>

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#ssloptions

 


 

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>

cgi, shtml, phtml, php 파일에 대해서 SSL 옵션 중 하나인 StdEnvVars를 적용합니다.

 

지시어 : FilesMatch

요약 설명 : 정규식과 일치하는 파일 이름에 적용되는 지시어 포함

구문 : <FilesMatch regex> ... </FilesMatch>

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

   디렉터리 섹션 안

   .htaccess 파일

Override 옵션 : All

상태 : Core

모듈 : core

<FilesMatch> 지시문은 <Files> 지시어와 마찬가지로 파일 이름별로 포함된 지시어의 범위를 제한합니다. 그러나 정규식을 허용합니다.

<FilesMatch ".+\.(gif|jpe?g|png)$">
    # ...
</FilesMatch>

 

정규표현식 ".+\.(정규표현식 ".+\.(gif|jpe?g|png)$")$" 이해

.+ : + 기호 앞의 임의의 문자(.)가 하나 이상 존재

\. : 문자 '.'를 정규표현식의 특수 문자에서 이스케이프시켜 단순한 일반 문자로 인식케 함

(    ) : 괄호 안 문자열을 그룹화

| : or 연산자

jpe?g : ? 기호 앞의 문자 e가 존재할 수도 있고 없을 수도 있음

$ : $ 앞의 문자열로 끝남

위 내용을 바탕으로 일반인들이 이해하기 쉽게 설명하면 아래와 같이 이야기할 수 있을 겁니다.

정규표현식 ".+\.(gif|jpe?g|png)$"을 글로 풀어내면

확장자 앞의 파일명은 하나 이상의 임의의 문자로 지정되어 있고

확장자는 .gif이거나 .jpg이거나 .jpeg 이거나 .png인 파일들

 

<FilesMatch "^(?<sitename>[^/]+)">
    Require ldap-group cn=%,ou=combined,o=Example
</FilesMatch>

Apache2 버전 2.4.8 이후부터는 이름이 붙여진 그룹 및 역참조 항목을 환경에 적용하는 경우 해당 이름 앞에 "MATCH_"을 붙이고 해당 항목도 대문자로 적습니다.

이런 방식으로  mod_rewrite와 같은 모듈 및 표현식 내에서 파일 요소를 참조할 수 있습니다.

혼동을 막기 위해 번호(이름이 붙이 않은)의 역참조 등은 무시됩니다. 따라서 대신 명명된 그룹을 사용하시기 바랍니다.

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

 


 

        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

/usr/lib/cgi-bin 디렉터리에 대하여 SSL 옵션 중 하나인 StdEnvVars를 적용합니다.

 

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

 


 

 

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

# SSL 프로토콜 조정 설정 부분입니다.

기본적이지만 안전하면서도 SSL/TLS 표준 준수하는 종료 접근 방식은 mod_ssl이 사용자에게 닫기 알림 경고를 보내기는 하지만 클라이언트의 닫기 알림 경고를 기다리지 않고 바로 실행하는 것입니다.

다른 종료 방법이 필요한 경우 다음 변수 중 하나를 사용할 수 있습니다.

# o ssl-unclean-shutdown :

# 이것은 연결이 닫힐 때 불완전한 종료를 강제합니다. 즉, SSL 닫기 알림 경고를 보내거나 받을 수 없습니다. 이것은 SSL/TLS 표준을 위반하지만 일부 브레인 데드 브라우저에 필요합니다.

mod_ssl이 닫기 알림 경고를 보내는 표준 접근 방식으로 인한 I/O 오류를 수신할 때 이것을 사용합니다.

 

# o ssl-accurate-shutdown :

# 이것은 연결이 닫힐 때 정확한 종료를 강제합니다. 즉, SSL 닫기 알림 경고가 전송되고 mod_ssl은 클라이언트의 닫기 알림 경고를 기다립니다.

이것은 SSL/TLS 표준을 준수하지만 실제로는 종종 브레인 데드 브라우저와의 연결을 중단시킵니다. SSL 구현이 올바르게 작동한다는 것을 알고있는 브라우저에만 이것을 사용하십시오.

 

알림

문제를 일으키는 클라이언트의 대부분의 문제는 HTTP 연결 유지 기능과도 관련이 있으므로 일반적으로 추가로 해당 클라이언트에 대해서도 연결 유지를 비활성화 할 수 있습니다. 이를 위해 "nokeepalive"변수를 사용하십시오.

마찬가지로, 일부 클라이언트는 HTTP/1.1 구현의 문제를 해결하기 위해 HTTP/1.0을 사용하도록 강제해야합니다. 이를 위해 "downgrade-1.0"및 "force-response-1.0"변수를 사용하십시오.

 

지시어 : BrowserMatch

요약 설명 : HTTP User-Agent에서 조건부 환경 변수 설정

구문 : BrowserMatch regex [!]env-variable[=value] [[!]env-variable[=value]] ...

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

   디렉터리 섹션 안

   .htaccess 파일

Override 옵션 : FileInfo

상태 : Base

모듈 : mod_setenvif

BrowserMatch는 User-Agent HTTP 요청 헤더에 조건부로 환경 변수를 설정하는 SetEnvIf 지시문의 특수한 경우입니다.

다음 두 줄의 효과는 동일합니다.

BrowserMatch Robot is_a_robot
SetEnvIf User-Agent Robot is_a_robot

 

아래는 몇 가지 추가적인 예들입니다.

BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
BrowserMatch MSIE !javascript

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_setenvif.html#browsermatch