웹사이트 검색

Ubuntu 12.04에서 Apache를 사용하여 하나의 IP에 여러 SSL 인증서를 설정하는 방법


상태: 더 이상 사용되지 않음

이 문서에서는 더 이상 지원되지 않는 Ubuntu 버전에 대해 설명합니다. 현재 Ubuntu 12.04를 실행하는 서버를 운영 중인 경우 지원되는 Ubuntu 버전으로 업그레이드하거나 마이그레이션하는 것이 좋습니다.

  • Ubuntu 14.04로 업그레이드합니다.
  • Ubuntu 14.04에서 Ubuntu 16.04로 업그레이드
  • 서버 데이터를 지원되는 버전으로 마이그레이션

이유:

대신 참조:

SNI(서버 이름 표시)를 사용하여 하나의 IP 주소에서 여러 SSL 인증서를 호스팅할 수 있습니다.

SNI 소개

단일 가상 사설 서버에서 여러 사이트를 호스팅하는 것은 가상 호스트를 사용하는 문제가 아니지만 각 사이트에 별도의 SSL 인증서를 제공하려면 일반적으로 별도의 IP 주소가 필요했습니다. 이 프로세스는 사이트 방문자에게 요청된 서버 이름과 일치하는 인증서를 보내는 SNI(Server Name Indication)를 사용하여 최근에 간소화되었습니다.

메모:

SNI는 웹 서버에서 여러 SSL 사이트를 제공하는 데만 사용할 수 있으며 메일 서버 등과 같은 다른 데몬에서는 전혀 작동하지 않을 가능성이 있습니다. 또한 여전히 인증서 오류를 제공할 수 있는 이전 웹 브라우저의 일부도 있습니다. Wikipedia에는 이 TLS 확장을 지원하거나 지원하지 않는 업데이트된 소프트웨어 목록이 있습니다.

설정

SNI는 인증서를 제공하기 위해 도메인 이름을 등록해야 합니다.

이 자습서의 단계를 수행하려면 사용자에게 루트 권한이 있어야 합니다. 3단계와 4단계의 초기 서버 설정 자습서에서 설정 방법을 확인할 수 있습니다.

Apache는 VPS에 이미 설치되어 실행 중이어야 합니다.

sudo apt-get install apache2

1단계 - SSL 인증서 만들기

이 자습서의 목적을 위해 두 인증서 모두 자체 서명됩니다. 우리는 example.comexample.org를 모두 호스팅하는 서버를 만들기 위해 노력할 것입니다.

SSL 인증서는 인증서 자체와 공개 키의 두 부분으로 구성됩니다. 모든 관련 파일에 쉽게 액세스하려면 각 가상 호스트의 SSL 인증서에 대한 디렉토리를 만들어야 합니다.

mkdir -p /etc/apache2/ssl/example.com
mkdir -p /etc/apache2/ssl/example.org

2단계 - SSL 모듈 활성화

다음 단계는 드롭릿에서 SSL을 활성화하는 것입니다.

sudo a2enmod ssl

Apache를 다시 시작하여 후속 조치를 취하십시오.

sudo service apache2 restart

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

새 인증서를 요청할 때 365를 원하는 일수로 변경하여 인증서 유효 기간을 지정할 수 있습니다. 현재 이 인증서는 1년 후에 만료됩니다.

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

이 명령을 사용하면 자체 서명된 SSL 인증서와 이를 보호하는 서버 키를 생성하고 둘 다 새 디렉터리에 배치합니다.

이 명령은 입력해야 하는 필드 목록을 표시하도록 터미널에 프롬프트를 표시합니다.

가장 중요한 줄은 "Common Name"입니다. 여기에 공식 도메인 이름을 입력하거나 아직 없는 경우 사이트 IP 주소를 입력하세요.

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]:Awesome Inc
Organizational Unit Name (eg, section) []:Dept of Merriment
Common Name (e.g. server FQDN or YOUR name) []:example.com                  
Email Address []:webmaster@awesomeinc.com

그런 다음 계속해서 두 번째(example.org) 도메인에 대해 동일한 단계를 수행합니다.

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

4단계 - 가상 호스트 생성

인증서를 저장하고 준비했으면 가상 호스트 파일에 정보를 추가할 수 있습니다.

필수는 아니지만 두 개의 가상 호스트 파일을 만들어 가상 호스트 정보를 별도의 파일에 저장하고 기본 가상 호스트 파일에서 구성을 복사할 수 있습니다.

sudo nano /etc/apache2/sites-available/example.com
sudo nano /etc/apache2/sites-available/example.org

계속해서 각 파일을 열고 아래 구성에 붙여넣습니다.

또한 이 구성에는 여러 SSL 인증서를 용이하게 하는 중요한 변경 사항이 포함되어 있습니다. 기본 SSL 구성에는 인증서를 서버의 기본 인증서로 지정하는 다음 줄이 있지만,

<VirtualHost _default_:443>

아래 구성에는 기본 인증서에 대한 참조가 없습니다. 이것이 핵심입니다.

전반적으로 기본 구성 파일은 가상 호스트에 추가할 수 있는 다양한 유용한 지시문과 추가 구성 옵션을 제공합니다. 그러나 다음 정보는 하나의 IP 주소에 여러 SSL 인증서를 설정하는 데 필요한 모든 것을 서버에 제공합니다.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

</VirtualHost>


<IfModule mod_ssl.c>
<VirtualHost *:443>

        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile /etc/apache2/ssl/example.com/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/example.com/apache.key
</VirtualHost>

</IfModule>

이러한 구성 파일에는 사용자 지정해야 하는 몇 줄이 있습니다.

  • ServerAdmin: 이것은 단순히 웹마스터의 이메일 주소입니다
  • ServerName: 귀하의 도메인 이름입니다. 앞에 www를 추가하지 않고 작성해야 합니다.\n
  • DocumentRoot: 사이트 정보를 보관하는 디렉토리입니다. 현재는 apache 기본 디렉토리를 가리킵니다. 2개의 서로 다른 가상 호스트에 대해 서로 다른 서버 루트를 가질 수 있습니다.
  • SSLCertificateFile: 이 지시문은 인증서 파일의 위치를 가리킵니다. 각 사이트의 인증서는 자습서의 앞부분에서 만든 디렉터리에 저장됩니다.
  • SSLCertificateKeyFile : 이 명령은 인증서 키의 위치를 가리킵니다. 각 사이트의 인증서 키는 자습서의 앞부분에서 생성한 디렉터리에 저장됩니다.

두 도메인의 구성을 설정합니다. 별도의 SSL 인증서가 두 서버에서 작동하려면 아직 더 많은 단계가 있습니다.

5단계 - ports.conf 파일 편집

하나의 VPS에서 여러 인증서가 작동하는지 확인하는 데 필요한 마지막 단계는 포트 443에서 수신 대기하도록 서버에 알리는 것입니다. 굵은 선을 Apache 포트 구성 파일에 추가합니다.

sudo nano /etc/apache2/ports.conf 
NameVirtualHost *:80
NameVirtualHost *:443

Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to 
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

6단계 - 가상 호스트 활성화

sudo a2ensite example.com
sudo a2ensite example.org

( sudo a2dissite example.com 명령으로 가상 호스트를 비활성화할 수 있습니다.)

모든 가상 호스트가 활성화된 상태에서 Apache를 다시 시작합니다.

sudo service apache2 restart

이제 각각 자체 도메인 이름과 SSL 인증서가 있는 두 사이트에 모두 액세스할 수 있어야 합니다.

도메인(예: example.com 또는 example.org) 또는 https 접두사가 있는 도메인(https://example.com 또는 https:// example.org).