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 사용자는 apache2
를 httpd
로 대체합니다.
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