Saya memiliki dua server, keduanya memiliki nginx. Server A sedang mendengarkan 443 dan dikonfigurasi untuk otentikasi dengan sertifikat SSL Klien.
Server B memiliki proses internal yang perlu berkomunikasi ke Server A hingga nginx.
Saya ingin mengonfigurasi Nginx di server B yang akan mendengarkan 8080 (tanpa enkripsi, karena ini semua komunikasi lokal) dan proxy_pass ke ServerA: 443.
Pertanyaannya adalah bagaimana cara saya menyuntikkan Sertifikat Klien? Saya tidak menemukan fungsi proxy_xxxx yang akan melakukan itu.
Saya tahu cara membuat yang setara dengan socat, tetapi persyaratan saya adalah menggunakan nginx.
nginx
proxy
ssl-certificate
Bastien974
sumber
sumber
### Section 2: Unconverted directives ###
# Flag Description
# [S] Unsupported directives.
# In conf file: dummy.conf
# Line 32: SSLProxyMachineCertificateFile /path/to/cert (mod_ssl.c)
# [S] SSLProxyMachineCertificateFile: No relevant directive in Nginx.
Jawaban:
Apakah cukup agar perincian sertifikat klien dilewati?
Anda dapat menambahkan
ke konfigurasi Anda dan kemudian info sertifikat tersedia untuk server B melalui header X-SSL-Cert.
sumber
\t
dengan\n
dari header ini setelah dibaca.$ssl_client_cert
variabelnya sudah usang; yang$ssl_client_escaped_cert
variabel harus digunakan sebagai gantinya.Tampaknya, inilah yang Anda cari: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_certificate Tersedia sejak versi 1.7.8.
sumber
Masalah ini tampaknya sebagian besar bergantung pada versi. Di Ubuntu 14.04 LTS, nginx default adalah yang sudah usang 1.4. Pertama, Anda perlu menginstal versi berbasis PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
menunjukkan cara melakukan ini dengan:
Anda harus berakhir dengan:
Konfigurasi dari @ xatr0z jawab https://serverfault.com/a/636455/162693 mengarah ke http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate tidak berfungsi:
proposal tidak bekerja
tidak bekerja di luar kotak dengan 1.8.0. Itu mungkin dimaksudkan sebagai petunjuk saja dan tidak untuk digunakan sebagai file konfigurasi atau tergantung pada versi lain.
Saya menguji dengan server backend berbasis apache2 A dengan SSL dan sertifikat klien yang ditandatangani sendiri diaktifkan. Konfigurasi Apache SSLOptions diatur ke:
Ini membuat proses debug lebih mudah karena skrip phpinfo () di sisi backend akan menampilkan informasi Server dan Sisi Klien.
Untuk memverifikasi ini saya gunakan:
https: // backend / test / phpinfo
dengan sertifikat SSL yang diinstal di browser dan saya mendapatkan bagian seperti: SSL_SERVER_S_DN_CN untuk sertifikat server dan SSL_CLIENT_S_DN_CN untuk sertifikat klien.
Sebagai permulaan pertama saya menggunakan (mengisi bagian dalam tanda kurung) untuk mengkonfigurasi nginx pada server frontend B:
membatalkan bagian khusus Sertifikat Klien SSL hanya untuk memeriksa apakah proxy terbalik itu sendiri berfungsi.
Sekarang http: // frontend: 8080 / test / phpinfo.php berfungsi The
SSL_SERVER_S_DN_CN untuk sertifikat server ditampilkan dan SSL_CLIENT_S_DN_CN untuk sertifikat klien belum (belum) ditampilkan
Sekarang setelah berhenti komentar:
dan memeriksa / memulai kembali
http: // frontend: 8080 / test / phpinfo.php berfungsi dan
SSL_SERVER_S_DN_CN untuk sertifikat server ditampilkan dan SSL_CLIENT_S_DN_CN untuk sertifikat klien ditampilkan
jadi sekarang kami dapat pekerjaan sesuai yang diminta.
Harap perhatikan bug https://trac.nginx.org/nginx/ticket/872#ticket
sumber
Ada artikel yang cukup rapi tentang sertifikat klien nginx dan SSL; menggunakan PHP dengan FastCGI sebagai contoh tapi saya pikir Anda dapat mengadaptasinya ke pengaturan proxy terbalik:
Sumber http://nategood.com/client-side-certificate-authentication-in-ngi
sumber
Tampaknya modul SEnginx ini adalah yang Anda cari: http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
sumber