কীভাবে এইচটিটিপিএস শংসাপত্র স্যুইচিং কাজ করে (Suche.org এর মতো)?


20

যাঁরা জানেন না Suche.org কী তা, এটি এমন একটি ওয়েবসাইট যা প্রতিটি বিভাগে এসএসএল ল্যাবগুলিতে একটি নিখুঁত A + রেটিং রয়েছে: ( Suche.org এসএসএল ল্যাব ফলাফল )। আমি যখন ইসিসি শংসাপত্রগুলি ক্রোমে কাজ করছে না সে সম্পর্কে আর একটি টিকিট খুললাম তখন আমি এই ওয়েবসাইটটি সম্পর্কে সচেতন হয়েছি এবং প্রতিক্রিয়াশীলদের মধ্যে একটি উদাহরণ হিসাবে সাইটটিকে ব্যবহার করেছে।

আমাকে কী বিভ্রান্ত করে তা হ'ল যদিও Protocol Supportপ্রতিবেদনের বিভাগটি বলছে যে ওয়েবসাইটটি কেবলমাত্র টিএলএসভি 1.2 ব্যবহার করে ...

TLS 1.2 Yes
TLS 1.1 No
TLS 1.0 No
SSL 3   No
SSL 2   No

Handshake Simulationবিভাগের অধীনে এটি স্পষ্টভাবে কেস নয় , এটি প্রদর্শিত হয় যে সিমুলেটেড কিছু পুরানো ক্লায়েন্টগুলি সংযোগের জন্য TLSv1.0 ব্যবহার করছে ...

Android 4.0.4   EC 384 (SHA256)     TLS 1.0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA   ECDH secp521r1  FS
Android 4.1.1   EC 384 (SHA256)     TLS 1.0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA   ECDH secp521r1  FS
Android 4.2.2   EC 384 (SHA256)     TLS 1.0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA   ECDH secp521r1  FS
Android 4.3     EC 384 (SHA256)     TLS 1.0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA   ECDH secp521r1  FS
Android 4.4.2   EC 384 (SHA256)     TLS 1.2 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384   ECDH secp521r1  FS

এটি কিছুটা হতাশার কারণ যদি আমি আমার পরীক্ষার ওয়েবসাইটে TLSv1.0 অক্ষম করে থাকি ...

# Apache example
SSLProtocol all -SSLv3 -SSLv2 -TLSv1

আমার পরীক্ষার ওয়েবসাইটে এসএসএল ল্যাবগুলি স্ক্যান চালানোর ফলে কিছু পুরানো ক্লায়েন্টের জন্য নিম্নলিখিতটি পাওয়া যায়:

Android 4.0.4   Server closed connection
Android 4.1.1   Server closed connection
Android 4.2.2   Server closed connection
Android 4.3     Server closed connection
Android 4.4.2   EC 384 (SHA256)     TLS 1.2 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256   ECDH secp256r1  FS

কীভাবে একসাথে কেবলমাত্র টিএলএসভি ১.২ সংযোগের অনুমতি দেওয়া সম্ভব, তবুও পুরানো ক্লায়েন্টদের সমর্থন করা কীভাবে সম্ভব?


আমাদের কি শিরোনামটি আরও জেনেরিক করা উচিত, "এইচটিটিপিএস সার্ট স্যুইচিং লজিকের মতো"?
gf_

1
@gf_ ভাল ধারণা। সম্পন্ন.
স্কট ক্রুকস

উত্তর:


17

আমি নিশ্চিত যে তারা ক্লায়েন্টের ক্ষমতাগুলি পরীক্ষা করছে এবং সেই অনুসারে কাজ করবে, @ জেফের উত্তরে লিঙ্কযুক্ত থ্রেডে ব্যাখ্যা করা হয়েছে ।

এটি কীভাবে বিশদরূপে দেখতে পেল একটি ধারণা পেতে, এটি একবার দেখুন । এটি HAProxyবিভিন্ন ক্লায়েন্টদের তাদের দক্ষতার উপর নির্ভর করে বিভিন্ন শংসাপত্র সরবরাহ করার জন্য তৈরি একটি বাস্তবায়ন দেখায় । লিঙ্ক পচা রোধ করতে আমি একটি সম্পূর্ণ অনুলিপি / পেস্ট করেছি এবং কারণ আমার ধারণা এই প্রশ্নটি ভবিষ্যতে আগ্রহী হতে পারে:

