웹사이트 검색

Debian 8용 Apache에서 SSL 인증서를 만드는 방법


소개

이 튜토리얼은 SSL 인증서로 보호되는 Apache 서버의 설정 및 구성을 안내합니다. 자습서가 끝나면 HTTPS를 통해 서버에 액세스할 수 있습니다.

SSL은 큰 정수를 역시 큰 소인수로 해석하는 수학적 난해성을 기반으로 합니다. 이를 사용하여 개인-공용 키 쌍을 사용하여 정보를 암호화할 수 있습니다. 인증 기관은 이러한 보안 연결의 진위를 확인하는 SSL 인증서를 발급할 수 있으며, 마찬가지로 타사 지원 없이 자체 서명된 인증서를 생성할 수 있습니다.

이 자습서에서는 자체 서명된 인증서를 생성하고 필요한 구성을 만들고 결과를 테스트합니다. 자체 서명된 인증서는 테스트에 적합하지만 사용자에게 브라우저 오류가 발생하므로 프로덕션에는 권장되지 않습니다.

대신 유료 인증서를 얻으려면 이 자습서를 참조하십시오.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 신선한 Debian 8 Droplet 1개
  • 이 튜토리얼의 2단계와 3단계에 따라 설정할 수 있는 루트가 아닌 sudo 사용자
  • OpenSSL 설치 및 업데이트(기본적으로 설치되어야 함)

  1. sudo apt-get update
  2. sudo apt-get upgrade openssl

테스트 목적으로 OpenSSL이 설치된 두 번째 컴퓨터가 필요할 수 있습니다.

  • 또 다른 Linux Droplet
  • 또는 Unix 기반 로컬 시스템(Mac, Ubuntu, Debian 등)

1단계 - 아파치 설치

이 단계에서는 apt-get이라는 내장 패키지 설치 프로그램을 사용합니다. 패키지 관리를 대폭 간소화하고 새로 설치할 수 있습니다.

전제 조건에 지정된 링크에서 apt-get을 업데이트하고 sudo 패키지를 설치해야 합니다. 다른 Linux 배포판과 달리 Debian 8은 와 함께 제공되지 않습니다. sudo가 설치되었습니다.

Apache는 HTTPS 서버가 될 것입니다. 설치하려면 다음을 실행하십시오.

  1. sudo apt-get install apache2

2단계 - SSL 모듈 활성화

이 섹션에서는 서버에서 SSL을 활성화합니다.

먼저 Apache SSL 모듈을 활성화합니다.

  1. sudo a2enmod ssl

기본 Apache 웹 사이트에는 SSL 활성화를 위한 유용한 템플릿이 제공되므로 지금 기본 웹 사이트를 활성화하겠습니다.

  1. sudo a2ensite default-ssl

이러한 변경 사항을 적용하려면 Apache를 다시 시작하십시오.

  1. sudo service apache2 reload

3단계 - 자체 서명된 SSL 인증서 생성

먼저 개인 키와 인증서를 저장할 수 있는 새 디렉터리를 만듭니다.

  1. sudo mkdir /etc/apache2/ssl

다음으로 새 인증서를 요청하고 서명합니다.

먼저 새 인증서와 개인 키를 생성하여 보호합니다.

  • days 플래그는 인증서가 유효한 기간을 지정합니다. 이 예에서 인증서는 1년 동안 지속됩니다.
  • keyout 플래그는 생성된 키의 경로를 지정합니다
  • out 플래그는 생성된 인증서의 경로를 지정합니다.

  1. sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

이 명령을 호출하면 일련의 프롬프트가 표시됩니다.

  • 일반 이름: 서버의 IP 주소 또는 호스트 이름을 지정합니다. 인증서가 웹사이트의 도메인(또는 IP 주소)과 일치해야 하므로 이 필드가 중요합니다.
  • 재량에 따라 다른 모든 필드를 작성합니다.

예시 답변은 아래 빨간색으로 표시됩니다.

