áœáá ááášá°áá á áá áááá-
- Client Cert áá á¥áá°áá á«ááá á¥á ááá á áá£áá Safari áá áá¥á¶á¬á¶áœ á¥áá°áá«áµáááá ááááá£á;
- ášáµá á ááááá¶áœá áá°áá°á ášá°áᜠáá ᥠááá áá«áŽ á¥á» áá°á á¥áááááá¢
- ááá ááá á áµááµá á á ááµ á°á á¥áá°á°á°á« á«áµá£á á¥á áááá áµáᜠášá áá áá¹ á¥á á°á ááá± ášá°á á á áááµášá áááááá¢
ášáá¥á¶á¬á¶áœ á³áªá ášááášá áš 8 ááá³áµ á ááµ áá. ášáá
áá°á ááŽáᜠá ášá
á http á¥á«ááᜠááá á¥á
á áá ááá áá á (á á¥ááá± áááŸáœ): ášá°á ááá á á³áœ áá° á áááá© á¥á«á áá® á ááµ ááá á¥áá²áááµ á á áá, ášááá± á áá á¥áá°áá á°áááᶠá á á. áá ášáá« á áá áá¥á¶á¬á¶áœ á³á©á¢
ášá¥ááµ á áá³áµ á ááµá£ áá
ášáááá áá¥áá¥á áµááá áš https á¥á«áááœá áá áá á áááœáá ášá«á³áœáá áµáá á« á áá¹á
áá€áœá á ááá
á°ááᢠá¥áá á³áááᣠááá áááµ áá»áá ášáµá á áááá®áœ á https áá ášá°áª á¥á«áááœá á¥á ášáµáá áááááµá: áá»á»áá á°áášááá¢
áá á áááá áµ áá áá¥á¶á¬á¶áœ á SPA á ááá¬áœáᜠáá£áª á áááááµ áááá ᣠáááá«á±á á á áááá© á°áá³áœááµ áááµá áá°á ááá ááá ášá¥ áá á«á á áá¹ áá (ášáá á°á áá ááá¥ááµ ááµá°ááá ááá á á²áµ ášááµá ᣠášá°áᵠᣠášááá áµ á áá«ášá¥ áµáªáµ á«ááá±) áá á°á á á áá áá á ááµááµ á¥á«á°ášá áá) .
ááá á¥áá³á ášá°áá á á°áá°áá¬áµ áášá á áá ášááš á¢áááᣠá¥á±á áááá á¥á áœáá®áœá áµáááá¥á á ááá á á¥á© ááá³ á áá°á°áááᢠá¥á (áááá£áµá :slightly_smiling_face:) ááá áá IOS á á³áŸáœ (ášá³á᪠á áµá°áá) áá ááá áµ ášááááááµ á¥á ášá á«á£á¢á ášááµáá áášááµ áášáá» áá áááµá¢ ášááµáá áášáá¶áœ ášááá¢á«/áááá« ááá ssh áááᜠááá á áµááá ášáááµá áá°áŠáœ á áášááá ášááááµ áá á²áááá© á¥á á¥á áᜠá áážáᢠááá áá áá áµá á¥á± á áá°áá.
á iOS áá ášááµáá áášááµ ášáá«á áá°á± á á£á ááá áá (á«á áááá áááá«áᜠá áá°áá), ááá áá á á á ááá á áááªá«á áá°ášáµ áášáááá, ášá¥ááá ááµá¥ á¥á á áááášá¥ áá á¥á áá³á᪠á á³áœ á¥á» ášááá áážá. á¥áá° á ááá³á°á áá á³á᪠Client Cert á ááµá á¶á¬á¶áœ á¥ááŽáµ á¥áá°áá áá á á«áá á ᣠáá á á áááášá¥ áá á¥áá°áá á«á ášááµáá áášááµ á¥ááŽáµ ááá á á¥áá°ááœá á¥á áááªá«áᜠá á ᣠáá á á°áá£á áá áá°ášáµá áµ ášáááœá ááá¢
áá¥á¶á¬á¶áœá ááášá³áµ ášáášá°ááá á¥á
áµ á°á áááᢠáœáá / ááááµ / áááµá.
áœáá: á Safari áá£áá á á³áœ áá ááŠá€áµ á¥á ááᜠášá¥áá á áášááá« áµáá áá°ášá á ááá¬áœáᜠá á°áá á á°áá°áá¬áµ áá°á á á áá¥á á¶áœ á¥á«áá á²á°á¡ ááµá á¶á¬á¶áœ ááá áµáá ášááá¢
áááá¶áœá¡-
- á°áá°áá¬á¶áœá (ááá á¥áá°áááá á ááá ) ášááµá¥/áá«á á°áª áá¥á¶áœ áá¥á¶á¬á¶áœá ááá áá á¥áá²á á«ááá áá© ááá³ áááá áá»ááá¢
- ááá¥á¶á¬á¶áœ á áá°á á (ášáá¥á¶á¬áµ á«ááá) á á³áœ á áá áá áá ášááá á© ááá«á ááá ááááœá á áá áá áá©á£ á°á ááá± ášá°á á á á¥á á°ášáá«á áááááµ ááá á ááœááá¢
- ááá«á ááá áááᜠá ááµ á°áª ášáµá á áááá (á á¥á®ááᥠáááᜠá¥á á°áá£á«áµ á¥á») á áá áá áá°áá á ááœááá¢
- ááá«á ášááá áá á¶ášáᜠá¥áá° ááá-ášá°á°á© Apache áááᜠá°á°áá¥ášááá¢
- ášááááá±á ááá á á áááá® á ááá°á ááá«á ášááá áá á¶ášáᜠáá°áá á© ááœááá¢
ášáµáá á« á áá ášáá³á ááá³.
ášá¥á«á ááá; ášá ááááá¶áœ á¥á áá ášá° áááµ á áµá°á³á°á ášáá£áá áµáá á 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. ááá á ááᢠá®áá¶á ááµá¥á¡-
ášááááµ áášá«á¡-
1. ášááµáá áášáá¶áœá ááá áá (ááá á¥áá°áááá á ááá ) ášááµá¥ / ášáá áá®áá²áµ áá¥á¶áœá áá° áᥠá¶á¬á¶áœ ááá áá á¥áá²á á«ááá áá© ááá³ áááá áá»áá.
2 áááµááᜠá¥áá á°ááá°áá:
á) á á°ášá
<Location sock*> SSLVerifyClient optional </Location>
<Location /> SSLVerifyClient require </Location>
ášáá³ášá» á°ášáá áááá©.
áá áᎠášáášá°ááµá á¥áá á ááá®áœ á ááµ.
- ášááµáá áášááµ áášááᥠášáášá°á°á áá°áªá ááá ášá°á ášá á áá ááᣠáááµáᣠášáµá áš á¥á«á á¥á áášá£á á¥á¢ áá áááµ áá®áá²á ááááªá« áá«áá á¥á ášáá« áá° ášá°á á áá á áááááµ á¥á«ááá á«ááá£á áááµ ááᢠáá áá¥á áá, ááá áá áá³á á áá°áá;
- á http2 áá®á¶á®á ááµá¥á¢ á ááá á ášáá
áá ááᣠá¥á ášá á³áœ á áá«áŸáœ á¥ááŽáµ á¥áá°áá°áá¥á©áµ á á«ááá #áášá áµá tls1.3 http2 ááµáµ áášá£á ᥠ(á áá á¥ášá°á« á áá°áá)
RFC 8740á á°áá¥á "TLS 1.3 á HTTP/2 á áá áá" ; - áá áá áá°áµ á¥ááŽáµ á ááµ ááµášá á¥áá°áá»á ááᜠá áá°áá.
á) á áá ášá³á á°ášá, ssl á«á ášááµáá áášááµ áááµ.
SSLVerifyClient áá ááá => SSLVerifyClient á áá«á ááá£ááá áá áá ášá°áª á áááá©á ášá°á áááµ á°ášá áááá³áá£áá áááá± áááááµ á«á á°áá°áá¬áµ áµááá«ááµ ááᢠáááᣠá áášá°áá áááªá« á°ášá᪠ášá°áª á ááááá¶áœá áá³ášá» áášáášá áµáœááá á¡-
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 á ááá áœáá ááµá¥ ášá áá áááá áášá ááááµ áá»áá-
ááá±á á áá«á®áœ á°ááµáááᣠá áá«á "á" ášá°áášá á áááá¥áá± á¥á áš http2 áá®á¶á®á áá á£áá á°á³ááááµ ááá¢
ášáá á ááááµ áášááá« ááá ááá ᣠá áááá© áá á¥á áášá«ááœá ááµá·áဠášáášá°ááµ ááµáᜠá°ááµáááá¡-
ášáá = á°ááá = á¥áá°áá ááá
áá€á±á ášáášá°áá áá°ášá³á ááµá áá.
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>
á á¥áá á áášááá«á á£áá€áµ á«ááá áááµ ášáááµ ááµá¥ á ááµáá£áµá£ ááá áá ášáá°á ášááµáá áášááµ á«áᣠášá€áµá€áµá€á_PROTOCOL á°áááá (ášSSL_CLIENT_S_DN_CN ááá )ᣠá á°áá± ááµá¥ á«á á°ášá᪠áááá®áœáᣠášáá ášááµáá áášááµ á£áá€áµ áášá áá ášá¥áá¡-
2. ááá¥á¶á¬á¶áœ á áá°á á (ášáá¥á¶á¬áµ á«ááá) á á³áœ á áá áá áá ášááá á© ááá«á ááá ááááœá á áá áá áá©á£ á°á
ááá± ášá°á á á á¥á ášá°á á á áááááµ ááá á ááœááá¢
á ááµáá áááµ áá á áááµášáµ á áá°á á (ášáµá-á«ááá á¶á¬áµ) á¥á«á áá ááµá á¶á¬áµ ááááá¶áœ ááá«á áááá¶áœá ááááááµ áá á© áá á°ášá᪠ááá áášá á«áµááááá³áá¢
#пПЎгПÑПвка пеÑеЎаÑа Ñебе С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>
áášá«á á¥áá°áá°á« á á³áá·áᢠá á°á ááá á á³áœ á á©á á©áªááœá áá° á¥á«áµá ááµá°ááá áá»áá.
3. ááá«á ááá áááᜠá ááµ á°áª áᥠá áááá (á á¥á®ááᥠáááᜠá¥á á°áá£á«áµ á¥á») á áá áá áá°áá á© ááœáá.
áá°á á¥áá á¥áá³ášáá Apache ááá³á ááá£á³ááœá á¥áá²áá¥á© ášáá«áµáœáá á á£á á¥á áá á°áá£á«áµ á ááµá¢ ááá ááᣠáášááœá á á°á ááá á á³áœ ááµá¥ á¥á«á ááá á á áᎠá¥ááááááᣠáµááá áá á¥á ááá á¥áá°ááášáᜠá¥á áá á áááµ á á¥á® ášá°á°á© á°áá£á«áµá á¥áá°ááá áá á¥ááááááá¡
- á ááá ááá³ ášáááœá á¶ášá á¥ááááááá¢
- á ááµá¡ á á¥á® ášá°á°á«á áá á«ááá áµ á¥á á á áááá© áá áá á«ááá áµá ášááá°áœ áœáá³ á«áá á¶ášá á¥ááááááá¢
- ášááµáá áášáá± á£áá€áµ áá ášáááá á¶ášá á¥ááááááá¢
áá
ááµáá°á«áá ááášá
ášááºáá á°áá£áᣠášá á¥á áá á«áµáááááᢠá á°áá± áá°ášáµ
áá€á±á áá ááµá áá á-
#ÐœÐµÑ ÑеÑÑОÑОкаÑа, О ПбÑаÑеМОе к 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>
áá¡ á°á³áá·á, ááá áá á á áááá áá á«ááá áµ áá áœáá®áœ á á (á ááµ á ááµ á©áªá áá áá ááœáá), áá áááµ á¶ášáᜠááá á¥áá³á áááµá£á á á ááá ááá á¥áá³á á°á ááá³ážá ášá°á á á á¢ááá, áá¢áá±áµáµáª (á áá) á á ááá á°á ááá± á«áá°á á á áá.
4. ááá«á ášááá áá á¶ášáᜠá¥áá° ááá-ášá°á°á© Apache áááᜠá°á°áá¥ášááá¢
ášáá³áá áµáááᜠá ááµ ááá áœáá ááá·á - ááµáá°á« á¥áá áá ááá£á á á ááá»áá¢
á áááµ áá°ášáµ áá á ášáá«á°áá ááá ášáá ááá á¥ášáááá ááá¡ apache token json two factor auth
á JSON áµá á¶ášáᜠáá ášá°áá ášá° ááµáá°á« á áá áá ášá°áá á áášááᥠApache á£ááááµ-ááá°á (2FA) áášááá« áá° Apache á£ááááµ á°ášá áášááá«á á¥ááŽáµ áášá á¥áá°áá»á á£á áááµ á°ášá áášááá«á á ááá ááá á áá«á áá° Apache áá³áá á«áá¡
á á, ááá ášáá áááᜠá á, ááá áá ááá ášá°áá°á áµááá¶áœ áá ášá°á³á°á© á¥á á ááµ ááá áá á¥á á°ášá᪠á©áªááœá á áááá ááá á
áá¶áœ á áážá. áá°áá°á áá á áá°áá áááµ ááá¢
ááááá á ááµáµ á°ááµ áá
á¶á¥ááᣠáá
á á°ášá£á áá€áµ á ááµáááá¢
5. ášááááá¶áœá ááá á á áááá® á ááá°á ááá«á ášááá áá á¶ášáᜠáá°áá á© ááœáá.
ááá ášáá áááᜠá á£á ááµá¥áµá¥ áážá, áááá«á±á á¥á ášáááááá áááµ á°áá£á«áµ á¥á» áá.
áá á á°á£áá ááᣠášááá áœáá ášApache á á¥á®ááᥠá°áá£á«áµ ášáá°áá± áá áááášáµá ášáááá á± áááážá ááᣠá¥á á á¥á®ááᥠá°áá£á«áµ áá á«ááá áµá áá á²ááµá¹ ááá ášáá³á¥ áá°áá/ááááµ ášááá¢
áááµáá¡ áá»á á ááœááá¡-
(%{env:zt-cert-date} + 30) > %{DATE}
áááµ áá¥á®áœá á¥á» ááá³á°á ááœáá.
áá³á᪠áœáá áááµá ááá áá á³áá á ááµ á áµá°á³áœ áá£á¥á á áááá¡-
á¥á± á áá á Nginx ááµá¥ á«ááá á®áµ áá³á ááááá ᣠá¥á á¥áá° á°ááá ᣠáá°á á²á ášá°á°áá áááá ášáá
á ááá á áááá® á á£á áá°ááá ᣠᚠhmac ášášá ááŽá ááᜠášáá áá á áµá°áá () áá
á Apache ááµá¥ á áá°ááá)á¢
áá ááᜠášáá á áááá® á«áá ááá á¥áá°áá ááᜠááᣠá¥á á Apache ááá ááá ááµášá áá»ááá¡-
áš Nginx á¥á Apache áá á«ááá áá©ááµ á áá¥ááµ-
á¥á ášáá ááá á áá«áœ ášááá á°áá£á«áµá¡-
ášá áá áá áááááá ášáá°áá± áá áááá°á á áµáᜠášáá ááá ááµá¥ env á°áááá®áœá ášááááá á áµ ááááµ á ááá°ááá¢
ááá ášáá áµááªááµ áá á áááµááá¡-
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
á¥á ášáµá®á á©áª (ááµáá°á«) ášáá¥áá± á ááµ ááᜠááá á²á°ááµ ášá©áªááœá á¥ááµ á áá»á»á á¥á áááá±á á áá°á«áµ ááá ááá á á á ááá á¥ááŽáµ á¥áá°áá°á« áá áá á¢
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 áášá áá°ášáµ ášáá³ášá» áá°á»áᜠášá°á°ášá á áá á¥á» ááá¢
áá° ááá á ááá
á ááµ á°ášá᪠ááá.
á á á ááá ᣠáááªá«áá¹ á Apache (áááá£áµá Nginx) áá á ááµá¥ á áá á áááµ á á°á á°ášá°á á¥áá°á°áá ááá ááᥠášááá ᣠáááá«á±á á áášášá» ááá ááá á á°á ááá ášáášá áá á¥á«á á á°á á°ášá°á áá á áááá®á áá°ášá°á«á ᣠáá á ášáá°á± á¥á áµ áá áááá³áᢠášáá áµááªáá¶áœá¢
áá ááá á¡
ášáµáá á« á áá ášáá³á ááá³ (áá¥)
ášá ááááá¶áœ á¥á áá ášá° áááµ á áµá°á³á°á á«á á°ášá᪠áá®áá«áᜠ(áªáá€á) ᣠášá°ááá° á¥á á°á
ááá± ášá°á á á ášáá£áá áµáá á IOS ááááá¢
áá¡ á°á³áá·á, ášáᥠá¶á¬á¶áœ áá á«á á¥á ášá°áá²áá¬áµ á«ááá° ášá°á áááµ á°ášá á áážá.
ááá: hab.com