একাধিক এসএসএল-শংসাপত্রগুলির জন্য কীভাবে HAProxy কনফিগার করবেন


8

আমাকে দুটি পৃথক এসএসএল-শংসাপত্র সহ HAProxy কনফিগার করতে হবে

  1. www.example.com
  2. api.example.com

এখন আমি সার্ভারফল্টের একটি পোস্ট থেকে শিখেছি ( 2 টি শংসাপত্র কীভাবে ব্যবহার করতে হয় তা হ্যাপ্রোক্সিতে একাধিক এসএসএল শংসাপত্রগুলি কনফিগার করে ) তবে সার্ভার উভয় ডোমেনের জন্য উল্লিখিত প্রথম শংসাপত্রটি ব্যবহার করা চালিয়ে যায়।

কনফিগ:

frontend apache-https
    bind 192.168.56.150:443 ssl crt /certs/crt1.pem crt /certs/cert2.pem
    reqadd X-Forwarded-Proto:\ https
    default_backend apache-http

backend apache-http
    redirect scheme https if { hdr(Host) -i www.example.com } !{ ssl_fc }
    redirect scheme https if { hdr(Host) -i api.example.com } !{ ssl_fc }
    ...

ইউআরএলের উপর নির্ভর করে কোন শংসাপত্রটি ব্যবহার করবেন তা HAProxy কে কীভাবে বলা যায়?

সম্পূর্ণ কনফিগারেশন:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3
    tune.ssl.default-dh-param 2048 // better with 2048 but more processor intensive

defaults
        log     global
        mode    http
        option tcplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000

frontend apache-http
        bind 0.0.0.0:80
        mode http
        option http-server-close                # needed for forwardfor
        option forwardfor                       # forward IP Address of client
        reqadd X-Forwarded-Proto:\ http
        default_backend apache-http
        stats enable

frontend apache-https
        bind 0.0.0.0:443 ssl crt cer1.pem cert2.pem
        reqadd X-Forwarded-Proto:\ https
        default_backend apache-http

backend apache-http
        redirect scheme https if { hdr(Host) -i db.example.com } !{ ssl_fc }
        redirect scheme https if { hdr(Host) -i api2.example.com } !{ ssl_fc }
        balance roundrobin
        cookie SERVERID insert indirect nocache
        server www-1 10.0.0.101:80 cookie S1 check
        server www-2 10.0.0.102:80 cookie S2 check
        server www-3 10.0.0.103:80 cookie S3 check

আপনি কি আপনার সম্পূর্ণ কনফিগারেশন পোস্ট করতে পারেন?
গ্রেগএল

নিশ্চিত করুন। আমি ক্যাসিটনটি আপডেট করেছি।
মার্লিন

উপরের স্নিপড কনফিগারেশনে আপনি crtআপনার bindলাইনে দুটি নির্দেশিকা তালিকাভুক্ত করেছেন তবে পুরো কনফিগারেশনে আপনি কেবল একটি পেয়েছেন ... এটি কি উদ্দেশ্য? সেই সার্টটিতে SAN এন্ট্রি রয়েছে বা এটি একটি ওয়াইল্ডকার্ড?
গ্রেগএল

আমার ভুলের জন্য, আমি লাইনটি সরিয়ে দেওয়ার পরে আমি কনফিগারটি গ্রহণ করেছি। আমার লক্ষ্য হ'ল পৃথক ডোমেনগুলির জন্য স্বতন্ত্র এসএসএল শংসাপত্রগুলি মঞ্জুর করা এবং আমি HAProxy এ বেশ নতুন। উপরে উল্লিখিত কনফিগারেশনে দ্বিতীয় সার্ট যুক্ত করা হয়েছে।
মার্লিন

আপনি কোথায় ক্লায়েন্ট ব্যবহার করছেন যেখানে এটির ভুল প্রমাণপত্র সরবরাহ করা হচ্ছে?
গ্রেগএল

