আমি নিশ্চিত যে তারা ক্লায়েন্টের ক্ষমতাগুলি পরীক্ষা করছে এবং সেই অনুসারে কাজ করবে, @ জেফের উত্তরে লিঙ্কযুক্ত থ্রেডে ব্যাখ্যা করা হয়েছে ।
এটি কীভাবে বিশদরূপে দেখতে পেল একটি ধারণা পেতে, এটি একবার দেখুন । এটি HAProxy
বিভিন্ন ক্লায়েন্টদের তাদের দক্ষতার উপর নির্ভর করে বিভিন্ন শংসাপত্র সরবরাহ করার জন্য তৈরি একটি বাস্তবায়ন দেখায় । লিঙ্ক পচা রোধ করতে আমি একটি সম্পূর্ণ অনুলিপি / পেস্ট করেছি এবং কারণ আমার ধারণা এই প্রশ্নটি ভবিষ্যতে আগ্রহী হতে পারে:
SHA-1 শংসাপত্রগুলি বের হয়ে যাচ্ছে এবং যত তাড়াতাড়ি সম্ভব আপনার একটি SHA-256 শংসাপত্রে আপগ্রেড করা উচিত ... যদি না আপনার খুব পুরানো ক্লায়েন্ট থাকে এবং কিছুক্ষণের জন্য SHA-1 সামঞ্জস্যতা বজায় রাখতে না পারে।
আপনি যদি এই পরিস্থিতিতে থাকেন তবে আপনাকে আপনার ক্লায়েন্টদের জোর করে আপগ্রেড করতে হবে (কঠিন) বা শংসাপত্র নির্বাচনের যুক্তির কোনও ফর্ম প্রয়োগ করতে হবে: আমরা তাকে "সার্ট স্যুইচিং" বলি।
সর্বাধিক নির্বিচারে নির্বাচন পদ্ধতি হ'ল এমন ক্লায়েন্টগুলিকে SHA-256 শংসাপত্রগুলি পরিবেশন করা যা একটি TLS1.2 ক্লায়েন্ট হেলো উপস্থাপন করে যা স্বাক্ষর_অ্যালগোরিদম এক্সটেনশনে SHA256-RSA (0x0401) এর জন্য তাদের সমর্থন স্পষ্টভাবে তাদের সমর্থন ঘোষণা করে।
আধুনিক ওয়েব ব্রাউজারগুলি এই এক্সটেনশনটি প্রেরণ করবে। যাইহোক, আমি এমন কোনও ওপেন সোর্স লোড ব্যালেন্সার সম্পর্কে অবগত নই যা বর্তমানে সাইন_এলগোরিদিম এক্সটেনশনের সামগ্রীটি পরিদর্শন করতে সক্ষম। এটি ভবিষ্যতে আসতে পারে, তবে আপাতত শংসাপত্রের স্যুইচিংয়ের সহজতম উপায় হ্যাপ্রোক্সি এসএনআই এসিএলগুলি ব্যবহার করা: কোনও ক্লায়েন্ট যদি এসএনআই এক্সটেনশন উপস্থাপন করেন, তবে এটি কোনও SHA-256 শংসাপত্র উপস্থাপিত ব্যাকএন্ডে পরিচালনা করুন। যদি এটি এক্সটেনশানটি উপস্থাপন না করে তবে ধরে নিন যে এটি কোনও পুরানো ক্লায়েন্ট যা এসএসএল 3 বা টিএলএসের কিছু ভাঙা সংস্করণ বলে।
ফ্রন্টএন্ড এবং ব্যাকএন্ড শৃঙ্খলাবদ্ধ করে এটি HAProxy এ অর্জন করা যেতে পারে:
global
ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128
-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-R
SA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
frontend https-in
bind 0.0.0.0:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend jve_https if { req.ssl_sni -i jve.linuxwall.info }
# fallback to backward compatible sha1
default_backend jve_https_sha1
backend jve_https
mode tcp
server jve_https 127.0.0.1:1665
frontend jve_https
bind 127.0.0.1:1665 ssl no-sslv3 no-tlsv10 crt /etc/haproxy/certs/jve_sha256.pem tfo
mode http
option forwardfor
use_backend jve
backend jve_https_sha1
mode tcp
server jve_https 127.0.0.1:1667
frontend jve_https_sha1
bind 127.0.0.1:1667 ssl crt /etc/haproxy/certs/jve_sha1.pem tfo ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
mode http
option forwardfor
use_backend jve
backend jve
rspadd Strict-Transport-Security:\ max-age=15768000
server jve 172.16.0.6:80 maxconn 128
উপরের কনফিগারেশনটি "https-in" নামে সীমান্তের অভ্যন্তরীণ ট্র্যাফিক গ্রহণ করে। এই সামনের অংশটি টিসিপি মোডে রয়েছে এবং ক্লায়েন্টের কাছ থেকে এসএনআই এক্সটেনশনের মানটির জন্য আগত ক্লায়েন্ট হেলো পরীক্ষা করে। যদি সেই মানটি উপস্থিত থাকে এবং আমাদের টার্গেট সাইটের সাথে মেলে তবে এটি "jve_https" নামের ব্যাকএন্ডে সংযোগটি প্রেরণ করে, যা "jve_https" নামক একটি সীমাতে পুনর্নির্দেশ করে যেখানে SHA256 শংসাপত্রটি ক্লায়েন্টের কাছে কনফিগার করা এবং পরিবেশিত হয়।
ক্লায়েন্ট যদি এসএনআই-এর সাথে ক্লায়েন্ট হেলো উপস্থাপন করতে ব্যর্থ হয় বা একটি এসএনআই উপস্থাপন করে যা আমাদের টার্গেট সাইটের সাথে মেলে না, তবে এটি "https_jve_sha1" ব্যাকএন্ডে পুনর্নির্দেশ করা হবে, তারপরে SHA1 শংসাপত্র পরিবেশন করা হয় তার অনুরূপ সীমান্তে red এই সীমানা পুরানো ক্লায়েন্টদের থাকার জন্য একটি পুরানো সাইফারসাইটকে সমর্থন করে।
উভয় সীমানা অবশেষে "jve" নামে একক ব্যাকএন্ডে পুনর্নির্দেশ করে যা ট্রাফিককে গন্তব্য ওয়েব সার্ভারে প্রেরণ করে।
এটি একটি খুব সাধারণ কনফিগারেশন, এবং শেষ পর্যন্ত এটি আরও ভাল এসিএল ব্যবহার করে উন্নত করা যেতে পারে (এইচএপ্রক্সি নিয়মিত সংবাদগুলি যুক্ত করে) তবে একটি প্রাথমিক সার্টের স্যুইচিং কনফিগারেশনের জন্য এটি কাজটি সম্পন্ন করে!