Paano namin sa ZeroTech ikinonekta ang Apple Safari at mga certificate ng kliyente gamit ang mga websocket

Ang artikulo ay magiging kapaki-pakinabang sa mga taong:

  • alam kung ano ang Client Cert at nauunawaan kung bakit kailangan nito ng mga websocket sa mobile Safari;
  • Gusto kong mag-publish ng mga serbisyo sa web sa isang limitadong lupon ng mga tao o sa aking sarili lamang;
  • iniisip na ang lahat ay nagawa na ng isang tao, at nais na gawing mas maginhawa at mas ligtas ang mundo.

Ang kasaysayan ng mga websocket ay nagsimula mga 8 taon na ang nakakaraan. Noong nakaraan, ang mga pamamaraan ay ginamit sa anyo ng mga mahabang kahilingan sa http (talagang mga tugon): nagpadala ang browser ng gumagamit ng isang kahilingan sa server at naghintay na sumagot ito ng isang bagay, pagkatapos ng tugon ay kumonekta muli ito at naghintay. Ngunit pagkatapos ay lumitaw ang mga websocket.

Paano namin sa ZeroTech ikinonekta ang Apple Safari at mga certificate ng kliyente gamit ang mga websocket

Ilang taon na ang nakalipas, bumuo kami ng sarili naming pagpapatupad sa purong PHP, na hindi maaaring gumamit ng mga kahilingan sa https, dahil ito ang layer ng link. Hindi pa nagtagal, halos lahat ng web server ay natutong mag-proxy ng mga kahilingan sa https at suportahan ang connection:upgrade.

Nang mangyari ito, halos naging default na serbisyo ang mga websocket para sa mga application ng SPA, dahil gaano kaginhawang magbigay ng nilalaman sa user sa inisyatiba ng server (magpadala ng mensahe mula sa ibang user o mag-download ng bagong bersyon ng isang imahe, dokumento, presentasyon na kasalukuyang ini-edit ng ibang tao) .

Bagama't medyo matagal na ang Client Certificate, nananatili pa rin itong hindi gaanong suportado, dahil lumilikha ito ng maraming problema kapag sinusubukang i-bypass ito. At (posibleng :slightly_smiling_face: ) kaya ang mga browser ng IOS (lahat maliban sa Safari) ay ayaw itong gamitin at hilingin ito mula sa lokal na tindahan ng sertipiko. Ang mga sertipiko ay may maraming mga pakinabang kumpara sa pag-login/pass o ssh key o pagsasara ng mga kinakailangang port sa pamamagitan ng isang firewall. Ngunit hindi iyon ang tungkol dito.

Sa iOS, ang pamamaraan para sa pag-install ng isang sertipiko ay medyo simple (hindi walang mga detalye), ngunit sa pangkalahatan ito ay ginagawa ayon sa mga tagubilin, kung saan marami sa Internet at kung saan ay magagamit lamang para sa Safari browser. Sa kasamaang palad, hindi alam ng Safari kung paano gamitin ang Client Π‘ert para sa mga web socket, ngunit maraming mga tagubilin sa Internet kung paano lumikha ng naturang sertipiko, ngunit sa pagsasanay ito ay hindi matamo.

Paano namin sa ZeroTech ikinonekta ang Apple Safari at mga certificate ng kliyente gamit ang mga websocket

Upang maunawaan ang mga websocket, ginamit namin ang sumusunod na plano: problema/hypothesis/solusyon.

Problema: walang suporta para sa mga web socket kapag nag-proxy ng mga kahilingan sa mga mapagkukunan na protektado ng isang client certificate sa Safari mobile browser para sa IOS at iba pang mga application na pinagana ang suporta sa certificate.

Hypotheses:

  1. Posibleng i-configure ang naturang pagbubukod upang gumamit ng mga sertipiko (alam na wala) sa mga websocket ng panloob/panlabas na mga mapagkukunang proxied.
  2. Para sa mga websocket, maaari kang gumawa ng natatangi, secure at mapagtatanggol na koneksyon gamit ang mga pansamantalang session na nabuo sa panahon ng isang normal (hindi websocket) na kahilingan sa browser.
  3. Maaaring ipatupad ang mga pansamantalang session gamit ang isang proxy web server (mga built-in na module at function lang).
  4. Naipatupad na ang mga pansamantalang session token bilang mga nakahanda nang Apache module.
  5. Maaaring ipatupad ang mga pansamantalang session token sa pamamagitan ng lohikal na pagdidisenyo ng istruktura ng pakikipag-ugnayan.

Nakikitang estado pagkatapos ng pagpapatupad.

Layunin: ang pamamahala ng mga serbisyo at imprastraktura ay dapat ma-access mula sa isang mobile phone sa IOS nang walang karagdagang mga programa (tulad ng VPN), pinag-isa at secure.

