웹 사이트에 SSL을 설정하는 것은 어려운 과제입니다. 사이트 방문자, 브라우저 및 검색 엔진은 적절히 보안된 보안 소켓 레이어 (SSL) 웹 사이트를 보상합니다. 이전에는 이 과정이 SSL 인증서를 구매, 설치 및 구성하는 것을 포함했습니다. 그러나 Cloudflare SSL을 사용하면 몇 번의 클릭으로 SSL을 구성할 수 있습니다!
이 문서에서는 Cloudflare를 통해 사이트를 SSL 암호화로 구성하는 방법에 대해 알아보겠습니다. 그래서 엔드 투 엔드 암호화된 SSL 연결을 설정하는 방법을 익히세요!
전제 조건
이 튜토리얼을 따라하기 위해 아래의 몇 가지 전제 조건이 필요합니다:
- A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
- Ubuntu Linux 서버에서 NGINX가 설치되고 구성되어 있어야 합니다. 이 튜토리얼은 Linux와 NGINX를 사용하여 설명하지만, 동일한 일반적인 프로세스가 IIS 또는 Apache에도 작동합니다.
Cloudflare Universal SSL 설정: 시작하기
다음은 클라우드플레어를 사용하여 SSL을 구성할 수 있는 몇 가지 방법이 있습니다. 종종 가장 빠른 방법은 Universal SSL을 선택하는 것입니다. 왜냐하면 Universal SSL을 사용하면 SSL 인증서를 찾아 구입하는 대신 클라우드플레어가 인증서를 제공하고, 그 후 클라우드플레어를 통해 전송된 모든 트래픽이 해당 인증서를 사용합니다.
Universal SSL을 활성화한 후, 클라우드플레어는 방문자와 검색 엔진 모두에게 유효한 SSL 인증서를 제공합니다. 클라우드플레어는 또한 서버나 웹사이트를 해당 인증서를 사용하도록 구성할 필요가 없습니다. 정말 편리합니다!
1. 웹 브라우저를 시작하고 클라우드플레어 대시보드에 로그인합니다.
2. 계정 도메인 목록에서 웹 사이트로 이동합니다. 아래 이미지를 참조하세요.

3. 이제 SSL/TLS를 클릭하여 사이트의 암호화 옵션을 확인합니다.

4. Flexible 옵션을 선택하여 Universal SSL을 활성화합니다. 선택한 후 변경 사항이 즉시 적용됩니다. 이제 사이트는 브라우저와 클라우드플레어 간에 암호화되었습니다!

Full End-to-End SSL 암호화 구성
Universal SSL은 사이트를 보호하기 위한 훌륭한 옵션이지만, 서버와 클라우드플레어 간의 트래픽은 보안되지 않은 상태로 남아 있습니다. 다행히, 클라우드플레어에서 서버로의 트래픽을 암호화하는 두 가지 암호화 모드인 Full 및 Full (strict) 암호화가 있으며, 각각 주로 다른 인증서 설치 요구 사항이 있습니다.
- Full – 서버에 인증서가 필요하지만, 이는 자체 서명된 인증서일 수 있습니다.
- 전체 (엄격) – 설치된 서버 측 인증서는 유효한 인증서여야 합니다.
이러한 암호화 간의 차이와 설정 방법에 대해 알아봅시다.
자체 서명 인증서로 전체 SSL/TLS 암호화 설정
Universal SSL과 달리 전체 SSL/TLS 암호화는 웹 서버가 SSL 인증서를 올바르게 제공하여 서버에서 Cloudflare로의 트래픽을 암호화해야 합니다. 이를 수행하는 여러 가지 방법이 있지만, 이 튜토리얼은 NGINX가 설치된 Linux 서버에서의 단계를 보여줍니다.
자체 서명 인증서 생성
Cloudflare와 원본 서버 간의 연결을 암호화하려면 SSL 인증서가 필요합니다. 전체 SSL/TLS 암호화 모드에서는 인증서가 완전히 신뢰되지 않아도 되기 때문에 빠르게 시작할 수 있는 자체 서명 인증서를 사용할 수 있습니다.
1. Linux 웹 서버에 안전한 셸 (SSH) 연결합니다.
2. 아래 명령을 실행하여 표준 Ubuntu SSL 디렉터리 (/etc/ssl
)로 변경합니다. cd /etc/ssl

/etc/ssl
directory3. 이제 openssl
명령을 실행하여 사이트의 공개 및 개인 키를 생성합니다. 아래 openssl
명령을 실행합니다.
이 명령은 몇 가지를 수행합니다:
-x509
매개변수로 제공되는 X.509 인증서를 요청 (req
)합니다.- NGINX에서 참조될 때
-nodes
매개변수를 사용하여 시작시 NGINX가 인증서를 읽을 수 있게 합니다. -days
를 지정하여 인증서의 유효 기간을 나타냅니다.
- 이메일 주소:
[email protected]

