웹사이트 검색

Apache 및 Nginx에서 OCSP 스테이플링을 구성하는 방법


소개

OCSP 스테이플링은 방문자 개인 정보를 유지하면서 SSL 협상 성능을 향상시키는 것을 목표로 하는 TLS/SSL 확장입니다. 구성을 진행하기 전에 인증서 해지 작동 방식에 대한 간략한 설명입니다. 이 기사에서는 StartSSL에서 발행한 무료 인증서를 사용하여 시연합니다.

이 튜토리얼에서는 아래에 설명된 Apache 및 Nginx의 기본 구성을 사용합니다.

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

OCSP 소개

OCSP(Online Certificate Status Protocol)는 SSL 인증서가 폐기되었는지 확인하기 위한 프로토콜입니다. SSL 협상 시간을 줄이기 위해 CRL의 대안으로 만들어졌습니다. CRL(인증서 해지 목록)을 사용하면 브라우저가 해지된 인증서 일련 번호 목록을 다운로드하고 현재 인증서를 확인하므로 SSL 협상 시간이 늘어납니다. OCSP에서 브라우저는 OCSP URL에 요청을 보내고 인증서의 유효성 상태가 포함된 응답을 받습니다. 다음 스크린샷은 linux-console.net의 OCSP URI를 보여줍니다.

OCSP 스테이플링 정보

OCSP에는 개인 정보 보호와 CA 서버의 과부하라는 두 가지 주요 문제가 있습니다.

OCSP는 인증서 유효성을 확인하기 위해 브라우저가 CA에 연락하도록 요구하므로 개인 정보를 손상시킵니다. CA는 액세스 중인 웹사이트와 액세스한 사람을 알고 있습니다.

HTTPS 웹사이트에 방문자가 많으면 CA의 OCSP 서버가 방문자의 모든 OCSP 요청을 처리해야 합니다.

OCSP 스테이플링이 구현되면 인증서 보유자(웹 서버 읽기)가 OCSP 서버 자체를 쿼리하고 응답을 캐시합니다. 이 응답은 인증서 상태 요청 확장 응답을 통해 TLS/SSL 핸드셰이크로 "스테이플링\됩니다. 결과적으로 CA의 서버는 요청으로 인한 부담이 없고 브라우저는 더 이상 사용자의 검색 습관을 공개할 필요가 없습니다. 제3자에게.

OCSP 스테이플링 지원 확인

OCSP 스테이플링은 다음에서 지원됩니다.

  • Apache HTTP 서버(>=2.3.3)
  • 엔진엑스(>=1.3.7)

계속하기 전에 다음 명령을 사용하여 설치 버전을 확인하십시오.

아파치:

apache2 -v

엔진엑스:

nginx -v

CentOS/Fedora 사용자는 apache2httpd로 대체합니다.

CA 번들 검색

루트 CA 및 중간 CA의 인증서를 PEM 형식으로 검색하여 단일 파일에 저장합니다. 이것은 StartSSL의 루트 및 중간 CA 인증서용입니다.

cd /etc/ssl
wget -O - https://www.startssl.com/certs/ca.pem https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a ca-certs.pem> /dev/null

CA가 DER 형식의 인증서를 제공하는 경우 인증서를 PEM으로 변환하십시오. 예를 들어 DigiCert는 DER 형식의 인증서를 제공합니다. 다운로드하고 PEM으로 변환하려면 다음 명령을 사용하십시오.

cd /etc/ssl
wget -O - https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem> /dev/null
wget -O - https://www.digicert.com/CACerts/DigiCertHighAssuranceEVCA-1.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem> /dev/null

두 명령 집합 모두 tee를 사용하여 파일에 쓰기 때문에 루트가 아닌 사용자로 로그인한 경우 sudo tee를 사용할 수 있습니다.

Apache에서 OCSP 스테이플링 구성

SSL 가상 호스트 파일을 편집하고 이 줄을 지시문 내부에 배치합니다.

sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLCACertificateFile /etc/ssl/ca-certs.pem
SSLUseStapling on

캐시 위치는 외부 에 지정되어야 합니다.

sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

이 문서를 따라 Apache에서 SSL 사이트를 설정한 경우 가상 호스트 파일은 다음과 같습니다.

/etc/apache2/sites-enabled/example.com-ssl.conf