Karagdagang layunin: makatipid ng oras at mga mapagkukunan/trapiko ng telepono (ilang mga serbisyo na walang mga web socket ay bumubuo ng mga hindi kinakailangang kahilingan) na may mas mabilis na paghahatid ng nilalaman sa mobile Internet.

Paano mag-check?

1. Pagbubukas ng mga pahina:

β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 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. O sa developer console:

Paano namin sa ZeroTech ikinonekta ang Apple Safari at mga certificate ng kliyente gamit ang mga websocket

Pagsusuri ng hypothesis:

1. Posibleng i-configure ang naturang exception para gumamit ng mga certificate (alam na wala) sa mga web socket ng internal/external na proxied na mapagkukunan.

2 solusyon ang natagpuan dito:

a) Sa antas

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

baguhin ang antas ng pag-access.

Ang pamamaraang ito ay may mga sumusunod na nuances:

  • Nagaganap ang pag-verify ng certificate pagkatapos ng isang kahilingan sa na-proxy na mapagkukunan, iyon ay, post request handshake. Ibig sabihin, maglo-load muna ang proxy at pagkatapos ay puputulin ang kahilingan sa protektadong serbisyo. Ito ay masama, ngunit hindi kritikal;
  • Sa http2 protocol. Nasa draft pa rin ito, at hindi alam ng mga manufacturer ng browser kung paano ito ipatupad #info tungkol sa tls1.3 http2 post handshake (hindi gumagana ngayon) Ipatupad ang RFC 8740 "Paggamit ng TLS 1.3 na may HTTP/2";
  • Hindi malinaw kung paano pag-isahin ang pagpoprosesong ito.

b) Sa isang pangunahing antas, payagan ang ssl nang walang sertipiko.

Kinakailangan ng SSLVerifyClient => SSLVerifyClient opsyonal, ngunit binabawasan nito ang antas ng seguridad ng proxy server, dahil ang naturang koneksyon ay ipoproseso nang walang sertipiko. Gayunpaman, maaari mong higit pang tanggihan ang pag-access sa mga proxied na serbisyo gamit ang sumusunod na direktiba:

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"

Ang mas detalyadong impormasyon ay matatagpuan sa artikulo tungkol sa ssl: Apache Server Client Certificate Authentication

Ang parehong mga pagpipilian ay sinubukan, ang opsyon na "b" ay pinili para sa kanyang kagalingan sa maraming bagay at pagiging tugma sa protocol ng http2.

Upang makumpleto ang pag-verify ng hypothesis na ito, tumagal ng maraming mga eksperimento sa pagsasaayos; ang mga sumusunod na disenyo ay sinubukan:

kung = nangangailangan = muling isulat

Ang resulta ay ang sumusunod na pangunahing disenyo:

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>

Isinasaalang-alang ang umiiral na awtorisasyon ng may-ari ng certificate, ngunit may nawawalang certificate, kinailangan kong magdagdag ng hindi umiiral na may-ari ng certificate sa anyo ng isa sa mga available na variable na SSl_PROTOCOL (sa halip na SSL_CLIENT_S_DN_CN), higit pang mga detalye sa dokumentasyon:

Apache Module mod_ssl

Paano namin sa ZeroTech ikinonekta ang Apple Safari at mga certificate ng kliyente gamit ang mga websocket

2. Para sa mga websocket, maaari kang gumawa ng natatangi, secure at protektadong koneksyon gamit ang mga pansamantalang session na nabuo sa panahon ng isang normal (hindi websocket) na kahilingan sa browser.

Batay sa nakaraang karanasan, kailangan mong magdagdag ng karagdagang seksyon sa configuration upang makapaghanda ng mga pansamantalang token para sa mga koneksyon sa web socket sa panahon ng isang regular na kahilingan (hindi web socket).

#ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сСбС Π‘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>

Ang pagsubok ay nagpakita na ito ay gumagana. Posibleng ilipat ang Cookies sa iyong sarili sa pamamagitan ng browser ng user.

3. Maaaring ipatupad ang mga pansamantalang session gamit ang isang proxy web server (mga built-in na module at function lamang).

Tulad ng nalaman namin kanina, ang Apache ay may napakaraming pangunahing pag-andar na nagbibigay-daan sa iyo upang lumikha ng mga kondisyong konstruksyon. Gayunpaman, kailangan namin ng paraan upang maprotektahan ang aming impormasyon habang ito ay nasa browser ng user, kaya itinatag namin kung ano ang iimbak at bakit, at kung anong mga built-in na function ang gagamitin namin:

  • Kailangan natin ng token na hindi madaling ma-decode.
  • Kailangan namin ng token na may laos na nakapaloob dito at ang kakayahang suriin ang pagkaluma sa server.
  • Kailangan namin ng token na iuugnay sa may-ari ng certificate.

