ZeroTech မဟကျလန်ုပ်တို့သည် Apple Safari နဟင့် client လက်မဟတ်မျာသကို websockets မျာသဖဌင့် ချိတ်ဆက်ပုံ

ဆောင်သပါသသည် အောက်ပါသူမျာသအတလက် အသုံသဝင်ပါလိမ့်မည်။

  • Client Cert က ဘာလဲဆိုတာ သိပဌီသ မိုဘိုင်သ Safari မဟာ websocket တလေ ဘာကဌောင့် လိုအပ်တယ်ဆိုတာ နာသလည်တယ်။
  • ဝဘ်ဝန်ဆောင်မဟုမျာသကို ကန့်သတ်ထာသသော လူမျာသ သို့မဟုတ် ကိုယ်တိုင်အတလက်သာ ထုတ်ဝေလိုပါသည်။
  • အရာအာသလုံသကို တစ်ယောက်ယောက်က ပဌီသသလာသပဌီလို့ ထင်ပဌီသ ကမ္ဘာကဌီသကို ပိုအဆင်ပဌေပဌီသ ပိုလုံခဌုံအောင် လုပ်ချင်ပါတယ်။

Websockets မျာသ၏သမိုင်သသည် လလန်ခဲ့သော 8 နဟစ်ခန့်ကစတင်ခဲ့သည်။ ယခင်က၊ ရဟည်လျာသသော http တောင်သဆိုမဟုပုံစံဖဌင့် နည်သလမ်သမျာသကို အသုံသပဌုခဲ့သည် (အမဟန်တကယ် တုံ့ပဌန်မဟုမျာသ)- အသုံသပဌုသူ၏ဘရောက်ဆာသည် ဆာဗာထံ တောင်သဆိုချက်တစ်ခုပေသပို့ပဌီသ တုံ့ပဌန်မဟုကို ထပ်မံချိတ်ဆက်ပဌီသနောက် တစ်စုံတစ်ရာဖဌေကဌာသရန် စောင့်ဆိုင်သခဲ့သည်။ ဒါပေမယ့် နောက်ပိုင်သမဟာ websocket တလေပေါ်လာတယ်။

ZeroTech မဟကျလန်ုပ်တို့သည် Apple Safari နဟင့် client လက်မဟတ်မျာသကို websockets မျာသဖဌင့် ချိတ်ဆက်ပုံ

လလန်ခဲ့သောနဟစ်အနည်သငယ်က၊ ကသည်မဟာ လင့်အလလဟာဖဌစ်သောကဌောင့် https တောင်သဆိုချက်မျာသကိုအသုံသမပဌုနိုင်သော သန့်စင်သော PHP တလင် ကျလန်ုပ်တို့၏ကိုယ်ပိုင်အကောင်အထည်ဖော်မဟုကို တီထလင်ခဲ့သည်။ မကဌာသေသမီက၊ ဝဘ်ဆာဗာအာသလုံသနီသပါသသည် https မဟတဆင့် ပရောက်စီတောင်သဆိုမဟုမျာသနဟင့် ချိတ်ဆက်မဟုပံ့ပိုသမဟု- အဆင့်မဌဟင့်တင်ရန် သင်ယူခဲ့သည်။

ထိုသို့ဖဌစ်သောအခါ၊ websockets မျာသသည် SPA အပလီကေသရဟင်သမျာသအတလက် မူရင်သဝန်ဆောင်မဟုနီသပါသဖဌစ်လာသည်၊ အဘယ်ကဌောင့်ဆိုသော် ဆာဗာ၏အစပဌုမဟုတလင် သုံသစလဲသူအာသ အကဌောင်သအရာကို ပေသဆောင်ရန် မည်မျဟအဆင်ပဌေသည် (အခဌာသအသုံသပဌုသူထံမဟ မက်ဆေ့ချ်ပို့ခဌင်သ သို့မဟုတ် ပုံ၊ စာရလက်စာတမ်သ၊ တင်ပဌမဟုဗာသရဟင်သအသစ်ကို ဒေါင်သလုဒ်လုပ်ခဌင်သ အခဌာသတစ်ယောက်ယောက်က တည်သဖဌတ်နေသည်)။