<IfModule mod_ssl.c>
    SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
    <VirtualHost *:443>

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

            SSLEngine on

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

            SSLCACertificateFile /etc/ssl/ca-certs.pem
            SSLUseStapling on
    </VirtualHost>
</IfModule>

오류를 확인하려면 configtest를 수행하십시오.

apachectl -t

Syntax OK가 표시되면 다시 로드합니다.

service apache2 reload

IE(Vista 이상) 또는 Firefox 26+에서 웹 사이트에 액세스하고 오류 로그를 확인하십시오.

tail /var/log/apache2/error.log

SSLCACertificateFile 지시문에 정의된 파일이 누락된 경우 다음과 유사한 오류가 있는 인증서가 표시됩니다.

[Fri May 09 23:36:44.055900 2014] [ssl:error] [pid 1491:tid 139921007208320] AH02217: ssl_stapling_init_cert: Can't retrieve issuer certificate!
[Fri May 09 23:36:44.056018 2014] [ssl:error] [pid 1491:tid 139921007208320] AH02235: Unable to configure server certificate for stapling

그러한 오류가 표시되지 않으면 마지막 단계로 진행하십시오.

Nginx에서 OCSP 스테이플링 구성

SSL 가상 호스트 파일을 편집하고 server {} 섹션 안에 다음 지시문을 배치합니다.

sudo nano /etc/nginx/sites-enabled/example.com.ssl
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;

이 문서를 따라 Nginx에서 SSL 호스트를 설정했다면 전체 가상 호스트 파일은 다음과 같습니다.

<코드>/etc/nginx/sites-enabled/example.com.ssl

server {

        listen   443;
        server_name example.org;

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

        ssl on;
        ssl_certificate /etc/nginx/ssl/example.org/server.crt;
        ssl_certificate_key /etc/nginx/ssl/example.org/server.key;

        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;
}

configtest를 수행하여 모든 것이 올바른지 확인하십시오.

service nginx configtest

그런 다음 nginx 서비스를 다시 로드합니다.

service nginx reload

IE(Vista 이상) 또는 Firefox 26+에서 웹 사이트에 액세스하고 오류 로그를 확인하십시오.

tail /var/log/nginx/error.log

ssl_trusted_certificate에 정의된 파일에 인증서가 없으면 다음과 유사한 오류가 표시됩니다.

2014/05/09 17:38:16 [error] 1580#0: OCSP_basic_verify() failed (SSL: error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:Verify error:unable to get local issuer certificate) while requesting certificate status, responder: ocsp.startssl.com

그러한 오류가 표시되지 않으면 다음 단계를 진행하십시오.

OCSP 스테이플링 테스트

OCSP 스테이플링이 작동하는지 테스트하기 위한 두 가지 방법인 openssl 명령줄 도구와 Qualys의 SSL 테스트에 대해 설명합니다.

OpenSSL 명령

이 명령의 출력에는 웹 서버가 OCSP 데이터로 응답했는지 알려주는 섹션이 표시됩니다. 이 특정 섹션을 grep하여 표시합니다.

echo QUIT | openssl s_client -connect linux-console.net:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'

linux-console.net을 귀하의 도메인 이름으로 바꾸십시오. OCSP 스테이플링이 제대로 작동하면 다음 출력이 표시됩니다.

OCSP response:
======================================
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: 4C58CB25F0414F52F428C881439BA6A8A0E692E5
    Produced At: May  9 08:45:00 2014 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: B8A299F09D061DD5C1588F76CC89FF57092B94DD
      Issuer Key Hash: 4C58CB25F0414F52F428C881439BA6A8A0E692E5
      Serial Number: 0161FF00CCBFF6C07D2D3BB4D8340A23
    Cert Status: good
    This Update: May  9 08:45:00 2014 GMT
    Next Update: May 16 09:00:00 2014 GMT

OCSP 스테이플링이 작동하지 않으면 출력이 표시되지 않습니다.

Qualys 온라인 SSL 테스트

이것을 온라인으로 확인하려면 이 웹사이트로 이동하여 도메인 이름을 입력하십시오. 테스트가 완료되면 프로토콜 세부 정보 섹션에서 확인하십시오.

추가 읽기

  • OCSP 스테이플링에 대한 Mozilla의 기사 - http://en.wikipedia.org/wiki/OCSP_stapling
  • OCSP 스테이플링에 대한 Wikipedia 문서 - http://en.wikipedia.org/wiki/OCSP_stapling