Reverse Proxy có thể sử dụng SNI với SSL thông qua không?


18

Tôi cần phục vụ một số ứng dụng qua https bằng một địa chỉ IP bên ngoài.

Chứng chỉ ssl không nên được quản lý trên proxy ngược. Chúng được cài đặt trên các máy chủ ứng dụng.

Một proxy ngược có thể được cấu hình để sử dụng SNI và truyền ssl thông qua để chấm dứt tại điểm cuối không?

Đây có phải là có thể sử dụng một cái gì đó như Nginx hoặc Apache? Cấu hình trông như thế nào?

Câu trả lời:


14

Điều này có thể với Haproxy. Bạn có thể thiết lập proxy TCP và trích xuất SNI và thực hiện định tuyến dựa trên SNI. Đây là một ví dụ:

backend be.app1
    mode tcp
    no option checkcache
    no option httpclose
    tcp-request inspect-delay 5s
    tcp-request content accept if { req.ssl_hello_type 1 }
    tcp-request content reject
    use-server server1 if { req.ssl_sni -m beg app1. }
    server server1 server1:8443 check id 1 weight 0

Điều cần thiết là trì hoãn yêu cầu cho đến khi bạn nhận được SSL xin chào, nếu không, haproxy sẽ cố gắng tạo kết nối trước khi nhận tiêu đề SNI.

Tôi đang sử dụng các máy chủ có trọng số 0 bởi vì, trong cấu hình hiện tại của tôi, tôi chỉ có một máy chủ chạy cho mỗi SNI và tôi không muốn chúng nhận được yêu cầu ngẫu nhiên. Bạn có thể tìm thấy những cách tốt hơn để chơi với điều này.

Tôi hi vọng cái này giúp được.


Bạn có thể chỉ cho tôi bất kỳ tài liệu nào về điều này hoặc một đoạn cấu hình để tôi có thể chấp nhận câu trả lời không?
dùng319862

3
@ user319862 Tôi tìm thấy hướng dẫn tốt đẹp này dường như là những gì đang được thảo luận.
Michael Hampton

1
Có thật không? Tại sao ai đó sẽ đánh giá thấp câu trả lời này?
Florin Asăvoaie

Vấn đề với điều này là địa chỉ IP của máy khách không được chuyển tiếp, vì vậy máy chủ chỉ thấy lưu lượng truy cập đến từ proxy.
Kyle

@Kyle Tất nhiên rồi. Đây là proxy TCP. Điều duy nhất bạn có thể làm về điều này là nếu bạn định cấu hình và đặt haproxy làm bộ định tuyến cho máy chủ và sử dụng tproxy.
Florin Asăvoaie

5

Bạn có thể sử dụng sniproxy: https://github.com/dlundquist/sniproxy

Một cấu hình ví dụ:

listener 0.0.0.0:443 {
    protocol tls
    table TableHTTPS
    fallback 127.0.0.1:8443
}

listener 0.0.0.0:80 {
    protocol http
    table TableHTTP
    fallback 127.0.0.1:8080
}

table TableHTTPS {
    domain1.com backend1:443
    domain2.org backend2:443
}

table TableHTTP {
    domain1.com backend1:80
    domain2.org backend2:80
}

Cảm ơn đã đăng bài về dự án đó. Tôi không biết về nó
user319862 7/12/2015

@mick Hi mick khi chạy SNI như một proxy trong suốt, nó phá vỡ một số trang web có lỗi SSL. Làm thế nào để khắc phục nó?
gripenfolder

1

Điều này là chắc chắn có thể, ngay cả bây giờ trong năm 2019 với TLS 1.3 sắp tới! Nhiều máy chủ web hoặc proxy ngược chuyên dụng cung cấp chức năng này ngay lập tức:

  • Nginx 1.11.5 (Debian buster hoặc căng lưng)
  • HAProxy 1.5 (Debian jessie)
  • Sniproxy (Debian buster)
  • Vân vân.

Đây là một cấu hình ví dụ cho Nginx, một lựa chọn rất phổ biến cho các thiết lập yêu cầu proxy ngược:

stream {
  map $ssl_preread_server_name $selected_upstream {
    example.org upstream_1;
    example.net upstream_2;
    example.com upstream_3;
    default upstream_4;
  }
  upstream upstream_1 { server 10.0.0.1:443; }
  upstream upstream_2 { server 10.0.0.2:443; }
  upstream upstream_3 { server 10.0.0.3:443; }
  upstream upstream_4 { server 10.0.0.4:443; }
  server {
    listen 10.0.0.5:443;
    proxy_pass $selected_upstream;
    ssl_preread on;
  }
}

Các mô-đun Nginx có liên quan là stream_corestream_ssl_preread. Hướng dẫn sử dụng:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.