nginx가 사용 된 SSL / TLS 프로토콜 및 암호 그룹을 기록하도록하려면 어떻게해야합니까?


24

내 목표는 내 nginx에 연결하는 클라이언트를 위해 적절한 보안을 유지하는 것입니다. nginx 설치에서 TLS를 올바르게 구성하기 위해 Mozilla 가이드를 따르고 있지만 실제로 사용되는 실제 프로토콜 / 암호 슈트에 대한 개요는 없습니다.

내가 지금 가진 것 :

server {
    listen 443;
    ssl on;
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_dhparam /path/to/dhparam.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'the_long_ciphersuite_listed_there';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
}

이를 통해 연결에 사용 된 SSL 프로토콜과 클라이언트 / 서버가 협상 한 후 선택된 암호 그룹을 기록하고 싶습니다. 예 :

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] "GET / HTTP/1.1" 200 1234 "-" "User agent bla"

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"

이 방법으로 PFS 또는 기타 관련 보안 활성화 기술을 지원하지 않는 오래된 브라우저 나 자동화 된 시스템을 사용하는 클라이언트를 신속하게 식별 할 수 있습니다.

이 정보를 기록하도록 nginx를 어떻게 구성합니까?

답변:


43

구성에 추가 $ssl_cipher하십시오 log_format.

모든 SSL 관련 변수는 http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables 를 참조하십시오 .

컨텍스트 log_format에서 사용자 정의를 정의하십시오 http(예 :) /etc/nginx/nginx.conf.

log_format combined_ssl '$remote_addr - $remote_user [$time_local] '
                        '$ssl_protocol/$ssl_cipher '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';

위의 내용은 combined추가 '$ssl_protocol/$ssl_cipher '줄이 있는 기본 형식을 기반으로합니다 .

그런 다음 사용자 정의 로그 형식으로 지시문을 server컨텍스트 (SSL 사용 가능)에 추가하십시오 access_log.

server {
  listen 443;
  ssl on;
  access_log /var/log/nginx/access.log combined_ssl;
  [...]
}

nginx를 다시 시작하면 로그가 다음과 같이 나타납니다.

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] TLSv1.2/ECDHE-RSA-AES128-GCM-SHA256 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.