Interactive
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ——- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:NYC Organization Name (eg, company) [Internet Widgits Pty Ltd]:DigitalOcean Organizational Unit Name (eg, section) []:SSL Certificate Test Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []:test@example.com

개인 키와 인증서를 보호하기 위해 파일 권한을 설정합니다.

  1. sudo chmod 600 /etc/apache2/ssl/*

3자리 권한 코드에 대한 자세한 내용은 Linux 권한에 대한 자습서를 참조하세요.

인증서와 인증서를 보호하는 개인 키는 이제 Apache에서 사용할 준비가 되었습니다.

4단계 - SSL을 사용하도록 Apache 구성

이 섹션에서는 SSL 키와 인증서를 사용하도록 기본 Apache 가상 호스트를 구성합니다. 이렇게 변경하면 서버가 기본 사이트에 대한 HTTP 요청 대신 HTTPS를 제공하기 시작합니다.

nano 또는 선호하는 텍스트 편집기를 사용하여 서버 구성 파일을 엽니다.

  1. sudo nano /etc/apache2/sites-enabled/default-ssl.conf

로 시작하는 섹션을 찾아 다음과 같이 변경합니다.

  • ServerAdmin 이메일 행 아래에 서버 이름이 있는 행을 추가하십시오. 도메인 이름 또는 IP 주소일 수 있습니다.

ServerAdmin webmaster@localhost
ServerName example.com:443

  • 다음 두 줄을 찾아 이전에 생성한 인증서 및 키의 위치와 일치하도록 경로를 업데이트합니다. 인증서를 구입했거나 다른 곳에서 인증서를 생성한 경우 여기의 경로가 인증서 및 키의 실제 위치와 일치하는지 확인하십시오.

 SSLCertificateFile /etc/apache2/ssl/apache.crt
 SSLCertificateKeyFile /etc/apache2/ssl/apache.key

이러한 변경이 완료되면 가상 호스트 구성 파일이 다음과 일치하는지 확인하십시오.

<IfModule mod_ssl.c>
	<VirtualHost _default_:443>
		ServerAdmin webmaster@localhost
		ServerName example.com:443
		DocumentRoot /var/www/html
		
		. . .
		SSLEngine on
		
		. . .
		
		SSLCertificateFile /etc/apache2/ssl/apache.crt
		SSLCertificateKeyFile /etc/apache2/ssl/apache.key

파일을 저장하고 종료합니다.

변경 사항을 적용하려면 Apache를 다시 시작하십시오.

  1. sudo service apache2 reload

일반적인 Apache 가상 호스트 구성에 대해 자세히 알아보려면 이 문서를 참조하십시오.

5단계 - SSL로 Apache 테스트

이 섹션에서는 명령줄에서 SSL 연결을 테스트합니다.

(1) 로컬 Unix 기반 시스템, (2) 다른 Droplet 또는 (3) 동일한 Droplet에서 이 테스트를 실행할 수 있습니다. 외부 시스템에서 실행하는 경우 공용 인터넷을 통해 사이트에 연결할 수 있는지 확인합니다.

HTTPS 443 포트를 통해 연결을 엽니다.

  1. openssl s_client -connect your_server_ip:443

출력 중간(키 뒤)으로 스크롤하면 다음을 찾을 수 있습니다.

Output
—- SSL handshake has read 3999 bytes and written 444 bytes —- . . . SSL-Session: . . .

물론 숫자는 가변적이지만 이것은 성공입니다. 축하해요!

종료하려면 CTRL+C를 누르십시오.

URL(https://example.com)에서 HTTPS를 사용하여 웹 브라우저에서 사이트를 방문할 수도 있습니다. 브라우저는 인증서가 자체 서명되었음을 경고합니다. 인증서를 보고 세부 정보가 3단계에서 입력한 내용과 일치하는지 확인할 수 있어야 합니다.

결론

SSL 인증서로 안전하게 구성된 작동하는 Apache 서버를 남기고 튜토리얼을 마칩니다. OpenSSL 작업에 대한 자세한 내용은 OpenSSL Essentials 문서를 참조하십시오.