Curl over ssh-tls-tunnel
Есть ресурс resource.name, на который нужно ходить curl-ом с засылкой данных через JSON. Специфика ресурса такова, что он принимает соединения через TLS 1.3.
Есть сервер A server.name, на котором нет выхода на нужный ресурс, но есть Nginx, и есть ssh-доступ до сервера B
Есть сервер B, на котором есть выход на нужный ресурс, но сам сервер очень старый, и TLS на нём не проходит по требования resource.name.
printf '' | openssl s_client -connect 127.0.0.1:8443 -servername resource.name -tls1_3 -briefКостылим:
На сервере A поднимаем туннель на внутренний порт:
ssh -fN -o ExitOnForwardFailure=yes -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -L 8443:resource.name:443 user@serverBНа Nginx рисуем конфиг:
server {
listen 9090;
server_name server.name;
access_log /site/logs/nginx/port_9090.log main;
error_log /site/logs/nginx/port_9090.error.log;
location / {
proxy_pass https://127.0.0.1:8443;
proxy_set_header Host resource.name;
proxy_ssl_server_name on;
proxy_ssl_name resource.name;
proxy_ssl_protocols TLSv1.3;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_connect_timeout 10s;
proxy_read_timeout 60s;
proxy_ssl_verify off;
}
}Кидаемся тестовым запросом:
curl -v -X POST 'http://server.name:9090/resource' -H 'Content-Type: application/json' --data '{"login":"$LOGIN","password":"$PASSWORD"}'