5. 마지막으로 test
명령을 사용하여 인증서가 존재하는지 확인합니다. test
명령이 (echo $?
) 0
을 반환하면 파일이 예상대로 존재합니다. 다음 스크린샷에서 각 명령이 0 값을 반환하는 것을 볼 수 있습니다.

NGINX 구성
인증서가 생성되고 /etc/ssl/certs
및 /etc/ssl/private
키 위치에 저장된 후, NGINX는 인증서를 적용하고 사이트 콘텐츠를 제공하도록 구성되어야 합니다.
NGINX 사이트 구성은 일반적으로 가상 호스트 파일에 포함된 server
블록에 정의됩니다. 아래 예에서 기본 사이트 구성은 test.adamlistek.me.conf
파일에 저장되어 있으며 주요 nginx.conf
파일에 포함됩니다.
1. 먼저 새 가상 호스트 파일을 원하는 이름으로 만든 다음, 이 예제에서는 /etc/nginx/vhosts.d
디렉토리 아래에 test.adamlistek.me.conf
로 이름을 지정하십시오. 그런 다음 아래 내용을 가상 호스트 파일로 복사하여 저장하십시오.
test.adamlistek.me
도메인 이름을 자신의 것으로 바꿉니다. 이는 따라오는 목적을 위한 것입니다. 그리고/etc/nginx/vhosts.d
위치가 존재하지 않는 경우mkdir /etc/nginx/vhosts.d
를 실행하여 디렉토리를 만듭니다.
2. 기본 NGINX 구성 파일 /etc/nginx/nginx.conf
이 필요한 include
줄을 http
블록 내에 포함하고 있는지 확인하십시오. 이는 블록의 끝에 위치합니다.
3. systemd에서 작동 중이라면 다음 명령을 사용하여 NGINX를 다시 시작하십시오. 이는 리눅스용 현대 시스템 및 서비스 관리자입니다.
4. Cloudflare로 돌아가서 자체 서명된 인증서가 작동하는지 확인하십시오. 이를 위해 아래에 표시된대로 DNS 레코드에서 “orange-cloud”를 비활성화하십시오. “orange-cloud” 옵션을 비활성화하면 Cloudflare를 우회하여 웹 서버에서 요청을 직접 제공합니다.

5. 웹 브라우저에서 웹 사이트로 이동하여 새로 생성된 자체 서명된 인증서가 반환되는지 확인하십시오. 이렇게하면 아래에 표시된 경고 페이지가 표시됩니다.

6. 마지막으로, 클라우드플레어에서 전체 TLS/SSL 암호화를 활성화하십시오. 이를 위해 이전에 비활성화한 DNS 레코드에서 “오렌지-클라우드” 클라우드플레어 프록시 상태를 다시 활성화하십시오. 그런 다음 SSL/TLS 탭으로 이동하고 아래에 표시된 전체 라디오 버튼을 클릭하십시오.

Full (strict) SSL/TLS 암호화를 위한 오리진 인증서 생성
전체 암호화 모드는 웹 서버에서 제시된 인증서가 실제 유효한 인증서 체인을 갖추고 있는 것을 보장하지 않습니다. 따라서 비엄격한 암호화를 선택하고 클라우드플레어는 서버에서 제시된 모든 인증서를 수락합니다.
클라우드플레어는 오리진 서버 연결을 안전하게 하기 위해 무료 TLS 인증서를 생성할 수 있는 기능을 제공합니다. 그러나 클라우드플레어에서 제공하는 오리진 인증서를 사용하는 데는 두 가지 단점이 있습니다. 하나는 인증서를 수동으로 생성하고 설치해야한다는 것입니다. 두 번째는 인증서가 클라우드플레어를 제외한 모든 브라우저에서 신뢰할 수없는 자체 서명 인증서처럼 보인다는 것입니다.
이러한 튜토리얼의 범위를 벗어나지만 오리진 CA 인증서 생성 API 엔드포인트를 사용하여 인증서 생성을 자동화하는 것이 가능합니다.
1. 아래에 표시된 것처럼 SSL/TLS 탭 -> 원본 서버로 이동하여 오리진 서버로 이동하고 인증서 생성 버튼을 클릭하십시오.