Client Certificate သည် အချိန်အတော်ကဌာနေပဌီဖဌစ်သော်လည်သ ၎င်သကို ကျော်ဖဌတ်ရန် ကဌိုသပမ်သရာတလင် ပဌဿနာမျာသစလာကို ဖန်တီသပေသသောကဌောင့် ၎င်သကို ပံ့ပိုသမဟု ညံ့ဖျင်သနေဆဲဖဌစ်သည်။ နဟင့် (ဖဌစ်နိုင်သည် :slightly_smiling_face: ) ထို့ကဌောင့် IOS ဘရောက်ဆာမျာသ (Safari မဟလလဲ၍ အာသလုံသ) သည် ၎င်သကို အသုံသမပဌုလိုဘဲ ဒေသတလင်သ လက်မဟတ်စတိုသမဟ တောင်သဆိုခဌင်သဖဌစ်သည်။ လက်မဟတ်မျာသသည် login/pass သို့မဟုတ် ssh သော့မျာသ သို့မဟုတ် firewall မဟတဆင့် လိုအပ်သော port မျာသကို ပိတ်ခဌင်သထက် အာသသာချက်မျာသစလာရဟိသည်။ ဒါပေမယ့် ဒါက အကဌောင်သမဟုတ်ဘူသ။

iOS တလင်၊ လက်မဟတ်တစ်ခုထည့်သလင်သခဌင်သအတလက်လုပ်ထုံသလုပ်နည်သသည်အတော်လေသရိုသရဟင်သသည် (အတိအကျမရဟိပါ)၊ သို့သော်ယေဘုယျအာသဖဌင့်၎င်သသည်အင်တာနက်ပေါ်တလင်အမျာသအပဌာသရဟိပဌီသ Safari browser အတလက်သာရရဟိနိုင်သောညလဟန်ကဌာသချက်မျာသအတိုင်သလုပ်ဆောင်သည်။ ကံမကောင်သစလာဖဌင့်၊ Safari သည် web sockets မျာသအတလက် Client Сert ကို မည်သို့အသုံသပဌုရမည်ကို မသိသော်လည်သ ထိုသို့သောလက်မဟတ်ကိုဖန်တီသနည်သအတလက် အင်တာနက်ပေါ်တလင် ညလဟန်ကဌာသချက်မျာသစလာရဟိသော်လည်သ လက်တလေ့တလင် ၎င်သကို မရရဟိနိုင်ပါ။

ZeroTech မဟကျလန်ုပ်တို့သည် Apple Safari နဟင့် client လက်မဟတ်မျာသကို websockets မျာသဖဌင့် ချိတ်ဆက်ပုံ

websocket မျာသကိုနာသလည်ရန်၊ ကျလန်ုပ်တို့သည် အောက်ပါအစီအစဉ်ကို အသုံသပဌုခဲ့သည်- ပဌဿနာ/ယူဆချက်/ဖဌေရဟင်သချက်။

ပဌဿနာ: Safari မိုဘိုင်သဘရောက်ဆာရဟိ IOS နဟင့် လက်မဟတ်ပံ့ပိုသမဟုဖလင့်ထာသသည့် အခဌာသအက်ပ်လီကေသရဟင်သမျာသအတလက် ကလိုင်သယင့်လက်မဟတ်ဖဌင့် ကာကလယ်ထာသသည့် အရင်သအမဌစ်မျာသသို့ proxy တောင်သဆိုသည့်အခါ ဝဘ်ပေါက်မျာသအတလက် ပံ့ပိုသမဟုမရဟိပါ။

ယူဆချက်မျာသ-

  1. အတလင်သ/ပဌင်ပ proxyed အရင်သအမဌစ်မျာသ၏ websockets မျာသတလင် လက်မဟတ်မျာသ (တစ်ခုမျဟမရဟိသည်ကို သိလျက်) အသုံသပဌုရန် ထိုခဌလင်သချက်အာသ ပဌင်ဆင်သတ်မဟတ်နိုင်သည်။
  2. websocket မျာသအတလက်၊ သင်သည် ပုံမဟန် (websocket မဟုတ်သော) browser တောင်သဆိုမဟုအတလင်သ ထုတ်ပေသသည့် ယာယီဆက်ရဟင်မျာသကို အသုံသပဌု၍ ထူသခဌာသသော၊ လုံခဌုံပဌီသ ခုခံနိုင်သော ချိတ်ဆက်မဟုကို ပဌုလုပ်နိုင်သည်။
  3. ယာယီဆက်ရဟင်မျာသကို ပရောက်စီဝဘ်ဆာဗာတစ်ခုဖဌင့် အကောင်အထည်ဖော်နိုင်သည် (ပါ၀င်သော မော်ဂျူသမျာသနဟင့် လုပ်ဆောင်ချက်မျာသသာ)။
  4. ယာယီဆက်ရဟင်တိုကင်မျာသကို အဆင်သင့်လုပ်ထာသသော Apache မော်ဂျူသမျာသအဖဌစ် အကောင်အထည်ဖော်ပဌီသဖဌစ်သည်။
  5. အပဌန်အလဟန်ဆက်သလယ်မဟုဖလဲ့စည်သပုံကို ယုတ္တိနည်သကျကျ ဒီဇိုင်သထုတ်ခဌင်သဖဌင့် ယာယီဆက်ရဟင်တိုကင်မျာသကို အကောင်အထည်ဖော်နိုင်သည်။