SHA-1 শংসাপত্রগুলি বের হয়ে যাচ্ছে এবং যত তাড়াতাড়ি সম্ভব আপনার একটি SHA-256 শংসাপত্রে আপগ্রেড করা উচিত ... যদি না আপনার খুব পুরানো ক্লায়েন্ট থাকে এবং কিছুক্ষণের জন্য SHA-1 সামঞ্জস্যতা বজায় রাখতে না পারে।

আপনি যদি এই পরিস্থিতিতে থাকেন তবে আপনাকে আপনার ক্লায়েন্টদের জোর করে আপগ্রেড করতে হবে (কঠিন) বা শংসাপত্র নির্বাচনের যুক্তির কোনও ফর্ম প্রয়োগ করতে হবে: আমরা তাকে "সার্ট স্যুইচিং" বলি।

সর্বাধিক নির্বিচারে নির্বাচন পদ্ধতি হ'ল এমন ক্লায়েন্টগুলিকে SHA-256 শংসাপত্রগুলি পরিবেশন করা যা একটি TLS1.2 ক্লায়েন্ট হেলো উপস্থাপন করে যা স্বাক্ষর_অ্যালগোরিদম এক্সটেনশনে SHA256-RSA (0x0401) এর জন্য তাদের সমর্থন স্পষ্টভাবে তাদের সমর্থন ঘোষণা করে।

স্বাক্ষর অ্যালগরিদম এক্সটেনশান

আধুনিক ওয়েব ব্রাউজারগুলি এই এক্সটেনশনটি প্রেরণ করবে। যাইহোক, আমি এমন কোনও ওপেন সোর্স লোড ব্যালেন্সার সম্পর্কে অবগত নই যা বর্তমানে সাইন_এলগোরিদিম এক্সটেনশনের সামগ্রীটি পরিদর্শন করতে সক্ষম। এটি ভবিষ্যতে আসতে পারে, তবে আপাতত শংসাপত্রের স্যুইচিংয়ের সহজতম উপায় হ্যাপ্রোক্সি এসএনআই এসিএলগুলি ব্যবহার করা: কোনও ক্লায়েন্ট যদি এসএনআই এক্সটেনশন উপস্থাপন করেন, তবে এটি কোনও SHA-256 শংসাপত্র উপস্থাপিত ব্যাকএন্ডে পরিচালনা করুন। যদি এটি এক্সটেনশানটি উপস্থাপন না করে তবে ধরে নিন যে এটি কোনও পুরানো ক্লায়েন্ট যা এসএসএল 3 বা টিএলএসের কিছু ভাঙা সংস্করণ বলে।

ফ্রন্টএন্ড এবং ব্যাকএন্ড শৃঙ্খলাবদ্ধ করে এটি HAProxy এ অর্জন করা যেতে পারে:

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" নামে একক ব্যাকএন্ডে পুনর্নির্দেশ করে যা ট্রাফিককে গন্তব্য ওয়েব সার্ভারে প্রেরণ করে।

এটি একটি খুব সাধারণ কনফিগারেশন, এবং শেষ পর্যন্ত এটি আরও ভাল এসিএল ব্যবহার করে উন্নত করা যেতে পারে (এইচএপ্রক্সি নিয়মিত সংবাদগুলি যুক্ত করে) তবে একটি প্রাথমিক সার্টের স্যুইচিং কনফিগারেশনের জন্য এটি কাজটি সম্পন্ন করে!


9

একটি অনুরূপ প্রশ্ন https://commune.qualys.com/thread/16387 এ জিজ্ঞাসা করা হয়েছিল

আমি মনে করি এই উত্তরটি সমাধান:

Suche.org একটি চতুর বাস্তবায়ন। আমি যতদূর বুঝতে পেরেছি, এটি ক্লায়েন্টের ক্ষমতার অনুসন্ধান করে এবং তারপরে কোনও সন্দেহ দূরীকরণের জন্য কেবল সেরা উপলব্ধ উপলব্ধ করে offers


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