2. 아래에서 볼 수 있듯이 기본 옵션은 이미 15년 동안 유효한 도메인을 위한 와일드카드 인증서를 생성하도록 설정되어 있습니다. 기본 옵션을 유지한 채로 페이지 오른쪽 하단의 생성 버튼을 클릭하여 인증서를 생성하십시오.
A wildcard certificate, shown as
*.domain.com
, means that any subdomain will also be covered by this certificate including www.

3. 새로 생성된 인증서를 GNU nano 텍스트 편집기를 사용하여 Linux 시스템에 저장하십시오. 저장해야 할 키가 두 개이기 때문에 키 파일을 한 번에 하나씩 저장해야 합니다.
원본 인증서를 생성한 시점에만 사용할 수 있는 개인 키를 저장해야 합니다. 이 키를 실수로 잃어 버리면 인증서를 폐기하고 새 인증서를 발급해야 합니다.
터미널을 열고 첫 번째 아래 명령을 실행하여 nano에서 공개 키 파일 (nginx-test.adamlistek.me.crt
)을 생성하고 엽니다.
그런 다음 Cloudflare로 돌아가 아래에 표시된대로 원본 인증서 키(공개 키)를 복사하여 클릭하여 복사를 클릭합니다. 그런 다음 nano에서 열린 공개 키 파일에 복사한 공개 키를 붙여넣습니다(Ctrl+U). 변경 사항을 저장하려면(Ctrl+O) nano에서 종료하십시오(Ctrl+X).
공개 키 파일을 저장한 후에는 키 파일을 생성하고 Cloudflare에서 키를 복사하고 키 파일에 저장하는 동일한 프로세스를 반복하십시오. 하지만 이번에는 개인 키 파일(nginx-test.adamlistek.me.key
)을 생성합니다.

4. 이제 공개 및 개인 키를 생성했으므로, 인증서의 위치를 NGINX로 지정합니다. 아래 줄을 수정하여 도메인을 지원하도록 test.adamlistek.me.conf
구성 파일을 수정하십시오.
5. 새 인증서를 적용하기 위해 다음 명령으로 NGINX를 다시 시작하십시오.
6. 이제 Cloudflare의 SSL/TLS 탭으로 돌아가서 아래에서 볼 수 있는 대로 SSL/TLS 암호화 모드를 클릭하여 Full (strict)로 업데이트하십시오.

LetsEncrypt로 Full (strict) SSL/TLS 암호화 사용하기
Cloudflare 원본 인증서를 사용하는 가장 큰 단점은 Cloudflare만 신뢰하는 것입니다. 대체로 브라우저에서 신뢰할 수 있는 완전한 인증서가 필요한 경우 LetsEncrypt는 적절한 인증서를 생성할 수 있는 기능을 제공합니다.
유효한 인증서를 사용할 수 있지만, LetsEncrypt는 유효한 인증서를 생성하기 위한 일반적인 선택입니다. 여러 LetsEncrypt 클라이언트가 있지만, 이 튜토리얼에서는 acme.sh 클라이언트를 사용합니다.
이미 Cloudflare를 사용하고 있으므로 LetsEncrypt와 함께 DNS 옵션을 통해 DNS 프로비저닝하는 것이 가장 좋은 방법 중 하나입니다.
1. 먼저 터미널을 열고 curl
명령을 사용하여 acme.sh를 설치합니다.

2. 다음으로, 설치 디렉토리에 위치한 account.conf
파일을 생성하거나 수정하여 저장된 Cloudflare API 키를 추가합니다. 이러한 키는 Cloudflare 대시보드의 프로필 —> API 토큰 섹션에서 찾을 수 있습니다.
특정 권한이 제한된 토큰을 생성할 수 있지만, 이 튜토리얼의 목적을 위해 아래와 같이 전역 API 키를 적용하십시오.
3. 다음 명령을 사용하여 인증서를 생성합니다. 아래 명령은 acme.sh
클라이언트가 인증서의 소유권을 확인하기 위해 Cloudflare (dns_cf
)를 사용하도록 지시하고, 인증서를 발급하기 전에 대기 시간을 20초로 설정한 후 도메인 (test.adamlistek.me
)으로 인증서를 발급합니다.
명령이 완료되면 인증서, 인증서 키, 중간 CA 인증서 및 전체 체인 인증서의 경로가 표시됩니다.

4. 이전과 마찬가지로 NGINX 사이트 구성을 수정하여 ssl_certificate
및 ssl_certificate_key
의 위치를 변경합니다. /home/user
를 acme.sh 설치 위치로 교체하십시오.
5. 다음 명령을 사용하여 NGINX를 다시 시작하여 새 구성을 적용합니다.
6. 마지막으로, Cloudflare SSL/TLS 암호화 모드를 업데이트하려면 SSL/TLS 탭으로 이동한 다음 Full (strict)을 클릭하십시오.