উত্তর:


9

আপনি HAProxy 1.6 বা ততোধিক চলমান আছে তা নিশ্চিত করুন

এই প্রশ্নটি একটু পুরানো, তবে আমি ওপি-র মতো কনফিগারেশন নিয়ে এই একই সমস্যাটি নিয়ে চলেছি ran

HAProxy 1.5 crtএকটি bindবিকল্পে একাধিক সিনট্যাক্স গ্রহণ করে ; তবে সাড়া দেওয়ার সময় এটি কেবল প্রথম শংসাপত্র ব্যবহার করে।

HAProxy 1.6 কলারের অনুরোধের ভিত্তিতে শংসাপত্রের সাথে প্রতিক্রিয়া দেখায়। এটির sniজন্য কনফিগারেশনে কোনও বিশেষ এসিএল লাগবে না ।

এখানে একটি উদাহরণ রয়েছে যা 1.6 এ কাজ করে তবে 1.5-তে cert2.pemঅনুরোধের প্রতিক্রিয়া জানাতে ব্যবহার করতে ব্যর্থ হয় place2.com:

frontend http-in
        bind *:80
        bind *:443 ssl crt cert1.pem crt cert2.pem
        mode http

        acl common_dst hdr(Host) -m str place1.com place2.com

        use_backend be_common if common_dst

backend be_common
        # nothing special here.

2

কোন শংসাপত্র হ্যাপ্রোক্সি উপস্থাপন করছে তা আপনি কীভাবে পরীক্ষা করছেন? আপনি যদি ব্যবহার করছেন openssl s_clientতবে পরামর্শ দিন যে -servername api.domain.comএসএনআই তথ্য প্রেরণের জন্য একটি অতিরিক্ত প্যারামিটার ( ) দরকার যা কোন শংসাপত্র উপস্থাপন করতে হবে তা হ্যাপ্রোক্সির সিদ্ধান্ত নিতে হবে।


আমি আপনার উত্তরটি বুঝতে পেরেছি কিনা তা নিশ্চিত নই। উপরে উল্লিখিত উদাহরণটিতে লাইনটি ব্যবহার করা হয়েছে: use_backend bk_cert1 যদি {ssl_fc_sni my.example.com} তবে আমি উভয়ের জন্য একটি ব্যাকএন্ড আনসেজ করছি এবং কী করতে হবে URL এর উপর ভিত্তি করে আলাদা করার জন্য অ্যাপাচি কনফিগার করব। এক ব্যাকএন্ডের সাথে একাধিক এসএসএল শংসাপত্রগুলি কী সম্ভব?
মার্লিন

1
হ্যাঁ, আপনি আমার উত্তর বুঝতে পারেন না। আমি আপনার পরীক্ষার পদ্ধতি নিয়ে সন্দেহ করি, আপনার বর্তমান কনফিগারেশনটি নয়।
womble

আমি যতক্ষণ বুঝতে পেরেছি আমার উপস্থাপিত কনফিগারেশনে তেমন পরীক্ষা করা হচ্ছে না। কেবলমাত্র এটি যা পরীক্ষা করে তা হ'ল যদি নির্দিষ্ট ডোমেনটি https এর মধ্যে দিয়ে গেছে বা না এবং যদি তা https তে পুনঃনির্দেশ করে। তবে এটি প্রশ্ন নয়। আমি ভাবছি কীভাবে একটি কোরস্পন্ডিং URL এ নির্দিষ্ট শংসাপত্রগুলি উত্সর্গ করা যায়।
মার্লিন

3
"তবে সার্ভার উভয় ডোমেনের জন্য উল্লিখিত প্রথম শংসাপত্র ব্যবহার করে চলেছে" - আপনার নিজের পরীক্ষায় না থাকলে আপনার প্রশ্নের এই দাবির ভিত্তি কী?
ওম্বল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.