Nangangailangan ito ng function ng hashing, asin, at petsa ng edad ng token. Batay sa dokumentasyon Mga expression sa Apache HTTP Server mayroon kaming lahat ng ito sa labas ng kahon sha1 at %{TIME}.

Ang resulta ay ang disenyong ito:

#Π½Π΅Ρ‚ сСртификата, ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ 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>

Naabot na ang layunin, ngunit may mga problema sa pagiging luma ng server (maaari kang gumamit ng isang taong gulang na Cookie), na nangangahulugang ang mga token, bagama't ligtas para sa panloob na paggamit, ay hindi ligtas para sa pang-industriya (mass) na paggamit.

Paano namin sa ZeroTech ikinonekta ang Apple Safari at mga certificate ng kliyente gamit ang mga websocket

4. Naipatupad na ang mga temporary session token bilang mga nakahanda nang Apache modules.

Isang makabuluhang problema ang nananatili mula sa nakaraang pag-ulit - ang kawalan ng kakayahang kontrolin ang pagtanda ng token.

Naghahanap kami ng isang handa na module na gumagawa nito, ayon sa mga salita: apache token json two factor auth

Oo, may mga nakahanda nang module, ngunit lahat sila ay nakatali sa mga partikular na aksyon at may mga artifact sa anyo ng pagsisimula ng isang session at karagdagang Cookies. Ibig sabihin, hindi saglit.
Inabot kami ng limang oras sa paghahanap, na hindi nagbigay ng konkretong resulta.

5. Maaaring ipatupad ang mga pansamantalang session token sa pamamagitan ng lohikal na pagdidisenyo ng istruktura ng mga pakikipag-ugnayan.

Masyadong kumplikado ang mga ready-made na module, dahil kailangan lang namin ng ilang function.

Iyon ay sinabi, ang problema sa petsa ay hindi pinapayagan ng mga built-in na function ng Apache ang pagbuo ng petsa mula sa hinaharap, at walang mathematical na pagdaragdag/pagbabawas sa mga built-in na function kapag sinusuri ang pagkaluma.

Iyon ay, hindi ka maaaring sumulat:

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

Dalawang numero lang ang maihahambing mo.

Habang naghahanap ng isang solusyon para sa problema sa Safari, nakakita ako ng isang kawili-wiling artikulo: Pag-secure ng HomeAssistant gamit ang mga certificate ng kliyente (gumagana sa Safari/iOS)
Inilalarawan nito ang isang halimbawa ng code sa Lua para sa Nginx, at kung saan, tulad ng nangyari, inuulit ang lohika ng bahaging iyon ng pagsasaayos na naipatupad na namin, maliban sa paggamit ng hmac salting method para sa pag-hash ( hindi ito natagpuan sa Apache).

Naging malinaw na ang Lua ay isang wika na may malinaw na lohika, at posible na gumawa ng isang bagay na simple para sa Apache:

Ang pagkakaroon ng pag-aaral ng pagkakaiba sa Nginx at Apache:

At magagamit na mga function mula sa tagagawa ng wikang Lua:
22.1 – Petsa at Oras

Nakakita kami ng paraan upang magtakda ng mga variable ng env sa isang maliit na file ng Lua upang magtakda ng petsa mula sa hinaharap upang ihambing sa kasalukuyan.

Ito ang hitsura ng isang simpleng script ng 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

At ito ay kung paano gumagana ang lahat sa kabuuan, na may pag-optimize ng bilang ng Cookies at pagpapalit ng token kapag dumating ang kalahati ng oras bago mag-expire ang lumang Cookie (token):

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 

Dahil ang LuaHookAccessChecker ay isaaktibo lamang pagkatapos ng mga pagsusuri sa pag-access batay sa impormasyong ito mula sa Nginx.

Paano namin sa ZeroTech ikinonekta ang Apple Safari at mga certificate ng kliyente gamit ang mga websocket

Link sa source Larawan.

Ang isa pang punto.

Sa pangkalahatan, hindi mahalaga kung anong pagkakasunud-sunod ang mga direktiba ay nakasulat sa Apache (marahil din ng Nginx) na pagsasaayos, dahil sa huli ang lahat ay pag-uuri-uriin batay sa pagkakasunud-sunod ng kahilingan mula sa gumagamit, na tumutugma sa pamamaraan para sa pagproseso. Mga script ng Lua.

Pagkumpleto:

Nakikitang estado pagkatapos ng pagpapatupad (layunin):
Ang pamamahala ng mga serbisyo at imprastraktura ay makukuha mula sa isang mobile phone sa IOS nang walang karagdagang mga programa (VPN), pinag-isa at secure.

Ang layunin ay nakamit, ang mga web socket ay gumagana at may antas ng seguridad na hindi bababa sa isang sertipiko.

Paano namin sa ZeroTech ikinonekta ang Apple Safari at mga certificate ng kliyente gamit ang mga websocket

Pinagmulan: www.habr.com

Magdagdag ng komento