웹사이트 검색

Ubuntu 14.04용 Nginx에서 SSL 인증서를 생성하는 방법


소개

TLS(Transport Layer Security)와 이전 SSL(Secure Sockets Layer)은 일반 트래픽을 보호되고 암호화된 래퍼로 래핑하는 데 사용되는 웹 프로토콜입니다.

이 기술을 사용하여 서버는 메시지가 외부에서 가로채어 읽혀질 염려 없이 서버와 클라이언트 간에 안전하게 트래픽을 보낼 수 있습니다. 인증서 시스템은 또한 사용자가 연결 중인 사이트의 신원을 확인하는 데 도움을 줍니다.

이 가이드에서는 Ubuntu 14.04 서버에서 Nginx 웹 서버와 함께 사용하기 위해 자체 서명된 SSL 인증서를 설정하는 방법을 보여줍니다. 자체 서명된 인증서는 웹 브라우저의 신뢰할 수 있는 인증 기관 중 하나에서 서명하지 않았기 때문에 사용자의 서버 ID를 확인하지 않지만 웹 클라이언트와의 통신을 암호화할 수 있습니다. .

참고: 자체 서명된 인증서 대신 Let’s Encrypt 사용을 고려할 수 있습니다. Let's Encrypt는 대부분의 웹 브라우저에서 신뢰할 수 있는 무료 SSL/TLS 인증서를 발급하는 새로운 인증 기관입니다. 시작하려면 튜토리얼을 확인하세요: Ubuntu 14.04에서 Let's Encrypt로 Nginx를 보호하는 방법

전제 조건

이 가이드를 시작하려면 서버에서 몇 가지 기본적인 사항을 설정해야 합니다.

sudo 권한이 있는 루트가 아닌 사용자를 사용할 수 있어야 합니다. Ubuntu 14.04의 초기 서버 설정에서 1-4단계를 수행하여 이러한 사용자 계정을 설정하는 방법을 배울 수 있습니다.

그런 다음 Nginx 웹 서버도 설치해야 합니다. 서버에 전체 LEMP(Linux, Nginx, MySQL, PHP) 스택을 설치하려는 경우 Ubuntu 14.04에서 LEMP 설정에 대한 가이드를 따를 수 있습니다.

Nginx 웹 서버만 원하는 경우 다음을 입력하면 됩니다.

sudo apt-get update
sudo apt-get install nginx

1단계 - SSL 인증서 생성

모든 SSL 정보를 보관하는 데 사용할 디렉토리를 생성하여 시작할 수 있습니다. Nginx 구성 디렉토리 아래에 이를 생성해야 합니다.

sudo mkdir /etc/nginx/ssl

이제 파일을 배치할 위치가 있으므로 다음을 입력하여 SSL 키와 인증서 파일을 한 번에 만들 수 있습니다.

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

일련의 질문을 받게 됩니다. 살펴보기 전에 실행 중인 명령에서 어떤 일이 발생하는지 살펴보겠습니다.

  • openssl: OpenSSL 인증서, 키 및 기타 파일을 만들고 관리하기 위한 기본 명령줄 도구입니다.
  • req: 이 하위 명령은 X.509 인증서 서명 요청(CSR) 관리를 사용하도록 지정합니다. "X.509\는 SSL 및 TLS가 키 및 인증서 관리를 위해 준수하는 공개 키 인프라 표준입니다. 새 X.509 인증서를 생성하려고 하므로 이 하위 명령을 사용합니다.
  • -x509: 일반적으로 발생하는 인증서 서명 요청을 생성하는 대신 자체 서명된 인증서를 만들고 싶다고 유틸리티에 알려 이전 하위 명령을 추가로 수정합니다.
  • -nodes: 이것은 OpenSSL이 암호로 인증서를 보호하는 옵션을 건너뛰도록 지시합니다. 서버가 시작될 때 사용자 개입 없이 파일을 읽을 수 있으려면 Nginx가 필요합니다. 암호는 다시 시작할 때마다 암호를 입력해야 하므로 이러한 일이 발생하지 않도록 합니다.
  • -days 365: 이 옵션은 인증서가 유효한 것으로 간주되는 기간을 설정합니다. 여기서는 1년으로 설정했습니다.
  • -newkey rsa:2048: 새 인증서와 새 키를 동시에 생성하도록 지정합니다. 이전 단계에서 인증서 서명에 필요한 키를 생성하지 않았으므로 인증서와 함께 생성해야 합니다. rsa:2048 부분은 2048비트 길이의 RSA 키를 만들도록 지시합니다.
  • -keyout: 이 행은 OpenSSL에 생성 중인 개인 키 파일을 저장할 위치를 알려줍니다.
  • -out: OpenSSL에 우리가 만들고 있는 인증서를 둘 위치를 알려줍니다.

위에서 언급했듯이 이러한 옵션은 키 파일과 인증서를 모두 생성합니다. 인증서에 정보를 올바르게 삽입하기 위해 서버에 대한 몇 가지 질문을 받게 됩니다.

