Cara menangani koneksi http terenkripsi dan tidak terenkripsi melalui satu port

10

Silakan lihat diagram berikut.

teks alternatif

Bagaimana cara kerjanya?

  • Ketika permintaan jarak jauh http: // myhost.com:8080/*, permintaan tersebut harus diteruskan ke server http yang mendengarkan port 8008 dari antarmuka loopback. Ini bagian yang mudah.

  • Ketika pengguna jarak jauh meminta http: // myhost.com:8080/specialurl ...

    • Program yang bertindak sebagai gateway level aplikasi harus dapat meningkatkan koneksi ke sesi terenkripsi ( tanpa mengubah port )

    • Setelah membuat sesi terenkripsi dengan browser jarak jauh, itu harus meneruskan permintaan ke program C yang mendengarkan pada port 8000 dari antarmuka loopback

Pertanyaan saya adalah :

  1. Apakah Anda pernah menggunakan solusi seperti ini di lingkungan produksi? Jika Anda memiliki...
  2. Produk apa yang Anda gunakan untuk bertindak sebagai gateway aplikasi?
  3. Bisakah Anda memberikan contoh konfigurasi?

Batasan keras :

  • Saya tidak memiliki kendali atas firewall , dan satu-satunya port yang melaluinya saya bisa mendapatkan traffic eksternal ke server internal adalah 8080. Nomor port tidak relevan, masalahnya adalah bahwa hanya ada satu port terbuka di level firewall yang meneruskan masuk lalu lintas ke server internal.
  • Server internal harus menjalankan Linux (saat ini menjalankan Debian Lenny)
  • Pengguna jarak jauh seharusnya tidak lebih dari browser web saat ini dan koneksi Internet untuk mengakses server ini. Ini berarti bahwa membalikkan port forwarding melalui SSH bukanlah suatu opsi di sini.
  • Saya membutuhkan produk yang telah diuji dalam produksi dan yang dapat dengan mudah digunakan. Saya tidak ingin mengembangkan gateway aplikasi saya sendiri (jika itu masalahnya, saya kira saya akan menanyakan pertanyaan ini di Stack Overflow alih-alih menanyakannya di Server Fault).

Pembatasan lembut :

  • Saya ingin menghindari menempatkan Apache sebagai gateway aplikasi (walaupun saya bersedia melakukannya jika itu satu-satunya pilihan)
  • Jika memungkinkan, gateway aplikasi harus merupakan produk perangkat lunak open source yang matang.

Produk mencoba sejauh gateway aplikasi (tanpa hasil)

  • nginx
  • lighttpd
  • pound

RFC yang relevan

  • RFC2817 (... menjelaskan cara menggunakan mekanisme Upgrade dalam HTTP / 1.1 untuk memulai Transport Layer Security (TLS) melalui koneksi TCP yang ada. Ini memungkinkan lalu lintas HTTP yang tidak aman dan aman untuk berbagi port terkenal yang sama ...)
  • RFC2818 (... menjelaskan cara menggunakan TLS untuk mengamankan koneksi HTTP melalui Internet. Praktek saat ini adalah untuk melapisi HTTP melalui SSL (pendahulu ke TLS), membedakan lalu lintas aman dari lalu lintas tidak aman dengan menggunakan port server yang berbeda ... )
alemartini
sumber
"Ketika pengguna jarak jauh meminta http: // myhost.com:8080/specialurl ... Program yang bertindak sebagai gateway level aplikasi harus dapat meningkatkan koneksi ke sesi terenkripsi (tanpa mengubah port)" ... bagaimana caranya? itu mungkin di sisi klien? Akankah browser klien mendukung menjalankan SSL melalui url yang tidak mengandung https?
Adam Brand
Hai Adam, dan terima kasih telah meninggalkan komentar Anda. Setelah meminta myhost.com:8080/specialurl , browser harus dialihkan ke myhost.com:8080/specialurl . Saya tidak yakin tentang peramban lain, tetapi versi terbaru Opera dan Firefox tampaknya mendukung ini tanpa masalah.
alemartini

Jawaban:

1

Satu port untuk mengatur semuanya, menunjukkan seseorang setidaknya mengimplementasikannya di dunia java.

Apakah Anda pernah menggunakan solusi semacam itu di lingkungan produksi?

Saya belum - saya juga tidak akan merekomendasikan hal itu dilakukan. Sebagai seorang konsultan, saya mencoba mendorong klien saya untuk menggunakan teknologi standar dan terbukti. Tampaknya tidak ada sistem yang mengimplementasikan RFC kecuali untuk kasus tepi - dan itu bukan sesuatu yang ingin saya sarankan atau dukung.

SirStan
sumber
Hai Stan, dan terima kasih atas umpan baliknya. Saya tidak mengetahui Grizzly, dan sayangnya saya tidak terbiasa dengan Java. Apakah Anda pernah menggunakan solusi semacam itu di lingkungan produksi? Alangkah baiknya jika Anda bisa membagikan contoh yang menunjukkan cara melakukannya. Sekali lagi terima kasih, Alex.
alemartini
Oke, terima kasih sudah mengedit jawaban Anda dan menambahkan lebih banyak informasi. Seperti yang Anda lihat, sekarang saya mempersempit pertanyaan saya, menyatakan lebih jelas bahwa saya sedang mencari produk yang matang. Mari kita lihat apakah seseorang memberikan jawaban yang bagus untuk ini. Sulit dipercaya bahwa Apache adalah satu-satunya aplikasi di dunia Linux yang mendukung RFC2817. Tetapi jika itu masalahnya, atau jika tidak ada orang lain yang memiliki pengalaman dunia nyata menyebarkan sesuatu seperti ini dengan produk lain, saya pikir saya tidak punya pilihan selain mencoba menyelesaikan ini dengan Apache.
alemartini
0

Apache tidak akan membantu Anda di sini. Itu hanya dapat mendengarkan koneksi HTTP atau HTTPS (tidak keduanya) pada port yang diberikan.

Sejauh yang saya tahu, tidak ada "produk matang" yang mengimplementasikan fungsi ini. Buat administrator jaringan Anda membuat lubang lain di firewall Anda, atau mengatur terowongan VPN atau SSH ke titik akhir eksternal di mana Anda dapat mengatur beberapa port mendengarkan.

duskwuff -inactive-
sumber