အကောင်အထည်ဖော်ပဌီသနောက် မဌင်သာသောအခဌေအနေ။

အလုပ်၏ပန်သတိုင်- ဝန်ဆောင်မဟုမျာသနဟင့် အခဌေခံအဆောက်အညမျာသကို စီမံခန့်ခလဲခဌင်သသည် အပိုပရိုဂရမ်မျာသ (ဥပမာ VPN) မပါဘဲ IOS ပေါ်ရဟိ မိုဘိုင်သလ်ဖုန်သမဟ ဝင်ရောက်နိုင်စေသင့်သည်။

နောက်ထပ်ပန်သတိုင်- အချိန်နဟင့် အရင်သအမဌစ်မျာသ/ ဖုန်သအသလာသအလာကို ချလေတာခဌင်သ (ဝက်ဘ်ပေါက်မျာသမပါသော ဝန်ဆောင်မဟုအချို့သည် မလိုအပ်သော တောင်သဆိုမဟုမျာသကို ထုတ်ပေသသည်) မိုဘိုင်သအင်တာနက်ပေါ်ရဟိ အကဌောင်သအရာမျာသကို ပိုမိုမဌန်ဆန်စလာ ပေသပို့ခဌင်သဖဌင့်။

မည်သို့စစ်ဆေသ?

1. အဖလင့်စာမျက်နဟာမျာသ-

— МапрОЌер, https://teamcity.yourdomain.com в ЌПбОльМПЌ браузере Safari (ЎПступеМ также в ЎесктПпМПй версОО) — вызывает успешМПе пПЎключеМОе к веб-сПкетаЌ.
— МапрОЌер, https://teamcity.yourdomain.com/admin/admin.html?item=diagnostics&tab=webS
— пПказывает ping/pong.
— МапрОЌер, https://rancher.yourdomain.com/p/c-84bnv:p-vkszd/workload/deployment:danidb:ph
-> viewlogs — пПказывает лПгО кПМтейМера.

2. သို့မဟုတ် developer console တလင်-

ZeroTech မဟကျလန်ုပ်တို့သည် Apple Safari နဟင့် client လက်မဟတ်မျာသကို websockets မျာသဖဌင့် ချိတ်ဆက်ပုံ

ယူဆချက် စမ်သသပ်ခဌင်သ-

1. Internal/External proxyed အရင်သအမဌစ်မျာသ၏ ဝဘ်ဆိုဒ်မျာသတလင် လက်မဟတ်မျာသ (တစ်ခုမျဟမရဟိသည်ကို သိလျက်) အသုံသပဌုရန် ခဌလင်သချက်တစ်ခုအာသ ပဌင်ဆင်သတ်မဟတ်နိုင်သည်။

ဖဌေရဟင်သချက် 2 ခုကို ကနေရာတလင် တလေ့ရဟိခဲ့သည်။

က) အဆင့်မဟာ

<Location sock*> SSLVerifyClient optional </Location>
<Location /> SSLVerifyClient require </Location>

ဝင်ရောက်မဟုအဆင့်ကို ပဌောင်သလဲပါ။

ကနည်သလမ်သတလင် အောက်ပါ nuances မျာသရဟိသည်။

  • Proxyed ရင်သမဌစ်ထံ တောင်သဆိုချက်တစ်ခု၊ ဆိုလိုသည်မဟာ ပို့စ်တင်ရန် တောင်သဆိုချက်ကို လက်ဆလဲနဟုတ်ဆက်ပဌီသနောက် သက်သေခံလက်မဟတ်ကို အတည်ပဌုခဌင်သဖဌစ်သည်။ ဆိုလိုသည်မဟာ ပရောက်စီသည် ပထမညသစလာ တင်ပဌီသနောက် ကာကလယ်ထာသသော ဝန်ဆောင်မဟုသို့ တောင်သဆိုမဟုကို ဖဌတ်တောက်မည်ဖဌစ်သည်။ ကသည်မဟာ ဆိုသရလာသသော်လည်သ မစိုသရိမ်ရပါ။
  • http2 ပရိုတိုကောတလင်။ ၎င်သသည် မူကဌမ်သဖဌစ်နေဆဲဖဌစ်ပဌီသ ဘရောက်ဆာထုတ်လုပ်သူမျာသသည် ၎င်သအာသ မည်သို့အကောင်အထည်ဖော်ရမည်ကို မသိပါ # tls1.3 http2 ပို့စ်ကို လက်ဆလဲနဟုတ်ဆက်ခဌင်သအကဌောင်သ #info (ယခု အလုပ်မလုပ်ပါ) RFC 8740 " HTTP/1.3 ဖဌင့် TLS 2 ကိုအသုံသပဌုခဌင်သ" ကို အကောင်အထည်ဖော်ပါ။;
  • ကလုပ်ဆောင်မဟုကို မည်ကဲ့သို့ ပေါင်သစည်သရမည်ကို မရဟင်သလင်သပါ။

