Giunsa namo sa ZeroTech nga konektado ang Apple Safari ug mga sertipiko sa kliyente gamit ang mga websocket

Ang artikulo mahimong mapuslanon niadtong kinsa:

  • nahibal-an kung unsa ang Client Cert ug nakasabut kung nganong kinahanglan niini ang mga websocket sa mobile Safari;
  • Gusto nakong imantala ang mga serbisyo sa web ngadto sa limitado nga sirkulo sa mga tawo o sa akong kaugalingon lamang;
  • naghunahuna nga ang tanan nahimo na sa usa ka tawo, ug gusto nga himuon ang kalibutan nga labi ka dali ug luwas.

Ang kasaysayan sa mga websocket nagsugod mga 8 ka tuig na ang milabay. Kaniadto, ang mga pamaagi gigamit sa porma sa taas nga mga hangyo sa http (sa tinuud nga mga tubag): ang browser sa gumagamit nagpadala usa ka hangyo sa server ug naghulat nga kini motubag sa usa ka butang, pagkahuman sa tubag konektado kini pag-usab ug naghulat. Apan mitungha ang mga websocket.

Giunsa namo sa ZeroTech nga konektado ang Apple Safari ug mga sertipiko sa kliyente gamit ang mga websocket

Pipila ka tuig ang milabay, among gipalambo ang among kaugalingon nga pagpatuman sa lunsay nga PHP, nga dili magamit ang mga hangyo sa https, tungod kay kini ang link layer. Dili pa lang dugay, halos tanang web server nakakat-on sa proxy requests sa https ug pagsuporta sa connection:upgrade.

Kung kini nahitabo, ang mga websocket nahimong hapit ang default nga serbisyo alang sa mga aplikasyon sa SPA, tungod kay kung unsa kadali ang paghatag sulud sa tiggamit sa inisyatibo sa server (pagpadala usa ka mensahe gikan sa lain nga tiggamit o pag-download sa usa ka bag-ong bersyon sa usa ka imahe, dokumento, presentasyon. nga adunay lain nga nag-edit karon).

Bisan kung ang Sertipiko sa Kliyente dugay na nga naglungtad, kini nagpabilin nga dili kaayo suportado, tungod kay nagmugna kini daghang mga problema kung gisulayan kini nga laktawan. Ug (posible :slightly_smiling_face: ) mao nga ang mga browser sa IOS (tanan gawas sa Safari) dili gusto nga gamiton kini ug hangyoon kini gikan sa lokal nga tindahan sa sertipiko. Ang mga sertipiko adunay daghang mga bentaha kung itandi sa pag-login / pass o ssh nga mga yawe o pagsira sa kinahanglan nga mga pantalan pinaagi sa usa ka firewall. Apan dili kana mao ang mahitungod niini.

Sa iOS, ang pamaagi alang sa pag-instalar sa usa ka sertipiko yano ra (dili kung wala’y mga espesipiko), apan sa kinatibuk-an kini gihimo sumala sa mga panudlo, diin adunay daghan sa Internet ug nga magamit ra alang sa Safari browser. Ikasubo, ang Safari wala mahibal-an kung unsaon paggamit ang Client Π‘ert alang sa mga web socket, apan adunay daghang mga panudlo sa Internet kung giunsa paghimo ang ingon nga sertipiko, apan sa praktis kini dili makab-ot.

Giunsa namo sa ZeroTech nga konektado ang Apple Safari ug mga sertipiko sa kliyente gamit ang mga websocket

Aron masabtan ang mga websocket, among gigamit ang mosunod nga plano: problema / hypothesis / solusyon.

Problema: walay suporta alang sa mga web socket sa dihang ang pag-proxy sa mga hangyo ngadto sa mga kahinguhaan nga giprotektahan sa usa ka client certificate sa Safari mobile browser para sa IOS ug uban pang mga aplikasyon nga nakapahimo sa certificate support.

Mga pangagpas:

  1. Posible nga i-configure ang ingon nga eksepsiyon aron magamit ang mga sertipiko (nahibal-an nga wala) sa mga websocket sa internal/external nga proxied nga mga kapanguhaan.
  2. Para sa mga websocket, makahimo ka og usa ka talagsaon, luwas ug madepensahan nga koneksyon gamit ang temporaryo nga mga sesyon nga namugna atol sa usa ka normal (dili-websocket) nga hangyo sa browser.
  3. Ang temporaryo nga mga sesyon mahimong ipatuman gamit ang usa ka proxy web server (built-in modules ug functions lamang).
  4. Ang mga temporaryo nga mga token sa sesyon gipatuman na isip andam nga mga module sa Apache.
  5. Ang mga temporaryo nga mga token sa sesyon mahimong ipatuman pinaagi sa lohikal nga pagdesinyo sa istruktura sa interaksiyon.

Makita nga estado pagkahuman sa pagpatuman.

Tumong sa trabaho: pagdumala sa mga serbisyo ug imprastraktura kinahanglan nga ma-access gikan sa usa ka mobile phone sa IOS nga walay dugang nga mga programa (sama sa VPN), nahiusa ug luwas.

