ব্রাউজার যদি এসএনআই সমর্থন করে তবেই এসএসএলে পুনঃনির্দেশ করুন


20

আমার ভার্চুয়াল হোস্টিংয়ের সাথে একই আইপি / পোর্টে মোডি_এসএল এবং এইচটিপিপিএসে একগুচ্ছ সাইটগুলি সহ অ্যাপাচি ২.২ রয়েছে, সুতরাং ক্লায়েন্টকে সেই ভার্চুয়াল হোস্টগুলির সাথে সংযোগ স্থাপনের জন্য এসএনআই সমর্থন করতে হবে।

আমি নিম্নলিখিতভাবে আমার সার্ভারটি কনফিগার করতে চাই:

যখন কোনও ব্যবহারকারী www.dummysite.com টাইপ করেন এবং তার ব্রাউজার এসএনআই সমর্থন করে (সার্ভার নেম ইন্ডিকেশন), কোনও এইচটিটিপি অনুরোধ https://যেখানে এইচএসটিএস হেডার প্রেরণ করা হয় সেখানে পুনঃনির্দেশিত হয় । তবে ব্রাউজারটি যদি এসএনআই সমর্থন না করে তবে অনুরোধটি এইচটিটিপি দ্বারা সরবরাহ করা হবে।

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

আমি অ্যাপাচি কনফিগারেশন স্তরে সম্ভবত ব্যবহারকারী এজেন্টের ফিল্টার সহ এই পুনর্নির্দেশটি করতে চাই। সরাসরি কোনও http: // রেফারেন্স উপস্থিত নেই তা নিশ্চিত করা ছাড়া আমি চলমান অ্যাপ্লিকেশনগুলিকে স্পর্শ করতে চাই না (অন্যথায় তারা সুরক্ষা সতর্কতা বোঝায়)

[সম্পাদনা] (প্রশ্ন আমি ভুলে গেছি সম্পাদনা করার সময় প্রশ্ন): কি sni-সক্রিয় ব্যবহারকারী এজেন্ট তালিকা পুনর্নির্দেশ করতে হয়?

উত্তর:


20

যেহেতু এসএনআই এসএসএল / টিএলএস হ্যান্ডশেক চলাকালীন ঘটে তাই ক্লায়েন্ট এইচটিটিপি-র সাথে সংযোগ করলে ব্রাউজার সমর্থন সনাক্ত করা সম্ভব হয় না।

সুতরাং, আপনি ঠিক বলেছেন; কোনও ব্যবহারকারী-এজেন্ট ফিল্টার এটি করার একমাত্র উপায়।

বড় প্রশ্ন হ'ল আপনি ব্রাউজারগুলির বিরুদ্ধে যে কোনও ব্ল্যাকলিস্টে কাজ করতে চান যা আপনি জানেন যে এসএনআই, বা ব্রাউজারগুলির একটি শ্বেত তালিকা যা এটি সমর্থন করে বলে পরিচিত তা শুনবে না। অস্পষ্ট বা নতুন ডিভাইসগুলি সাইটটি ব্যবহার করতে অক্ষম হওয়ায় এটি একটি ডিল-ব্রেকার বলে মনে হচ্ছে, তাই আমি বলব হোয়াইটলিস্টটি আরও ভাল বিকল্প হতে পারে।

আপনার HTTP- তে <VirtualHost>:

# Internet Explorer 7, 8, 9, on Vista or newer
RewriteCond %{HTTP_USER_AGENT} MSIE\s7.*Windows\sNT\s6 [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\s8.*Windows\sNT\s6 [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\s9.*Windows\sNT\s6 [OR]
# Chrome on Windows, Mac, Linux
RewriteCond %{HTTP_USER_AGENT} Windows\sNT\s6.*Chrome [OR]
RewriteCond %{HTTP_USER_AGENT} Macintosh.*Chrome [OR]
RewriteCond %{HTTP_USER_AGENT} Linux.*Chrome [OR]
# Firefox - we'll just make the assumption that all versions in the wild support:
RewriteCond %{HTTP_USER_AGENT} Gecko.*Firefox
RewriteRule ^/(.*)$ https://ssl.hostname/$1 [R=301]

এখানে ব্ল্যাকলিস্ট বিকল্পটিও রয়েছে - মনে রাখবেন যে এটি কোনও ক্লায়েন্টকে কোনও এসএনআই-র প্রয়োজনীয় সাইটে SNI ব্যবহার না করে প্রেরণের ঝুঁকি নিয়ে চলেছে, তবে অন্যদিকে, আইই 10 এর মতো নতুন কিছু ব্যবহারকারীকে ডানদিকে প্রেরণ করবে স্থান:

# IE 6
RewriteCond %{HTTP_USER_AGENT} !MSIE\s6
# Windows XP/2003
RewriteCond %{HTTP_USER_AGENT} !Windows\sNT\s5
# etc etc
RewriteRule ^/(.*)$ https://ssl.hostname/$1 [R=301]

সেখানে প্রচুর ব্রাউজার রয়েছে। আমি এক্সপ্রেশন দিয়ে বেশ আলগা হয়েছি এবং প্রচুর ব্রাউজার আবৃত করি নি - এটি বজায় রাখার জন্য বেশ দুঃস্বপ্নে পরিণত হতে পারে।

আপনি যে কোনও বিকল্প চয়ন করুন .. শুভ কামনা!


1
গ্রেট! আমি অপেরা মোবাইলের সাথে পরীক্ষা করেছি (যা এসএনআই অনুগত তবে তালিকায় নেই) এবং এটি পুনর্নির্দেশ করে না। আমার ফায়ারফক্সের সাথে এটি পুনর্নির্দেশ করে!
usr-local-ΕΨΗΕΛΩΝ

6
আমি Mod_setenvif httpd.apache.org/docs/2.2/mod/mod_mod_setenvif.html এর ব্রাউজার ম্যাচ নির্দেশিকার সাথে এই সমাধানটি মডুলারাইজ করার পরামর্শ দিচ্ছি । এনভায়রনমেন্ট ভেরিয়েবল সমর্থন_সনি = y সেট করতে ব্রাউজার ম্যাচ ব্যবহার করুন, তারপরে RewritCond% {ENV: সমর্থন_sni} = y লিখুন। এইভাবে, আপনি থাকতে পারে এমন অন্য কোনও পুনর্নির্মাণের জন্য আপনি এসএনআই সনাক্তকরণ যুক্তি পুনরায় ব্যবহার করতে পারেন।
200_সাক্সেস

@ 200_সুসেস ভাল ধারণা!
শেন ম্যাডেন

8

আমার সমাধানটি হ'ল:

  # Test if SNI will work and if not redirect to too old browser page
  RewriteCond %{HTTPS} on
  RewriteCond %{SSL:SSL_TLS_SNI} =""
  RewriteRule ^ http://www.example.com/too-old-browser [L,R=307]

যদি এসএনআইবিহীন কোনও পুরানো ব্রাউজার https://www.example.com/ * অ্যাক্সেস করার চেষ্টা করে তবে এটি প্রথমে ব্রাউজারে একটি ত্রুটি ছুঁড়ে দেবে, যা এ্যাপাচি কোনও অ-এসএনআই ব্রাউজারের উত্তর না দেওয়া পর্যন্ত এড়ানো যায় না যা এটি জানে না it এটি কোন সাইটের জন্য জিজ্ঞাসা করছে। তারপরে এটি কোনও পৃষ্ঠায় পুনঃনির্দেশ করে যা ব্যবহারকারীকে বলে যে তাদের ব্রাউজারটি অনেক পুরানো (যতক্ষণ না ব্যবহারকারী ক্লিকগুলিতে ওয়েবসাইট অবিরত থাকে)।

এবং আমার কাছে নতুন ব্রাউজারযুক্ত ব্যবহারকারীদের জন্য

  #Test if new browser and if so redirect to https
  #new browser is not MSIE 5-8, not Android 0-3
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_USER_AGENT} !MSIE\ [5-8]
  RewriteCond %{HTTP_USER_AGENT} !Android.*(Mobile)?\ [0-3]
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

এটি বেশিরভাগ পুরানো ব্রাউজারগুলিকে বাদ দেয় না যেমন ভিস্টায় এমএসআইই 5-8 এর মতো কিছু রয়েছে (9+ কেবলমাত্র ভিস্তা / 7 তাই এসএনআই সমর্থন করে)। এটি 100% নয় (চিহ্নটিকে উপেক্ষা করা হয় ইত্যাদি) তবে সংখ্যাগরিষ্ঠদের পক্ষে কাজ করা উচিত। সংখ্যালঘু এখনও শংসাপত্র ত্রুটি গ্রহণ করতে চয়ন করতে পারে।


3

যতদূর আমি সচেতন সেখানে এটি করার কোনও ভাল উপায় নেই - আপনি শিরোনাম শিরোনাম ভিত্তিতে একটি মোড_উইরাইট রুল বা একই জাতীয় শর্ত ব্যবহার করতে পারেন User-agentতবে এটি কোনও নন-এসএসএল ভোস্টের উপর থাকতে হবে: যদি ব্রাউজারটি না করে থাকে এসএনআই সমর্থন করে এবং এটি একটি সুরক্ষিত ( https://) সাইটে যায় যা এটি পুরানো-স্কুল অ্যাপাচি আচরণ পেতে চলেছে "এখানে SSL আইপি ঠিকানার সাথে আমি যুক্ত প্রথম এসএসএল শংসাপত্র - আশা করি আপনি এটি চেয়েছিলেন!" - যদি এটি শংসাপত্রটি না হয় তবে ব্রাউজারটি আশা করে যে আপনি হোস্টনামের মিলগুলি সম্পর্কে কোনও ত্রুটি বার্তাটি সরিয়ে নেবেন।

মূলত এর অর্থ মানুষকে একটি নন-এসএসএল আন্তঃদেশীয় পৃষ্ঠায় আঘাত করতে হবে যা তাদের পুনর্নির্দেশ করবে - সম্ভবত তারা তাদের অনুরোধে পাঠাচ্ছে এমন কোনও ডেটা প্রকাশ করবে। এটি ডিল ব্রেকার হতে পারে বা নাও হতে পারে (আপনি বলছেন যে তারা যে কোনও উপায়ে এসএনআই সমর্থন না করে তাদের কোনও নন-এসএসএল সাইটে প্রেরণ করতে চলেছেন, তাই আমি ধরে নিচ্ছি যে আপনি সুরক্ষা সম্পর্কে তেমন যত্ন নেবেন না। আমি যদি থাকতাম একটি এনক্রিপশন বা প্রমাণীকরণ স্তর হিসাবে এসএসএল প্রয়োজন ছিল এমন একটি সিস্টেম ডিজাইন করা যদিও আমি এটি সম্পর্কে কিছুটা বেশি জেদী থাকব ...)

এর মধ্যে কেউই সুরক্ষিত সাইটটিকে বুকমার্ক করা থেকে বিরত রাখে না - এবং যদি তারা ভাগ করা বুকমার্ক পরিষেবা ব্যবহার করে বা তাদের বুকমার্কগুলি এমন কোনও মেশিনে পুনরুদ্ধার করে যেখানে ওয়েব ব্রাউজার এসএনআই সমর্থন করে না তারা সম্ভাব্য-এসএসএল-ত্রুটিগুলির ক্ষেত্রে ফিরে আসবে they ।


1

আমি এই তিনটি পদ্ধতির একটি সমাধান করার জন্য প্রলুব্ধ হব:

  1. RewriteRuleUser-Agentশিরোনাম উপর ভিত্তি করে ।
  2. একটি <SCRIPT>ডিফল্ট ভিএহস্টের একটি ট্যাগে একটি https: // ইউআরআই লোড করুন; যদি লোড সফল হয় তবে এটি কিছুটা জেএস যা এইচটিটিপিএস এর অধীনে পুরো পৃষ্ঠাটি পুনরায় লোড করে।
  3. আমার দর্শনার্থীদের সর্বত্র এইচটিটিপিএসের মতো কিছু ব্যবহার করতে শেখান, যদি এটির জন্য অগ্রাধিকার হয় তবে যে পৃষ্ঠাগুলির এটি প্রয়োজন হবে সেখানে জোর করে চাপ দিন এবং আশা করি শেষ পর্যন্ত সবকিছু কার্যকর হয়ে যায়।

এর মধ্যে আমি ব্যক্তিগতভাবে # 2 সেরা পছন্দ করি তবে এর মধ্যে আপনার সাইটের কোড সংশোধন করা জড়িত।


0

যার প্রয়োজন কেবল তার জন্য।

আপনার যদি একাধিক হোস্ট থাকে এবং তাদের সমস্ত ভার্চুয়াল হোস্টিংয়ে SSL- সক্ষম হওয়ার জন্য চান (এবং আপনি প্রত্যেকের জন্য একটি শংসাপত্র কিনেছেন) নতুন চেষ্টা করুন mod_djechelon_ssl

$ cat /etc/apache2/mod_djechelon_ssl.conf 
RewriteEngine on
# Internet Explorer 7, 8, 9, on Vista or newer
RewriteCond %{HTTP_USER_AGENT} MSIE\s7.*Windows\sNT\s6 [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\s8.*Windows\sNT\s6 [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\s9.*Windows\sNT\s6 [OR]
# Chrome on Windows, Mac, Linux
RewriteCond %{HTTP_USER_AGENT} Windows\sNT\s6.*Chrome [OR]
RewriteCond %{HTTP_USER_AGENT} Macintosh.*Chrome [OR]
RewriteCond %{HTTP_USER_AGENT} Linux.*Chrome [OR]
# Firefox - we'll just make the assumption that all versions in the wild support:
RewriteCond %{HTTP_USER_AGENT} Gecko.*Firefox [OR]
#Safari iThing
RewriteCond %{HTTP_USER_AGENT} Mozilla.*iPhone.*Safari [OR]
RewriteCond %{HTTP_USER_AGENT} Mozilla.*iPod.*Safari [OR]
RewriteCond %{HTTP_USER_AGENT} Mozilla.*iPad.*Safari [OR]
RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=permanent,L]

ব্যবহার:

<VirtualHost ip:80>
ServerName www.yourhost.com

Include /path/to/mod_djechelon_ssl.conf

[plain old Apache directives]
</VirtualHost>

<VirtualHost ip:443>
ServerName www.yourhost.com

[SSL-related directives]

[Copy and paste directives from above host]
</VirtualHost>

0

আমি এখানে পোস্ট হিসাবে , আপনি কেবল এসএনআই সমর্থন এটি প্রয়োজন আগে পরীক্ষা করতে পারেন । এটি হ'ল আপনি ব্যবহারকারীদের এসএনআই এইচটিটিপিএসে জোর করতে পারবেন না এবং যদি তারা এটি সমর্থন না করে তবে পিছিয়ে পড়ে - কারণ তারা এগিয়ে যাওয়ার কোনও উপায় ছাড়াই এই জাতীয় (উইন্ডোজ এক্সপি-র ক্রোম থেকে) একটি ত্রুটি পাবে।

সুতরাং (দুর্ভাগ্যক্রমে) ব্যবহারকারীর আসলে একটি অনিরাপদ এইচটিটিপি সংযোগ শুরু করতে হবে এবং তারপরে তারা কেবল এসএনআই সমর্থন করলেই আপগ্রেড করা হবে।

আপনি এর মাধ্যমে এসএনআই সমর্থন সনাক্ত করতে পারেন:

  1. রিমোট স্ক্রিপ্ট
    আপনার সরল এইচটিটিপি পৃষ্ঠা <script>থেকে আপনার গন্তব্য এসএনআই এইচটিটিপিএস সার্ভার থেকে একটি লোড করুন এবং যদি স্ক্রিপ্টটি লোড হয় এবং সঠিকভাবে চালিত হয় তবে আপনি জানেন ব্রাউজারটি এসএনআই সমর্থন করে।

  2. ক্রস-ডোমেন এজেএক্স (সিওআরএস)
    বিকল্প 1 এর অনুরূপ, আপনি এইচটিটিপি পৃষ্ঠা থেকে এইচটিটিপিএস-তে ক্রস-ডোমেন এজেএক্স অনুরোধটি সম্পাদন করতে চেষ্টা করতে পারেন, তবে সচেতন থাকবেন যে সিওআরএসের কেবলমাত্র ব্রাউজার সমর্থন সীমিত রয়েছে ।

  3. ব্যবহারকারী-এজেন্টকে স্নিফ করুন
    এটি সম্ভবত সবচেয়ে কম নির্ভরযোগ্য পদ্ধতি এবং আপনাকে ব্রাউজারগুলির একটি ব্ল্যাকলিস্ট (এবং অপারেটিং সিস্টেম) সমর্থন না করার জন্য পরিচিত, বা যা পরিচিত সিস্টেমগুলির একটি শ্বেতলিস্টের মধ্যে সিদ্ধান্ত নিতে হবে।

    আমরা জানি যে উইন্ডোজ এক্সপি এবং নীচে আইই, ক্রোম এবং অপেরা সমস্ত সংস্করণ এসএনআই সমর্থন করে না। সমর্থিত ব্রাউজারগুলির সম্পূর্ণ তালিকার জন্য CanIUse.com দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.