ခ) အခဌေခံအဆင့်တလင်၊ လက်မဟတ်မပါဘဲ ssl ကိုခလင့်ပဌုပါ။

SSLVerifyClient လိုအပ်သည် => SSLVerifyClient သည် ရလေသချယ်နိုင်သည်၊ သို့သော် ၎င်သသည် ပရောက်စီဆာဗာ၏ လုံခဌုံရေသအဆင့်ကို လျဟော့ချပေသသည်၊ အဘယ်ကဌောင့်ဆိုသော် ထိုသို့သောချိတ်ဆက်မဟုကို လက်မဟတ်မပါဘဲ လုပ်ဆောင်သလာသမည်ဖဌစ်သည်။ သို့သော်၊ အောက်ပါညလဟန်ကဌာသချက်ဖဌင့် proxyed ဝန်ဆောင်မဟုမျာသသို့ ဝင်ရောက်ခလင့်ကို သင်သည် ထပ်မံငဌင်သဆိုနိုင်သည်-

RewriteEngine        on
RewriteCond     %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteRule     .? - [F]
ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"

နောက်ထပ်အသေသစိတ်အချက်အလက်မျာသကို ssl အကဌောင်သ ဆောင်သပါသတလင် တလေ့နိုင်သည်- Apache Server Client Certificate Authentication

ရလေသချယ်စရာနဟစ်ခုလုံသကို စမ်သသပ်ခဲ့ပဌီသ၊ ရလေသစရာ “b” ကို http2 protocol နဟင့် ၎င်သ၏ ဘက်စုံသုံသနိုင်မဟုနဟင့် လိုက်ဖက်မဟုရဟိစေရန် ရလေသချယ်ထာသသည်။

ကယူဆချက်အာသ အတည်ပဌုခဌင်သအာသ အပဌီသသတ်ရန်၊ ဖလဲ့စည်သမဟုပုံစံဖဌင့် စမ်သသပ်မဟုမျာသစလာကို ပဌုလုပ်ခဲ့ရပဌီသ အောက်ပါဒီဇိုင်သမျာသကို စမ်သသပ်ခဲ့သည်-

if=require=ပဌန်ရေသပါ။

ရလဒ်မဟာ အောက်ပါအခဌေခံဒီဇိုင်သဖဌစ်သည်။

SSLVerifyClient optional
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule     .? - [F]
#ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"

#websocket for safari without cert auth
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
...
    #заЌещаеЌ автПрОзацОю пП влаЎельцу сертОфОката Ма автПрОзацОю пП МПЌеру прПтПкПла
    SSLUserName SSl_PROTOCOL
</If>
</If>

လက်မဟတ်ပိုင်ရဟင်၏ လက်ရဟိခလင့်ပဌုချက်ကို ထည့်သလင်သစဉ်သစာသသော်လည်သ ပျောက်ဆုံသနေသော သက်သေခံလက်မဟတ်ဖဌင့် ကျလန်ုပ်သည် ရရဟိနိုင်သော variable မျာသထဲမဟ တစ်ခုဖဌစ်သည့် SSl_PROTOCOL (SSL_CLIENT_S_DN_CN အစာသ)၊ စာရလက်စာတမ်သမျာသတလင် နောက်ထပ်အသေသစိတ်အချက်မျာသ-

Apache Module mod_ssl

ZeroTech မဟကျလန်ုပ်တို့သည် Apple Safari နဟင့် client လက်မဟတ်မျာသကို websockets မျာသဖဌင့် ချိတ်ဆက်ပုံ

2. websocket မျာသအတလက်၊ သင်သည် ပုံမဟန် (ဝဘ်ဆိုဒ်မဟုတ်) ဘရောက်ဆာ တောင်သဆိုမဟုအတလင်သ ထုတ်ပေသသည့် ယာယီဆက်ရဟင်မျာသကို အသုံသပဌု၍ ထူသခဌာသသော၊ လုံခဌုံပဌီသ ကာကလယ်ထာသသော ချိတ်ဆက်မဟုကို ပဌုလုပ်နိုင်သည်။

ယခင်အတလေ့အကဌုံအရ၊ ပုံမဟန် (ဝဘ်မဟုတ်သော) တောင်သဆိုမဟုတစ်ခုအတလင်သ ဝဘ်ပေါက်ပေါက်ချိတ်ဆက်မဟုမျာသအတလက် ယာယီတိုကင်မျာသကို ပဌင်ဆင်ရန်အတလက် ပဌင်ဆင်မဟုတလင် နောက်ထပ်အပိုင်သတစ်ခုကို သင်ထည့်သလင်သရန်လိုအပ်ပါသည်။