Dugang nga tumong: makadaginot sa oras ug mga kahinguhaan/trapiko sa telepono (pipila ka mga serbisyo nga walay mga web socket makamugna og dili kinahanglan nga mga hangyo) uban sa mas paspas nga paghatod sa sulod sa mobile Internet.

Giunsa pagsusi?

1. Pangbukas nga mga panid:

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

Giunsa namo sa ZeroTech nga konektado ang Apple Safari ug mga sertipiko sa kliyente gamit ang mga websocket

Pagsulay sa hypothesis:

1. Posible nga i-configure ang ingon nga eksepsiyon aron magamit ang mga sertipiko (nahibal-an nga wala) sa mga socket sa web sa internal/external nga proxied nga mga kapanguhaan.

2 ka solusyon ang nakit-an dinhi:

a) Sa lebel

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

usba ang lebel sa pag-access.

Kini nga pamaagi adunay mga mosunod nga mga nuances:

  • Ang pag-verify sa sertipiko mahitabo pagkahuman sa usa ka hangyo sa gi-proxy nga kapanguhaan, kana mao, pag-post sa paghangyo sa handshake. Kini nagpasabot nga ang proxy una nga mag-load ug dayon putlon ang hangyo sa gipanalipdan nga serbisyo. Kini daotan, apan dili kritikal;
  • Sa http2 protocol. Naa pa kini sa draft, ug ang mga tiggama sa browser wala mahibal-an kung giunsa kini ipatuman #info bahin sa tls1.3 http2 post handshake (dili na nagtrabaho karon) Ipatuman ang RFC 8740 "Using TLS 1.3 with HTTP/2";
  • Dili klaro kung giunsa paghiusa kini nga pagproseso.

b) Sa sukaranan nga lebel, tugoti ang ssl nga wala’y sertipiko.

Gikinahanglan ang SSLVerifyClient => SSLVerifyClient opsyonal, apan kini makapamenos sa lebel sa seguridad sa proxy server, tungod kay ang maong koneksyon maproseso nga walay sertipiko. Bisan pa, mahimo nimong ipanghimakak ang pag-access sa mga proxy nga serbisyo gamit ang mosunud nga 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 detalyado nga impormasyon makita sa artikulo bahin sa ssl: Apache Server Client Certificate Authentication

Ang duha ka mga kapilian gisulayan, ang opsyon nga "b" gipili alang sa iyang versatility ug compatibility sa http2 protocol.

Aron makompleto ang pag-verify sa kini nga hypothesis, nanginahanglan daghang mga eksperimento sa pag-configure; ang mga musunud nga disenyo gisulayan:

kung = gikinahanglan = pagsulat pag-usab

Ang resulta mao ang mosunod nga batakang 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>

Gikonsiderar ang naglungtad nga pagtugot sa tag-iya sa sertipiko, apan sa usa ka nawala nga sertipiko, kinahanglan nako nga idugang ang usa ka wala nga tag-iya sa sertipiko sa porma sa usa sa mga magamit nga variable SSl_PROTOCOL (imbes nga SSL_CLIENT_S_DN_CN), daghang mga detalye sa dokumentasyon:

Apache Module mod_ssl

Giunsa namo sa ZeroTech nga konektado ang Apple Safari ug mga sertipiko sa kliyente gamit ang mga websocket

2. Para sa mga websocket, makahimo ka og usa ka talagsaon, luwas ug giprotektahan nga koneksyon gamit ang temporaryo nga mga sesyon nga namugna atol sa usa ka normal (non-websocket) nga hangyo sa browser.

Base sa nangaging kasinatian, kinahanglan nimong idugang ang dugang nga seksyon sa configuration aron makaandam og temporaryo nga mga token para sa mga koneksyon sa web socket atol sa regular (non-web socket) nga hangyo.

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

Gipakita sa pagsulay nga kini molihok. Posible nga ibalhin ang Cookies sa imong kaugalingon pinaagi sa browser sa user.

3. Ang temporaryo nga mga sesyon mahimong ipatuman gamit ang usa ka proxy web server (mga built-in nga modules ug functions lamang).

Sama sa among nahibal-an sa sayo pa, ang Apache adunay daghang mga core functionality nga nagtugot kanimo sa paghimo og mga conditional constructs. Bisan pa, nanginahanglan kami mga paagi aron mapanalipdan ang among kasayuran samtang naa kini sa browser sa gumagamit, mao nga among i-establisar kung unsa ang tipigan ug ngano, ug unsa nga mga built-in nga function ang among gamiton:

  • Kinahanglan namon ang usa ka timaan nga dili dali ma-decode.
  • Nagkinahanglan kami og usa ka timaan nga adunay obsolescence nga gitukod niini ug ang abilidad sa pagsusi sa obsolescence sa server.
  • Kinahanglan namon ang usa ka token nga adunay kalabotan sa tag-iya sa sertipiko.

