기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
튜토리얼: AL2023 기반 SSL/TLS 구성
Secure Sockets Layer/Transport Layer Security(SSL/TLS)는 웹 서버와 웹 클라이언트 간 암호화된 채널을 만들어 전송 중인 데이터가 도청되지 않도록 보호합니다. 이 자습서에서는 AL2023 및 Apache 웹 서버를 사용하는 EC2 인스턴스에 SSL/TLS 지원을 수동으로 추가하는 방법을 설명합니다. 이 자습서에서는 로드 밸런서를 사용하고 있지 않다고 가정합니다. Elastic Load Balancing를 사용하는 경우 AWS Certificate Manager
일반적으로 웹 암호화를 단순히 SSL이라고 부릅니다. 웹 브라우저에서 여전히 SSL을 지원하지만, 후속 프로토콜인 TLS가 공격에 덜 취약합니다. AL2023 에서는 기본적으로 모든 버전의 SSL에 대한 서버 측 지원을 비활성화합니다. 보안 표준 본문
이 자습서는 현대 웹 암호화를 단순히 TLS로 언급합니다.
중요
이 절차는 AL2023 사용을 위한 것입니다. 다른 배포를 실행하는 EC2 인스턴스 또는 이전 Amazon Linux 버전을 실행하는 인스턴스를 설정하려는 경우 이 자습서의 일부 절차가 적용하지 않을 수 있습니다. Ubuntu의 경우 Ubuntu 커뮤니티 설명서: Ubuntu에서 SSL 열기
참고
또는 Nitro 엔클레이브용 AWS Certificate Manager (ACM) 을 사용할 수도 있습니다. 이 엔클레이브 애플리케이션은 AWS Nitro 엔클레이브가 설치된 Amazon EC2 인스턴스에서 실행되는 웹 애플리케이션 및 서버에서 퍼블릭 및 프라이빗 SSL/TLS 인증서를 사용할 수 있는 엔클레이브 애플리케이션입니다. AWS Nitro Enclaves는 격리된 컴퓨팅 환경을 생성하여 SSL/TLS 인증서 및 프라이빗 키와 같은 매우 민감한 데이터를 보호하고 안전하게 처리할 수 있도록 지원하는 Amazon EC2 기능입니다.
Nitro Enclaves용 ACM은 Amazon EC2 Linux 인스턴스에서 실행되는 nginx와 함께 작동하여 프라이빗 키를 생성하고, 인증서와 프라이빗 키를 배포하며, 인증서 갱신을 관리합니다.
Nitro Enclaves용 ACM을 사용하려면 엔클레이브 지원 Linux 인스턴스를 사용해야 합니다.
자세한 내용은 Nitro 엔클레이브란 무엇입니까? 를 AWS 참조하십시오. 그리고 니트로 엔클레이브AWS Certificate Manager 사용 설명서의 니트로 엔클레이브에 대해서도 읽어보세요.AWS
필수 조건
이 자습서를 시작하기 전에 다음 단계를 완료합니다.
-
EBS 지원 AL2023 인스턴스를 시작합니다. 자세한 정보는 AL2Amazon의 023 EC2을 참조하세요.
-
인스턴스가 다음 TCP 포트에서 연결을 허용하도록 보안 그룹을 구성합니다.
-
SSH(포트 22)
-
HTTP(포트 80)
-
HTTPS(포트 443)
자세한 내용은 Amazon EC2 사용 설명서의 Linux 인스턴스의 인바운드 트래픽 승인을 참조하십시오.
-
-
Apache 웹 서버를 설치합니다. step-by-step 지침은 을 참조하십시오. 튜토리얼: AL2 023에 LAMP 서버 설치 httpd 패키지와 그 종속 프로그램만 필요합니다. PHP 및 MariaDB와 관련된 지침은 무시해도 됩니다.
-
웹 사이트를 식별하고 인증하려면 TLS 퍼블릭 키 인프라(PKI)는 도메인 이름 시스템(DNS)을 사용합니다. EC2 인스턴스를 사용하여 퍼블릭 웹 사이트를 호스팅하려는 경우, 웹 서버의 도메인 이름을 등록하거나 Amazon EC2 호스트로 기존 도메인 이름을 전송해야 합니다. 수많은 타사 도메인 등록 및 DNS 호스팅 서비스를 이에 사용할 수 있습니다. 또는 Amazon Route 53을 사용할 수도 있습니다.
1단계: 서버에서 TLS 활성화
이 절차는 자체 서명된 디지털 인증서를 사용하여 AL2023 기반 TLS를 설정하는 프로세스를 안내합니다.
참고
자체 서명된 인증서는 테스트에는 허용되지만 프로덕션에는 허용되지 않습니다. 자체 서명된 인증서를 인터넷에 노출하면 사이트 방문자에게 인사말로 보안 경고가 표시됩니다.
서버에서 TLS를 활성화하려면
-
인스턴스에 연결한 다음 Apache가 실행되는지 확인합니다. 자세한 정보는 AL2023 인스턴스에 연결을 참조하세요.
[ec2-user ~]$
sudo systemctl is-enabled httpd
반환된 값이 "enabled"가 아닌 경우 Apache를 시작한 다음 시스템 부팅 시마다 시작하도록 설정합니다.
[ec2-user ~]$
sudo systemctl start httpd && sudo systemctl enable httpd
-
모든 소프트웨어 패키지가 최신 상태로 업데이트되어 있는지 확인하기 위해, 인스턴스에서 퀵 소프트웨어 업데이트를 실행합니다. 이 업데이트 과정은 몇 분 정도 시간이 소요될 수 있지만, 최신 보안 업데이트와 버그 수정을 위해 수행할 필요가 있습니다.
참고
-y
옵션을 사용하면 확인 여부를 묻지 않고 업데이트를 설치합니다. 설치 전에 업데이트 정보를 확인하려면 이 옵션을 생략합니다.[ec2-user ~]$
sudo dnf install openssl mod_ssl
-
다음 명령을 입력하면 사이트에 대한 정보를 입력할 수 있는 프롬프트가 표시됩니다.
[ec2-user ~]$
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/apache-selfsigned.key -out /etc/pki/tls/certs/apache-selfsigned.crt
그러면 새 파일인
apache-selfsigned.crt
파일이/etc/pki/tls/certs/
디렉터리에 생성됩니다. 지정된 파일의 이름은/etc/httpd/conf.d/ssl.conf
의 SSLCertificateFile 명령에 할당된 기본값과 일치합니다.이제 인스턴스에는 보안 서버 구성과 테스트를 위한 인증서 생성에 사용할 다음 파일이 포함됩니다.
-
/etc/httpd/conf.d/ssl.conf
mod_ssl의 구성 파일입니다. 여기에는 Apache에 암호화 키 및 인증서의 위치, 허용하는 TLS 프로토콜 버전, 허용하는 암호화 암호를 알려주는 명령이 포함되어 있습니다. 다음은 로컬 인증서 파일입니다.
-
/etc/pki/tls/certs/apache-selfsigned.crt
이 파일에는 자체 서명된 인증서와 인증서의 프라이빗 키가 모두 포함됩니다. Apache에서는 인증서와 키를 PEM 형식으로 요구합니다. 이 형식은 아래의 축약된 예제와 같이 "BEGIN" 및 "END" 라인으로 프레임 처리된 Base64 인코딩 ASCII 문자로 구성됩니다.
-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD2KKx/8Zk94m1q 3gQMZF9ZN66Ls19+3tHAgQ5Fpo9KJDhzLjOOCI8u1PTcGmAah5kEitCEc0wzmNeo BCl0wYR6G0rGaKtK9Dn7CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vr GvwnKoMh3DlK44D9dX7IDua2PlYx5+eroA+1Lqf32ZSaAO0bBIMIYTHigwbHMZoT ... 56tE7THvH7vOEf4/iUOsIrEzaMaJ0mqkmY1A70qQGQKBgBF3H1qNRNHuyMcPODFs 27hDzPDinrquSEvoZIggkDMlh2irTiipJ/GhkvTpoQlv0fK/VXw8vSgeaBuhwJvS LXU9HvYq0U6O4FgD3nAyB9hI0BE13r1HjUvbjT7moH+RhnNz6eqqdscCS09VtRAo 4QQvAqOa8UheYeoXLdWcHaLP -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy ... z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0 CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vrGvwnKoMh3DlK44D9dlU3 WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak 3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg== -----END CERTIFICATE-----
파일 이름과 확장명은 편의상 사용되며 기능에 영향을 미치지 않습니다. 예를 들어
ssl.conf
파일에서 관련 명령에 동일한 이름을 사용하는 한, 인증서 이름을cert.crt
,cert.pem
또는 다른 파일 이름으로 지정할 수 있습니다.참고
기본 TLS 파일을 고유의 사용자 지정 파일로 대체하는 경우 파일이 PEM 형식인지 확인하세요.
-
-
Apache를 다시 시작합니다.
[ec2-user ~]$
sudo systemctl restart httpd
참고
앞에서 설명한 대로 EC2 인스턴스에서 TCP 포트 443에 액세스할 수 있는지 확인하세요.
-
Apache 웹 서버가 현재 포트 443에 대해 HTTPS(보안 HTTP)를 지원해야 합니다. 접두사가
https://
인 브라우저 URL 표시줄에 IP 주소 또는 EC2 인스턴스의 정규화된 도메인 이름을 입력하여 이를 테스트합니다.신뢰할 수 없는 자체 서명된 호스트 인증서를 사용하여 사이트에 연결하기 때문에 브라우저에 보안 경고가 연속으로 표시될 수 있습니다. 경고를 무시하고 계속 진행합니다.
Apache 기본 테스트 페이지가 열리면 서버에 TLS가 구성되었다는 것입니다. 브라우저와 서버 사이를 통과하는 모든 데이터가 이제 암호화됩니다.
참고
사이트 방문자에게 경고 화면이 표시되는 것을 방지하려면 암호화뿐만 아니라 해당 사이트의 소유자라는 것을 공개적으로 인증하는 신뢰할 수 있는 CA 서명 인증서를 가져와야 합니다.
2단계: CA가 서명한 인증서 가져오기
CA가 서명한 인증서를 가져오려면 다음 절차를 사용할 수 있습니다.
-
프라이빗 키에서 인증서 서명 요청(CSR)을 생성합니다.
-
인증 기관(CA)에 CSR 제출
-
단일 호스트 인증서 가져오기
-
Apache를 수성하여 인증서 사용
자체 서명된 TLS X.509 호스트 인증서는 CA가 서명한 인증서와 암호적으로 동일합니다. 그 차이는 수학적인 것이 아니라 사회적입니다. CA는 신청자에게 인증서를 발급하기 전에 도메인의 소유권을 최소한으로 검사합니다. 각 웹 브라우저에는 이를 하도록 브라우저 공급업체에서 신뢰한 CA 목록이 포함되어 있습니다. X.509 인증서는 프라이빗 서버 키에 해당하는 퍼블릭 키와 퍼블릭 키에 암호화 방식으로 연결된 CA의 서명으로 주로 구성되어 있습니다. 브라우저가 HTTPS를 통해 웹 서버에 연결되면 서버는 브라우저에서 신뢰할 수 있는 CA 목록을 확인하도록 인증서를 제공합니다. 서명자가 목록에 있거나 신뢰할 수 있는 다른 서명자로 구성되는 신뢰 체인을 통해 서명자에 액세스할 수 있는 경우, 브라우저는 서버와 암호화된 빠른 데이터 채널을 협상하고 페이지를 로드합니다.
요청 확인 절차로 인해 인증서에는 일반적으로 비용이 발생하므로 여러 인증 기관을 알아봐야 합니다. 일부 CA는 기본 수준 인증서를 무료로 제공합니다. 이러한 CA 중 가장 주목할 만한 것은 Let's Encrypt
상업용 서비스를 제공할 계획이라면 AWS Certificate Manager가 좋은 옵션입니다.
호스트 인증서의 기본을 이루는 것은 키입니다. 2019년 현재 정부
중요
이 CA 서명 호스트 인증서 획득 지침은 등록과 호스팅이 완료된 DNS 도메인을 소유하지 않을 경우 제대로 적용하기 어렵습니다.
CA가 서명한 인증서를 가져오려면
-
인스턴스에 연결한 다음 /etc/pki/tls/private/으로 이동합니다. 여기는 TLS에 대한 서버의 프라이빗 키를 저장하는 디렉터리입니다. 기존 호스트 키를 사용하여 CSR을 생성하려면 3단계로 건너뜁니다. 인스턴스 연결에 대한 자세한 내용은 을 참조하십시오. AL2023 인스턴스에 연결
-
(선택 사항) 새 프라이빗 키를 생성합니다. 다음은 몇 가지 키 구성 샘플입니다. 어떤 결과 키도 웹 서버에서 사용할 수 있지만 보안 구현의 정도와 유형은 각각 다릅니다.
-
예 1: 기본 RSA 호스트 키를 만듭니다. 결과 파일인
custom.key
는 2048비트 RSA 프라이빗 키입니다.[ec2-user ~]$
sudo openssl genrsa -out custom.key
-
예 2: 더 큰 모듈러스로 더 강력한 RSA 키를 만듭니다. 결과 파일인
custom.key
는 4096비트 RSA 프라이빗 키입니다.[ec2-user ~]$
sudo openssl genrsa -out custom.key 4096
-
예 3: 암호로 보호되는 4096비트 암호화 RSA 키를 생성합니다. 그러면 AES-128 암호화로 암호화된 4096비트 RSA 프라이빗 키인
custom.key
파일이 생성됩니다.중요
키 암호화를 통해 보안을 강화할 수 있지만, 암호화된 키에는 암호가 필요하기 때문에 이를 사용하는 서비스는 자동으로 시작할 수 없습니다. 이 키를 사용할 때마다 SSH 연결을 통해 암호(위의 예에서는 "abcde12345")를 제공해야 합니다.
[ec2-user ~]$
sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
-
예 4: 비 RSA 암호를 사용하여 키를 생성합니다. RSA 암호화는 두 개의 라지 소수의 결과를 기반으로 하는 공개 키의 크기 때문에 상대적으로 느릴 수 있습니다. 그러나 RSA 암호화 이외의 암호화를 사용하는 TLS의 키를 생성할 수 있습니다. 타원 곡선 수학을 기반으로 하는 키는 동등한 보안 수준을 제공할 때보다 작고 산술적으로 빠릅니다.
[ec2-user ~]$
sudo openssl ecparam -name prime256v1 -out custom.key -genkey
그 결과는 OpenSSL에서 지원하는 "명명된 곡선"인 prime256v1을 사용하는 256비트 타원 곡선 프라이빗 키입니다. NIST
에 따르면 이 키의 암호화 강도는 2048비트 RSA 키보다 약간 더 높습니다. 참고
모든 CA가 RSA elliptic-curve-based 키와 동일한 수준의 키 지원을 제공하는 것은 아닙니다.
새 프라이빗 키의 소유권 및 권한은 매우 제한적(소유자=루트, 그룹=루트, 소유자 전용 읽기/쓰기)이어야 합니다. 명령은 다음 예에서와 같습니다.
[ec2-user ~]$
sudo chown root:root custom.key
[ec2-user ~]$
sudo chmod 600 custom.key
[ec2-user ~]$
ls -al custom.key
이 명령의 결과는 다음과 같아야 합니다.
-rw------- root root custom.key
만족스러운 키를 생성 및 구성한 후 CSR을 생성할 수 있습니다.
-
-
원하는 키를 사용하여 CSR을 생성합니다. 다음 예에는
custom.key
가 사용됩니다.[ec2-user ~]$
sudo openssl req -new -key custom.key -out csr.pem
OpenSSL은 대화 상자를 열고 아래 표의 정보를 입력하라는 메시지를 표시합니다. 도메인에서 확인된 기본 호스트 인증서의 경우 Common Name을 제외한 모든 필드는 선택 사항입니다.
명칭 설명 예 국가 이름 해당 국가의 두 자리 ISO 약자. US(=미국) 주 또는 지방 이름 해당 조직이 위치한 주 또는 지방의 이름. 이 이름은 약어로 사용할 수 없음. 워싱턴 시 이름 조직의 위치(예: 도시). 시애틀 조직 이름 해당 조직의 정식 이름. 조직 이름의 약칭을 사용하지 마세요. Example Corporation 조직 단위 이름 조직에 대한 추가 정보(있는 경우). 부서 예 일반 이름 이 값은 사용자가 브라우저에 입력해야 하는 웹 주소와 정확히 일치해야 합니다. 일반적으로 이는
www.example.com
의 형식으로, 호스트 이름 또는 별칭이 앞에 붙는 도메인 이름을 뜻합니다. 자체 서명된 인증서로 DNS 확인 없이 테스트하는 경우, 일반 이름은 호스트 이름만으로 구성될 수 있습니다. CA는*.example.com
과 같이 와일드 카드 이름을 허용하는 비싼 인증서도 제공합니다.www.example.com 이메일 주소 서버 관리자의 이메일 주소. someone@example.com 마지막으로 OpenSSL은 챌린지 암호(선택 사항)를 입력하라는 메시지를 표시합니다. 이 암호는 해당 CSR 및 사용자와 해당 CA 간의 트랜잭션에만 적용되므로, 암호 및 기타 선택적 필드(선택적 회사 이름)에 대한 해당 CA의 권장 사항을 따릅니다. CSR 챌린지 암호는 서버 작업에 영향을 미치지 않습니다.
결과 파일인
csr.pem
에는 퍼블릭 키, 퍼블릭 키의 디지털 서명 및 입력한 메타데이터가 포함되어 있습니다. -
CA에 CSR을 제출합니다. 이는 보통 텍스트 편집기에서 CSR 파일을 열고 웹 양식에 내용을 복사하는 것으로 구성됩니다. 이때 인증서에 추가할 하나 이상의 주체 대체 이름(SAN)을 입력하라는 메시지가 나타날 수 있습니다.
www.example.com
이 일반 이름일 경우,example.com
은 좋은 SAN이며, 그 반대의 경우도 마찬가지입니다. 사이트 방문자는 이 이름 중 하나를 입력하면 오류 없이 연결됩니다. CA 웹 양식에서 이를 허용하는 경우, SAN 목록에 일반 이름을 포함시킵니다. 일부 CA는 이를 자동으로 포함시킵니다.요청이 승인되면 CA에서 서명한 새 호스트 인증서를 받게 됩니다. CA의 신뢰 체인을 완료하는 데 필요한 추가 인증서가 포함된 중간 인증서 파일을 다운로드하라는 안내를 받을 수도 있습니다.
참고
CA는 다양한 목적을 위해 마련된 여러 형식의 파일을 보낼 수 있습니다. 본 자습서에서는 PEM 형식의 인증서 파일만 사용해야 하는데, 이는 보통
.pem
또는.crt
파일 확장명으로 표시되지만 항상 그런 것은 아닙니다. 어떤 파일을 사용할지 확실하지 않은 경우 텍스트 편집기로 파일을 열고 다음 라인으로 시작되는 블록 하나 이상이 포함되는 파일을 찾습니다.- - - - -BEGIN CERTIFICATE - - - - -
또한 파일은 다음 라인으로 끝나야 합니다.
- - - -END CERTIFICATE - - - - -
또한 명령줄의 파일을 다음과 같이 테스트할 수 있습니다.
[ec2-user certs]$
openssl x509 -in
certificate.crt
-text이 줄이 파일에 나타나는지 확인하세요.
.p7b
,.p7c
, 또는 유사한 파일 확장명으로 끝나는 파일을 사용하지 않습니다. -
/etc/pki/tls/certs
디렉터리에 CA가 서명한 새 인증서와 모든 중간 인증서를 배치합니다.참고
여러 가지 방법으로 새 인증서를 EC2 인스턴스에 업로드할 수 있지만, 가장 간편하고 유익한 방법은 텍스트 편집기(예: vi, nano, 메모장)를 로컬 컴퓨터와 인스턴스에 모두 열고 두 편집기 간에 파일 콘텐츠를 복사하여 붙이는 것입니다. EC2 인스턴스에서 이러한 작업을 수행할 때 루트 [sudo] 권한이 필요합니다. 이렇게 하면 권한 또는 경로 문제가 있는 경우 즉시 확인할 수 있습니다. 하지만 콘텐츠를 복사하는 동안 라인을 추가하거나 어떤 식으로든 콘텐츠를 변경하지 않도록 주의하세요.
/etc/pki/tls/certs
디렉터리 내에서 파일 소유권, 그룹 및 권한 설정이 매우 제한적인 AL2023 기본값 (소유자=루트, 그룹=루트, 소유자 전용 읽기/쓰기) 과 일치하는지 확인합니다. 다음 예제는 사용하는 명령을 보여 줍니다.[ec2-user certs]$
sudo chown root:root custom.crt
[ec2-user certs]$
sudo chmod 600 custom.crt
[ec2-user certs]$
ls -al custom.crt
이 명령의 결과는 다음과 같아야 합니다.
-rw------- root root custom.crt
중간 인증서 파일에 대한 권한은 덜 엄격합니다(소유자=루트, 그룹=루트, 소유자 쓰기 가능, 그룹 읽기 가능, 모든 사용자 읽기 가능). 다음 예제는 사용하는 명령을 보여 줍니다.
[ec2-user certs]$
sudo chown root:root intermediate.crt
[ec2-user certs]$
sudo chmod 644 intermediate.crt
[ec2-user certs]$
ls -al intermediate.crt
이 명령의 결과는 다음과 같아야 합니다.
-rw-r--r-- root root intermediate.crt
-
/etc/pki/tls/private/
디렉터리에서 CSR을 생성할 때 사용한 프라이빗 키를 배치합니다.참고
여러 가지 방법으로 사용자 지정 키를 EC2 인스턴스에 업로드할 수 있지만, 가장 간편하고 유익한 방법은 텍스트 편집기(예: vi, nano, 메모장)를 로컬 컴퓨터와 인스턴스에 모두 열고 두 편집기 간에 파일 콘텐츠를 복사하여 붙이는 것입니다. EC2 인스턴스에서 이러한 작업을 수행할 때 루트 [sudo] 권한이 필요합니다. 이렇게 하면 권한 또는 경로 문제가 있는 경우 즉시 확인할 수 있습니다. 하지만 콘텐츠를 복사하는 동안 라인을 추가하거나 어떤 식으로든 콘텐츠를 변경하지 않도록 주의하세요.
/etc/pki/tls/private
디렉터리 내에서 다음 명령을 사용하여 파일 소유권, 그룹 및 권한 설정이 매우 제한적인 AL2023 기본값 (소유자=루트, 그룹=루트, 소유자 전용 읽기/쓰기) 과 일치하는지 확인하십시오.[ec2-user private]$
sudo chown root:root custom.key
[ec2-user private]$
sudo chmod 600 custom.key
[ec2-user private]$
ls -al custom.key
이 명령의 결과는 다음과 같아야 합니다.
-rw------- root root custom.key
-
새 인증서 및 키 파일을 반영하기 위해
/etc/httpd/conf.d/ssl.conf
를 편집합니다.-
Apache의
SSLCertificateFile
명령에 CA가 서명한 호스트 인증서의 경로와 파일 이름을 입력합니다.SSLCertificateFile /etc/pki/tls/certs/custom.crt
-
중간 인증서 파일을 받은 경우(이 예에서는
intermediate.crt
), Apache의SSLCACertificateFile
명령을 사용하여 경로 및 파일 이름을 입력합니다.SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
참고
일부 CA는 호스트 인증서와 중간 인증서를 단일 파일로 결합하기 때문에
SSLCACertificateFile
명령이 불필요합니다. CA가 제공한 지침을 참조하세요. -
Apache의
SSLCertificateKeyFile
명령에 프라이빗 키(이 예에서는custom.key
)의 경로와 파일 이름을 입력합니다.SSLCertificateKeyFile /etc/pki/tls/private/custom.key
-
-
/etc/httpd/conf.d/ssl.conf
를 저장하고 Apache를 다시 시작합니다.[ec2-user ~]$
sudo systemctl restart httpd
-
https://
접두사가 포함된 브라우저 URL 막대에 도메인 이름을 입력하여 서버를 테스트합니다. 브라우저에서는 테스트 페이지가 오류 생성 없이 HTTPS를 통해 로드되어야 합니다.
3단계: 보안 구성 테스트 및 강화
TLS이 작동되고 일반에 공개된 후 이의 실제 보안 수준을 테스트해야 합니다. 보안 설정을 무료로 완벽하게 분석해 주는 Qualys SSL Labs
중요
실제 테스트는 서버 보안에 매우 중요합니다. 구성상의 작은 오류가 심각한 보안 침해 및 데이터 손실로 이어질 수 있습니다. 권장되는 보안 사례는 연구 및 새롭게 생겨나는 위협에 대처하기 위해 끊임없이 변화하므로 보안 감사를 주기적으로 실시하는 것이 서버 관리에 필수적입니다.
Qualys SSL Labswww.example.com
형식으로 서버의 정규화된 도메인 이름을 입력합니다. 약 2분 후 사이트 등급(A - F) 및 확인된 상세 분석 결과를 받게 됩니다. 다음 표에는 AL2023 기본 Apache 구성과 동일한 설정과 기본 Certbot 인증서를 사용하는 도메인에 대한 보고서가 요약되어 있습니다.
종합 등급 | B |
인증서 | 100% |
프로토콜 지원 | 95% |
키 교환 | 70% |
암호화 수준 | 90% |
개요에서 구성이 대체로 문제가 없어 보여도 세부 정보 보고서에서는 몇몇 잠재적 문제를 여기에 심각도 순서로 나열하여 표시합니다.
✗ RC4 암호는 이전 버전의 특정 브라우저에서 사용하도록 지원됩니다. 암호는 암호화 알고리즘의 수학적 핵심입니다. TLS 데이터 스트림을 암호화하는 데 사용하는 빠른 암호인 RC4에는 몇 가지 심각한 취약점
✗ 이전 TLS 버전이 지원됩니다. 구성에서는 TLS 1.0(이미 사용 중지 상태)과 TLS 1.1(사용 중지 절차 진행 중)을 지원합니다. 2018년부터는 TLS 1.2만 권장됩니다.
✗ 전방향 보안은 부분적으로 지원됩니다. 전방향 보안
TLS 구성을 수정하고 향후에 대비하려면
-
텍스트 편집기에서
/etc/httpd/conf.d/ssl.conf
구성 파일을 열고 다음 줄의 시작 부분에 "#"을 입력하여 해당 줄을 주석으로 처리합니다.#SSLProtocol all -SSLv3
-
다음 명령을 추가합니다.
#SSLProtocol all -SSLv3 SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
이러한 명령은 SSL 버전 2 및 3과 TLS 버전 1.0 및 1.1을 명시적으로 비활성화합니다. 이제 이 서버는 TLS 1.2 이외의 프로토콜을 사용하는 클라이언트와의 암호화된 연결을 허용하지 않습니다. 명령의 상세 내용은 서버의 구성 내용을 사람에게 더욱 명확히 전달합니다.
참고
이러한 방식으로 TLS 버전 1.0 및 1.1을 비활성화하면 적은 비율의 오래된 웹 브라우저가 사이트에 액세스하지 못하도록 차단합니다.
허용된 암호의 목록을 수정하려면
-
구성 파일인
/etc/httpd/conf.d/ssl.conf
에서SSLCipherSuite
명령이 포함된 섹션을 찾고 기존의 줄을 줄의 시작에 “#”을 입력하여 주석으로 처리합니다.#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
-
명시적 암호 그룹과 전방향 보안을 우선순위에 두고 부정확한 암호를 방지하는 암호 오더를 지정합니다. 여기에 사용된
SSLCipherSuite
명령은 서버에서 실행되는 특정 소프트웨어에 맞게 TLS 구성을 조정하는 Mozilla SSL Configuration Generator의 출력에 기반합니다. (자세한 내용은 Mozilla의 Security/Server Side TLS(보안/서버 측 TLS) 를 참조하세요.) 먼저 다음 명령의 출력을 사용하여 Apache와 OpenSSL의 버전을 확인합니다. [ec2-user ~]$
yum list installed | grep httpd
[ec2-user ~]$
yum list installed | grep openssl
예를 들어, 반환된 정보가 Apache 2.4.34 및 OpenSSL 1.0.2인 경우 이를 생성기에 입력합니다. "현대" 호환성 모델을 선택하면 적극적으로 보안을 적용하지만 대부분의 브라우저에서 여전히 작동하는
SSLCipherSuite
명령을 생성합니다. 소프트웨어가 최신 구성을 지원하지 않으면 소프트웨어를 업데이트하거나 대신 "중간" 구성을 선택할 수 있습니다.SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
선택된 암호에는 이름에 Elliptic Curve Diffie-Hellman Ephemeral의 약자인 ECDHE가 포함되어 있습니다. ephemeral은 전방향 보안을 나타냅니다. 부차적 결과로서 해당 암호는 RC4를 지원하지 않습니다.
내용이 표시되지 않는 기본값 또는 terse 명령 대신 명시적 암호 목록을 사용하는 것이 좋습니다.
생성된 명령을
/etc/httpd/conf.d/ssl.conf
에 복사합니다.참고
여기에서는 가독성을 위해 여러 줄로 표시했지만, 이 명령은
/etc/httpd/conf.d/ssl.conf
에 복사할 때 암호 이름 사이에 공백 없이 콜론만을 추가하여 한 줄에 입력해야 합니다. -
마지막으로 줄 시작 부분에 있는 "#"을 제거하여 다음 줄의 주석 처리를 해제합니다.
#SSLHonorCipherOrder on
이 명령은 (이 예에서는) 전방향 보안을 지원하는 암호를 포함하여 서버에서 순위가 높은 암호를 선호하도록 합니다. 이 명령이 설정되면 서버는 먼저 강력한 보안 연결 설정을 시도해 본 후 보안이 더 약한 허용된 암호로 대체합니다.
이 두 절차를 모두 완료한 다음에는 변경 사항을 /etc/httpd/conf.d/ssl.conf
에 저장하고 Apache를 재시작합니다.
Qualys SSL Labs
종합 등급 | A |
인증서 | 100% |
프로토콜 지원 | 100% |
키 교환 | 90% |
암호화 수준 | 90% |
OpenSSL을 업데이트할 때마다 새 암호가 사용되고 이전 암호에 대한 지원은 제거됩니다. EC2 AL2023 인스턴스를 유지하고 up-to-date, OpenSSL의
문제 해결
-
암호를 입력하지 않으면 Apache 웹 서버가 시작되지 않음
암호화되고 암호로 보호되는 프라이빗 서버 키를 설치한 경우 이는 예상된 동작입니다.
키에서 암호화 및 암호 요구 사항을 제거할 수 있습니다. 기본 디렉터리에
custom.key
라는 암호화된 프라이빗 RSA 키가 있고 이 키의 암호가abcde12345
라고 가정하면, EC2 인스턴스에서 다음 명령을 실행하여 이 키의 암호화되지 않은 버전을 생성합니다.[ec2-user ~]$
cd /etc/pki/tls/private/
[ec2-user private]$
sudo cp custom.key custom.key.bak
[ec2-user private]$
sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt
[ec2-user private]$
sudo mv custom.key.nocrypt custom.key
[ec2-user private]$
sudo chown root:root custom.key
[ec2-user private]$
sudo chmod 600 custom.key
[ec2-user private]$
sudo systemctl restart httpd
이제 Apache가 암호를 묻지 않고 시작할 것입니다.
-
sudo dnf install -y mod_ssl을 실행할 때 오류가 발생합니다.
SSL에 필요한 패키지를 설치하려 할 때 다음과 같은 오류가 표시될 수 있습니다.
Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64 Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64
이는 일반적으로 EC2 인스턴스가 AL2023 인스턴스를 실행하고 있지 않음을 의미합니다. 이 자습서는 공식 AL2023 AMI에서 새로 생성한 인스턴스만 지원합니다.