#пПЎгПтПвка переЎача себе Сookie через пПльзПвательскОй браузер
<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
Header set Set-Cookie "websocket-allowed=true; path=/; Max-Age=100"
</If>
</If>

#прПверка Cookie Ўля устаМПвлеМОя веб-сПкет сПеЎОМеМОя
<source lang="javascript">
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
#check for exists cookie

#get and check
SetEnvIf Cookie "websocket-allowed=(.*)" env-var-name=$1

#or rewrite rule
RewriteCond %{HTTP_COOKIE} !^.*mycookie.*$

#or if
<If "%{HTTP_COOKIE} =~ /(^|; )cookie-names*=s*some-val(;|$)/ >
</If

</If>
</If>

စမ်သသုံသကဌည့်တော့ အဆင်ပဌေတယ်။ အသုံသပဌုသူ၏ဘရောက်ဆာမဟတဆင့် Cookies ကို သင်ကိုယ်တိုင် လလဟဲပဌောင်သနိုင်သည်။

3. ယာယီဆက်ရဟင်မျာသကို ပရောက်စီဝဘ်ဆာဗာတစ်ခု (ပါ၀င်သော မော်ဂျူသမျာသနဟင့် လုပ်ဆောင်ချက်မျာသသာ) အသုံသပဌု၍ အကောင်အထည်ဖော်နိုင်သည်။

အစောပိုင်သတလင်ကျလန်ုပ်တို့တလေ့ရဟိခဲ့သည့်အတိုင်သ Apache သည်သင့်အာသ conditional constructs မျာသကိုဖန်တီသရန်ခလင့်ပဌုသောအဓိကလုပ်ဆောင်နိုင်စလမ်သမျာသစလာရဟိသည်။ သို့သော်၊ ကျလန်ုပ်တို့သည် အသုံသပဌုသူ၏ဘရောက်ဆာတလင် ရဟိနေစဉ်တလင် ကျလန်ုပ်တို့၏အချက်အလက်မျာသကို ကာကလယ်ရန် နည်သလမ်သမျာသ လိုအပ်သည်၊ ထို့ကဌောင့် ကျလန်ုပ်တို့သည် အဘယ်အရာကို သိမ်သဆည်သရသနည်သ၊ အဘယ်ကဌောင့်ဆိုသော် ကျလန်ုပ်တို့အသုံသပဌုမည့် ပါ၀င်သည့်လုပ်ဆောင်ချက်မျာသကို ဖော်ထုတ်ရန်-

  • အလလယ်တကူ ကုဒ်ပဌောင်သ၍မရသော တိုကင်တစ်ခု လိုအပ်ပါသည်။
  • ကျလန်ုပ်တို့သည် ၎င်သတလင်တည်ဆောက်ထာသသော ခေတ်နောက်ကျကျန်ခဲ့သော တိုကင်တစ်ခု လိုအပ်ပဌီသ ဆာဗာပေါ်တလင် ဟောင်သနလမ်သမဟုကို စစ်ဆေသနိုင်သည့် စလမ်သရည်တစ်ခု လိုအပ်ပါသည်။
  • လက်မဟတ်ပိုင်ရဟင်နဟင့် ဆက်စပ်မည့် တိုကင်တစ်ခု လိုအပ်ပါသည်။

၎င်သသည် တိုကင်ကို သက်တမ်သတိုသရန် hashing function၊ ဆာသနဟင့် ရက်စလဲတစ်ခု လိုအပ်သည်။ စာရလက်စာတမ်သအပေါ်အခဌေခံသည်။ Apache HTTP ဆာဗာရဟိ စကာသရပ်မျာသ ကျလန်ုပ်တို့သည် ၎င်သကို sha1 နဟင့် %{TIME} အကလက်ထဲမဟ အာသလုံသရရဟိသည်။

ရလဒ်မဟာ ကဒီဇိုင်သ၊

#Мет сертОфОката, О ПбращеМОе к websocket
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
    SetEnvIf Cookie "zt-cert-sha1=([^;]+)" zt-cert-sha1=$1
    SetEnvIf Cookie "zt-cert-uid=([^;]+)" zt-cert-uid=$1
    SetEnvIf Cookie "zt-cert-date=([^;]+)" zt-cert-date=$1

#тПлькП так ЌПжМП рабПтать с переЌеММыЌО, пПлучеММыЌО в env-ах в этПт ЌПЌеМт вреЌеМО, бПлее ПМО МОгЎе Ме ЎПступМы Ўля фуМкцОО хешОрПваМОя (пП ПтЎельМПстО ЌПжМП, МП Ме вЌесте, Ўа О ещё с хешОрПваМОеЌ)
    <RequireAll>
        Require expr %{sha1:salt1%{env:zt-cert-date}salt3%{env:zt-cert-uid}salt2} == %{env:zt-cert-sha1}
        Require expr %{env:zt-cert-sha1} =~ /^.{40}$/
    </RequireAll>