Nagkinahanglan kini og function sa hashing, asin, ug petsa sa edad sa token. Base sa dokumentasyon Mga ekspresyon sa Apache HTTP Server naa na namo ang tanan gikan sa kahon sha1 ug %{TIME}.

Ang resulta mao kini nga disenyo:

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

Ang tumong nakab-ot, apan adunay mga problema sa server obsolescence (mahimo nimong gamiton ang usa ka tuig nga Cookie), nga nagpasabot nga ang mga token, bisan tuod luwas alang sa internal nga paggamit, dili luwas alang sa industriyal (masa) nga paggamit.

Giunsa namo sa ZeroTech nga konektado ang Apple Safari ug mga sertipiko sa kliyente gamit ang mga websocket

4. Ang mga temporaryo nga mga token sa sesyon gipatuman na isip andam nga mga module sa Apache.

Usa ka hinungdanon nga problema ang nagpabilin gikan sa miaging pag-uli - ang kawalay katakus sa pagpugong sa pagkatigulang sa timaan.

Nangita kami og andam nga module nga naghimo niini, sumala sa mga pulong: apache token json two factor auth

Oo, adunay andam nga mga module, apan silang tanan nahigot sa piho nga mga aksyon ug adunay mga artifact sa porma sa pagsugod sa usa ka sesyon ug dugang nga Cookies. Sa ato pa, dili sa makadiyot.
Nagkinahanglan kami og lima ka oras sa pagpangita, nga wala maghatag og konkretong resulta.

5. Ang temporaryo nga mga token sa sesyon mahimong ipatuman pinaagi sa lohikal nga pagdesinyo sa istruktura sa mga interaksyon.

Ang mga andam nga mga module labi ka komplikado, tungod kay kinahanglan ra naton ang duha nga mga gimbuhaton.

Ingon niana, ang problema sa petsa mao nga ang mga built-in nga function sa Apache wala magtugot sa pagmugna og petsa gikan sa umaabot, ug walay mathematical nga pagdugang/pagkuha sa mga built-in nga mga function kung susihon kung wala na.

Sa ato pa, dili ka makasulat:

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

Mahimo ra nimo itandi ang duha ka numero.

Samtang nangita usa ka solusyon alang sa problema sa Safari, nakit-an nako ang usa ka makapaikag nga artikulo: Pagsiguro sa HomeAssistant nga adunay mga sertipiko sa kliyente (nagtrabaho sa Safari/iOS)
Gihubit niini ang usa ka pananglitan sa code sa Lua alang sa Nginx, ug nga, ingon nga kini nahimo, gisubli kaayo ang lohika sa kana nga bahin sa pag-configure nga among gipatuman, gawas sa paggamit sa hmac salting nga pamaagi alang sa pag-hash ( wala kini makita sa Apache).

Nahimong tin-aw nga ang Lua usa ka lengguwahe nga adunay klaro nga lohika, ug posible nga buhaton ang usa ka yano nga butang alang sa Apache:

Natun-an ang kalainan sa Nginx ug Apache:

Ug magamit nga mga gimbuhaton gikan sa tiggama sa pinulongang Lua:
22.1 – Petsa ug Oras

Nakakita mi ug paagi para magbutang ug env variables sa gamay nga Lua file para makabutang ug petsa gikan sa umaabot nga ikumpara sa karon.

Kini ang hitsura sa usa ka yano nga script sa 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

Ug ingon niini kung giunsa kini tanan molihok sa kinatibuk-an, uban ang pag-optimize sa gidaghanon sa mga Cookies ug pag-ilis sa token kung ang katunga sa oras moabut sa wala pa matapos ang daan nga 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 

Tungod kay ang LuaHookAccessChecker ma-aktibo ra pagkahuman sa mga pagsusi sa pag-access base sa kini nga kasayuran gikan sa Nginx.

Giunsa namo sa ZeroTech nga konektado ang Apple Safari ug mga sertipiko sa kliyente gamit ang mga websocket

Link sa tinubdan larawan.

Usa pa ka butang.

Sa kinatibuk-an, dili igsapayan kung unsa nga pagkasunud-sunod ang mga direktiba gisulat sa Apache (tingali usab Nginx) nga pag-configure, tungod kay sa katapusan ang tanan masunud base sa han-ay sa hangyo gikan sa tiggamit, nga katumbas sa laraw sa pagproseso. Mga script sa Lua.

Pagkompleto:

Makita nga kahimtang pagkahuman sa pagpatuman (tumong):
Ang pagdumala sa mga serbisyo ug imprastraktura magamit gikan sa usa ka mobile phone sa IOS nga wala’y dugang nga mga programa (VPN), nahiusa ug luwas.

Nakab-ot na ang tumong, nagtrabaho ang mga web socket ug adunay lebel sa seguridad nga dili moubos sa usa ka sertipiko.

Giunsa namo sa ZeroTech nga konektado ang Apple Safari ug mga sertipiko sa kliyente gamit ang mga websocket

Source: www.habr.com

Idugang sa usa ka comment