프롬프트를 적절하게 작성하십시오. 가장 중요한 줄은 일반 이름(예: 서버 FQDN 또는 귀하의 이름)을 요청하는 줄입니다. 서버와 연결할 도메인 이름을 입력해야 합니다. 도메인 이름이 없는 경우 공인 IP 주소를 대신 입력할 수 있습니다.

전체 프롬프트는 다음과 같습니다.

<예비>

생성한 두 파일 모두 /etc/nginx/ssl 디렉터리에 배치됩니다.

2단계 - SSL을 사용하도록 Nginx 구성

Nginx 구성 디렉토리 아래에 키 및 인증서 파일을 만들었습니다. 이제 서버 블록 파일을 조정하여 이러한 이점을 활용하도록 Nginx 구성을 수정하기만 하면 됩니다. 이 문서에서 Nginx 서버 블록에 대해 자세히 알아볼 수 있습니다.

Nginx 버전 0.7.14 이상(Ubuntu 14.04는 버전 1.4.6과 함께 제공됨)은 일반 HTTP 트래픽과 동일한 서버 블록 내에서 SSL을 활성화할 수 있습니다. 이를 통해 훨씬 더 간결한 방식으로 동일한 사이트에 대한 액세스를 구성할 수 있습니다.

서버 블록은 다음과 같을 수 있습니다.

<예비>

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name your_domain.com;

    location / {
            try_files $uri $uri/ =404;
    }

}

일반 HTTP 연결을 계속 허용하면서 이 동일한 서버 블록에서 SSL을 작동시키기 위해 해야 할 유일한 작업은 다음 줄을 추가하는 것입니다.

<예비>

    <span class="highlight">listen 443 ssl;</span>

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name <span class="highlight">your_domain.com</span>;
    <span class="highlight">ssl_certificate /etc/nginx/ssl/nginx.crt;</span>
    <span class="highlight">ssl_certificate_key /etc/nginx/ssl/nginx.key;</span>

    location / {
            try_files $uri $uri/ =404;
    }

}

완료되면 파일을 저장하고 닫습니다.

이제 새 설정을 사용하려면 Nginx를 다시 시작하기만 하면 됩니다.

sudo service nginx restart

이렇게 하면 사이트 구성이 다시 로드되어 이제 HTTP 및 HTTPS(SSL) 요청 모두에 응답할 수 있습니다.

3단계 - 설정 테스트

이제 사이트에 SSL 기능이 있어야 하지만 확인을 위해 테스트해야 합니다.

먼저 일반 HTTP를 사용하여 사이트에 계속 액세스할 수 있는지 테스트해 보겠습니다. 웹 브라우저에서 서버의 도메인 이름 또는 IP 주소로 이동합니다.

<예비>

정상적인 웹 사이트가 표시되어야 합니다. 내 예에서는 기본 Nginx 페이지를 제공하고 있습니다.

이 페이지가 표시되면 서버가 여전히 HTTP 요청을 올바르게 처리하고 있는 것입니다.

이제 서버가 SSL을 사용하여 통신할 수 있는지 확인할 수 있습니다. http 프로토콜 대신 https 프로토콜을 지정하여 이를 수행하십시오.

<예비>

웹 브라우저에 다음과 같은 경고가 표시될 수 있습니다.

이것은 예상됩니다. 브라우저가 신뢰하도록 구성된 인증 기관에서 서명하지 않았기 때문에 연결하려는 서버의 ID를 확인할 수 없다고 알려줍니다. 우리는 자체 서명된 인증서를 만들었으므로 이는 완벽하게 이해됩니다.

"계속 진행\, "계속\ 또는 사용 가능한 유사한 옵션을 클릭하십시오. 사이트가 다시 표시되어야 합니다.

귀하의 브라우저는 검색주소창에 "https\에 줄이 그어져 있거나 깨지거나 줄이 그어진 "자물쇠\ 아이콘을 표시할 수 있습니다. 잠금 아이콘을 클릭하면 연결에 대한 추가 정보를 볼 수 있습니다.

보시다시피 문제는 브라우저가 신뢰하도록 구성된 인증 기관에서 서명하지 않았기 때문에 브라우저가 서버의 ID를 확인할 수 없다는 것뿐입니다. 중간 섹션은 연결이 암호화되었음을 보여 주므로 해당 목표를 달성했습니다.

결론

HTTP 및 SSL 요청을 모두 처리하도록 Nginx 서버를 구성했습니다. 이렇게 하면 클라이언트와 안전하게 통신하고 외부인이 트래픽을 읽을 수 없도록 방지할 수 있습니다.

공개 웹사이트에 SSL을 사용할 계획이라면 각 방문자에게 무서운 경고가 표시되지 않도록 신뢰할 수 있는 인증 기관에서 SSL 인증서를 구입해야 합니다.

저스틴 엘링우드