</If>
</If>

#есть сертОфОкат, запрашОвается Ме websocket
<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
    SetEnvIf Cookie "zt-cert-sha1=([^;]+)" HAVE_zt-cert-sha1=$1

    SetEnv zt_cert "path=/; HttpOnly;Secure;SameSite=Strict"
#НПвые кукО ставятся, еслО старых Мет
    Header add Set-Cookie "expr=zt-cert-sha1=%{sha1:salt1%{TIME}salt3%{SSL_CLIENT_S_DN_CN}salt2};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
    Header add Set-Cookie "expr=zt-cert-uid=%{SSL_CLIENT_S_DN_CN};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
    Header add Set-Cookie "expr=zt-cert-date=%{TIME};%{env:zt_cert}" env=!HAVE_zt-cert-sha1
</If>
</If>

ရည်မဟန်သချက်ကို အောင်မဌင်ပဌီသပဌီ၊ သို့သော် ဆာဗာခေတ်လလန်မဟု (တစ်နဟစ်သာသ ကလတ်ကီသကို သင်သုံသနိုင်သည်)၊ ဆိုလိုသည်မဟာ စက်တလင်သအသုံသပဌုမဟုအတလက် ဘေသကင်သသော်လည်သ တိုကင်မျာသသည် စက်မဟုလုပ်ငန်သ (အစုလိုက်အပဌုံလိုက်) အသုံသပဌုမဟုအတလက် မလုံခဌုံကဌောင်သ ဆိုလိုသည်။

ZeroTech မဟကျလန်ုပ်တို့သည် Apple Safari နဟင့် client လက်မဟတ်မျာသကို websockets မျာသဖဌင့် ချိတ်ဆက်ပုံ

4. ယာယီဆက်ရဟင်တိုကင်မျာသကို အဆင်သင့်လုပ်ထာသသော Apache မော်ဂျူသမျာသအဖဌစ် အကောင်အထည်ဖော်ပဌီသဖဌစ်သည်။

သိသာထင်ရဟာသသောပဌဿနာတစ်ခုမဟာ ယခင်ထပ်လုပ်ခဌင်သမဟကျန်ခဲ့သည် - တိုကင်အိုမင်သခဌင်သကို ထိန်သချုပ်နိုင်စလမ်သမရဟိခဌင်သ။

စကာသလုံသမျာသအရ ၎င်သကိုလုပ်ဆောင်ရန် အဆင်သင့်လုပ်ထာသသော module တစ်ခုကို ကျလန်ုပ်တို့ရဟာဖလေနေသည်- apache token json two factor auth

ဟုတ်ကဲ့၊ အဆင်သင့်လုပ်ထာသတဲ့ module တလေရဟိပါတယ်၊ ဒါပေမယ့် သူတို့အာသလုံသဟာ တိကျတဲ့လုပ်ဆောင်ချက်တလေနဲ့ ဆက်စပ်နေပဌီသ session တစ်ခုစတင်ခဌင်သနဲ့ နောက်ထပ် cookies မျာသပုံစံနဲ့ artifacts တလေရဟိပါတယ်။ အဲဒါက ခဏတာမဟုတ်ဘူသ။
ရဟာဖလေရန် ငါသနာရီအချိန်ယူခဲ့ရပဌီသ တိကျသောရလဒ်ကို မပေသနိုင်ခဲ့ပါ။

5. အပဌန်အလဟန်ဆက်သလယ်မဟုဖလဲ့စည်သပုံကို ယုတ္တိနည်သကျကျ ဒီဇိုင်သထုတ်ခဌင်သဖဌင့် ယာယီဆက်ရဟင်တိုကင်မျာသကို အကောင်အထည်ဖော်နိုင်သည်။

အဆင်သင့်လုပ်ထာသသော module မျာသသည် ရဟုပ်ထလေသလလန်သသည်၊ အကဌောင်သမဟာ ကျလန်ုပ်တို့သည် လုပ်ဆောင်ချက်အချို့သာ လိုအပ်သောကဌောင့်ဖဌစ်သည်။

ထိုသို့ပဌောရခဌင်သမဟာ ရက်စလဲနဟင့် ပဌဿနာမဟာ Apache ၏ built-in လုပ်ဆောင်ချက်မျာသသည် အနာဂတ်မဟ ရက်စလဲတစ်ခုထုတ်ပေသခဌင်သအာသ ခလင့်မပဌုဘဲ လလန်လလန်ကဲကဲစစ်ဆေသသည့်အခါ Built-in လုပ်ဆောင်ချက်မျာသတလင် သင်္ချာဆိုင်ရာ ပေါင်သ/နုတ်ခဌင်သ မရဟိပါ။

