Re: Проблема при проксировании на nginx с ssl reject handshake on
Maxim Dounin
mdounin на mdounin.ru
Ср Дек 23 16:55:09 UTC 2020
Hello!
On Tue, Dec 22, 2020 at 03:48:37AM -0500, Alexey Koscheev wrote:
> Сервер1 (принимает запросы и проксирует на сервер 2):
>
> server {
> listen a.b.c.d:443 ssl;
> server_name
> abcd.example
> ;
> access_log off;
> ssl_certificate path_to.crt;
> ssl_certificate_key path_to.key;
> location / {
> proxy_pass https://b.c.d.e:443;
> proxy_ssl_server_name on;
> proxy_set_header Host $host;
> }
> }
>
> Сервер2
> server {
> listen b.c.d.e:443 ssl default_server;
> server_name _;
>
> access_log off;
> ssl_certificate /usr/local/nginx/conf/cert.pem;
> ssl_certificate_key /usr/local/nginx/conf/key.pem;
> ssl_reject_handshake on;
>
> location / {
> return 444;
> }
> }
>
> server {
> listen b.c.d.e:443 ssl http2;
> server_name abcd.example
> ;
> access_log access.log combined;
> root /home2/xyz/abcd.example/WWW;
> ssl_certificate path_to.crt;
> ssl_certificate_key path_to.key;
> ssl_stapling on;
> ssl_stapling_verify on;
> ssl_trusted_certificate path_to.trusted;
> location / {
> proxy_pass http://127.0.0.1:80;
> }
>
> }
>
>
> Если на Сервер2 ssl_reject_handshake on;, то запросы к Сервер 1 завершаются
> 502 ошибкой. В error лог такое:
> 2020/12/22 11:05:13 [crit] 57654#0: *13192673 SSL_do_handshake() failed
> (SSL: error:14094458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized
> name:SSL alert number 112) while SSL handshaking to upstream, client:
> 192.168.10.250, server: abcd.example, request: "GET / HTTP/2.0", upstream:
> "https://b.c.d.e:443/", host: "xn--b1aghahdtcfeb2aifj5e.xn--p1ai"
>
> Наличие строк
> proxy_ssl_server_name on;
> proxy_set_header Host $host;
> в конфиге server на Сервер1 никак не влияет на проблему.
>
> В чем может быть дело?
Для передачи имени "abcd.example" в рамках SSL handshake
недостаточно включить proxy_ssl_server_name, т.к. в директиве
proxy_pass у вас указано "https://b.c.d.e:443". Нужно либо
указать правильное имя в директиве proxy_pass, либо задать явно
имя для SSL handshake с помощью директивы proxy_ssl_name
(http://nginx.org/r/proxy_ssl_name).
Что до директивы proxy_set_header, то она задаёт заголовок
HTTP-запроса, и никак не влияет на имена, используемые в
SSL handshake.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru