내 목표는 내 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를 어떻게 구성합니까?
답변
구성에 추가 $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"