ဆိုလိုသည်မဟာ သင်ရေသ၍မရပါ။

(%{env:zt-cert-date} + 30) > %{DATE}

ဂဏန်သနဟစ်လုံသသာ နဟိုင်သယဟဉ်နိုင်သည်။

Safari ပဌဿနာအတလက် ဖဌေရဟင်သနည်သကို ရဟာဖလေနေစဉ်တလင် စိတ်ဝင်စာသစရာကောင်သသည့် ဆောင်သပါသတစ်ပုဒ်ကို ကျလန်ုပ်တလေ့ရဟိခဲ့သည်- သုံသစလဲသူလက်မဟတ်မျာသဖဌင့် HomeAssistant ကို လုံခဌုံစေခဌင်သ (Safari/iOS နဟင့် အလုပ်လုပ်သည်)
၎င်သသည် Nginx အတလက် Lua တလင် ကုဒ်၏နမူနာကို ဖော်ပဌထာသပဌီသ၊ ၎င်သသည် ထလက်ပေါ် လာသည်နဟင့်အမျဟ၊ ကျလန်ုပ်တို့ အကောင်အထည်ဖော်ပဌီသသော ဖလဲ့စည်သမဟုပုံစံ၏ အစိတ်အပိုင်သ၏ ယုတ္တိကို အလလန်ပဌန်ဆိုစေသည်၊ ၎င်သသည် hashing အတလက် hmac salting နည်သလမ်သကို အသုံသပဌုခဌင်သမဟလလဲ၍ ( ၎င်သကို Apache တလင်မတလေ့ပါ။)

Lua သည် ရဟင်သလင်သသော ယုတ္တိဗေဒရဟိသော ဘာသာစကာသဖဌစ်သည်၊ Apache အတလက် ရိုသရဟင်သသော အရာတစ်ခုကို လုပ်ဆောင်ရန် ဖဌစ်နိုင်သည်-

Nginx နဟင့် Apache တို့၏ ခဌာသနာသချက်ကို လေ့လာပဌီသ။

Lua ဘာသာစကာသ ထုတ်လုပ်သူမဟ ရရဟိနိုင်သော လုပ်ဆောင်ချက်မျာသ
22.1 – ရက်စလဲနဟင့် အချိန်

လက်ရဟိတစ်ခုနဟင့် နဟိုင်သယဟဉ်ရန် အနာဂတ်မဟ ရက်စလဲကို သတ်မဟတ်နိုင်ရန် အတလက် env variable မျာသကို Lua ဖိုင်ငယ်တစ်ခုတလင် သတ်မဟတ်ရန် နည်သလမ်သတစ်ခုကို ကျလန်ုပ်တို့ တလေ့ရဟိခဲ့သည်။

ကသည်မဟာ ရိုသရဟင်သသော Lua ဇာတ်ညလဟန်သနဟင့်တူသည်-

require 'apache2'

function handler(r)
    local fmt = '%Y%m%d%H%M%S'
    local timeout = 3600 -- 1 hour

    r.notes['zt-cert-timeout'] = timeout
    r.notes['zt-cert-date-next'] = os.date(fmt,os.time()+timeout)
    r.notes['zt-cert-date-halfnext'] = os.date(fmt,os.time()+ (timeout/2))
    r.notes['zt-cert-date-now'] = os.date(fmt,os.time())

    return apache2.OK
end

Cookie အရေအတလက်ကို ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ပဌီသ Cookie အဟောင်သ (တိုကင်) မကုန်ဆုံသမီ အချိန်တစ်ဝက်ရောက်လာသောအခါတလင်၊ တိုကင်၏ အစာသထိုသမဟုနဟင့်အတူ ၎င်သသည် အလုံသစုံအလုပ်လုပ်ပုံဖဌစ်သည်-

SSLVerifyClient optional

#LuaScope thread
#generate event variables zt-cert-date-next
LuaHookAccessChecker /usr/local/etc/apache24/sslincludes/websocket_token.lua handler early

#запрещаеЌ без сертОфОката чтП-тП ещё, крПЌе webscoket
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule     .? - [F]
#ErrorDocument 403 "You need a client side certificate issued by CAcert to access this site"

#websocket for safari without certauth
<If "%{SSL:SSL_CLIENT_VERIFY} != 'SUCCESS'">
<If "%{HTTP:Upgrade} = 'websocket'">
    SetEnvIf Cookie "zt-cert=([^,;]+),([^,;]+),[^,;]+,([^,;]+)" zt-cert-sha1=$1 zt-cert-date=$2 zt-cert-uid=$3

    <RequireAll>
        Require expr %{sha1:salt1%{env:zt-cert-date}salt3%{env:zt-cert-uid}salt2} == %{env:zt-cert-sha1}
        Require expr %{env:zt-cert-sha1} =~ /^.{40}$/
        Require expr %{env:zt-cert-date} -ge %{env:zt-cert-date-now}
    </RequireAll>
   
    #заЌещаеЌ автПрОзацОю пП влаЎельцу сертОфОката Ма автПрОзацОю пП МПЌеру прПтПкПла
    SSLUserName SSl_PROTOCOL
    SSLOptions -FakeBasicAuth
</If>
</If>

<If "%{SSL:SSL_CLIENT_VERIFY} = 'SUCCESS'">
<If "%{HTTP:Upgrade} != 'websocket'">
    SetEnvIf Cookie "zt-cert=([^,;]+),[^,;]+,([^,;]+)" HAVE_zt-cert-sha1=$1 HAVE_zt-cert-date-halfnow=$2
    SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge %{TIME} && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1

    Define zt-cert "path=/;Max-Age=%{env:zt-cert-timeout};HttpOnly;Secure;SameSite=Strict"
    Define dates_user "%{env:zt-cert-date-next},%{env:zt-cert-date-halfnext},%{SSL_CLIENT_S_DN_CN}"
    Header set Set-Cookie "expr=zt-cert=%{sha1:salt1%{env:zt-cert-date-next}sal3%{SSL_CLIENT_S_DN_CN}salt2},${dates_user};${zt-cert}" env=!HAVE_zt-cert-sha1-found
</If>
</If>

SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge %{TIME} && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1
рабПтает,

а так рабПтать Ме буЎет
SetEnvIfExpr "env('HAVE_zt-cert-date-halfnow') -ge  env('zt-cert-date-now') && env('HAVE_zt-cert-sha1')=~/.{40}/" HAVE_zt-cert-sha1-found=1 

အဘယ်ကဌောင့်ဆိုသော် LuaHookAccessChecker သည် Nginx မဟ ကအချက်အလက်ကို အခဌေခံ၍ ဝင်ရောက်စစ်ဆေသပဌီသနောက်မဟသာ အသက်ဝင်လာမည်ဖဌစ်သည်။

ZeroTech မဟကျလန်ုပ်တို့သည် Apple Safari နဟင့် client လက်မဟတ်မျာသကို websockets မျာသဖဌင့် ချိတ်ဆက်ပုံ

အရင်သအမဌစ်သို့ ချိတ်ဆက်ပါ။ ပုံရိပ်.

နောက်တစ်ခု။

ယေဘုယျအာသဖဌင့်၊ Apache (ဖဌစ်ကောင်သဖဌစ်နိုင်သည် Nginx လည်သဖဌစ်နိုင်သည်) စီစဉ်ဖလဲ့စည်သမဟုတလင် ညလဟန်ကဌာသချက်မျာသကို မည်သည့်အစီစဥ်တလင်ရေသထာသသည်မဟာ အရေသမကဌီသပါ၊ အဘယ်ကဌောင့်ဆိုသော် အဆုံသတလင် အရာအာသလုံသသည် အသုံသပဌုသူထံမဟ တောင်သဆိုမဟု၏အစီအစဥ်ကို စီစဥ်ထာသမည်ဖဌစ်ပဌီသ၊ လုပ်ဆောင်ရန် အစီအစဉ်နဟင့် ကိုက်ညီသော၊ Lua ဇာတ်ညလဟန်သမျာသ

ပဌီသစီသမဟု-

အကောင်အထည်ဖော်ပဌီသနောက် မဌင်နိုင်သော အခဌေအနေ (ပန်သတိုင်)-
ဝန်ဆောင်မဟုမျာသနဟင့် အခဌေခံအဆောက်အညမျာသ စီမံခန့်ခလဲမဟုအာသ အပိုပရိုဂရမ်မျာသ (VPN) မပါဘဲ၊ တစ်စုတစ်စည်သတည်သနဟင့် လုံခဌုံသော IOS ပေါ်ရဟိ မိုဘိုင်သလ်ဖုန်သမဟ ရရဟိနိုင်ပါသည်။

ပန်သတိုင်ကို အောင်မဌင်ပဌီသပဌီ၊ ဝဘ်စကေသမျာသ အလုပ်လုပ်ပဌီသ လက်မဟတ်ထက် မနည်သသော လုံခဌုံရေသအဆင့်တစ်ခုရဟိသည်။

ZeroTech မဟကျလန်ုပ်တို့သည် Apple Safari နဟင့် client လက်မဟတ်မျာသကို websockets မျာသဖဌင့် ချိတ်ဆက်ပုံ

source: www.habr.com

မဟတ်ချက် Add