แกแขแแขแแ แกแแกแแ แแแแแ แแฅแแแแ แแแแแแแก, แแแแช:
- แแชแแก แ แ แแ แแก Client Cert แแ แแกแแแก, แ แแขแแ แกแญแแ แแแแ แแแก แแแแกแแแแขแแแ แแแแแแฃแ แ Safari-แแ;
- แแกแฃแ แก แแแ แกแแ แแแกแแแแก แแแแแฅแแแงแแแแ แแแแแแแแแ แจแแแฆแฃแแฃแ แฌแ แแแ แแ แแฎแแแแ แกแแแฃแแแ แแแแก;
- แคแแฅแ แแแก, แ แแ แงแแแแแคแแ แ แฃแแแ แแแแแแแแฃแแแ แแแฆแแชแแก แแแแ แแ แกแฃแ แก แกแแแงแแ แ แชแแขแ แฃแคแ แ แแแกแแฎแแ แฎแแแแแ แแ แฃแกแแคแ แแฎแ แแแฎแแแแก.
แแแแกแแแแขแแแแก แแกแขแแ แแ แแแแฎแแแแแแ 8 แฌแแแก แฌแแ แแแแฌแงแ. แแแ แ แแแแแแงแแแแแแแ แแกแแแ แแแแแแแแ, แ แแแแ แแชแแ แแ แซแแแ http แแแแฎแแแแแแ (แ แแแแฃแ แแ แแแกแฃแฎแแแ): แแแแฎแแแ แแแแแก แแ แแฃแแแ แ แฃแแแแแแแแ แแแแฎแแแแแก แกแแ แแแ แก แแ แแแแแ แแแก แแแกแฃแฎแก, แแแกแฃแฎแแก แจแแแแแ แแกแแ แแแฃแแแแจแแ แแ แแ แแแแแแแ. แแแแ แแ แจแแแแแ แแแแแฉแแแ แแแแกแแแแขแแแ.
แ แแแแแแแแ แฌแแแก แฌแแ แฉแแแ แจแแแแแฃแจแแแแ แฉแแแแ แกแแแฃแแแ แ แแแแแแแแแขแแชแแ แกแฃแคแแ PHP-แจแ, แ แแแแแแช แแแ แแงแแแแแก https แแแแฎแแแแแแก, แ แแแแแ แแก แแ แแก แแแฃแแแก แคแแแ. แแ แช แแกแ แแแแ แฎแแแก แฌแแ, แแแแฅแแแก แงแแแแ แแแ แกแแ แแแ แแ แแกแฌแแแแ แแแ แแแแแขแฃแแ แแแแฎแแแแแแ https-แแ แแ แแฎแแ แแแญแแ แ แแแแจแแ แ: แแแแแฎแแแแ.
แ แแแแกแแช แแก แแแฎแแ, แแแแกแแแแขแแแ แแแฎแแ แแแแฅแแแก แแแแฃแแแกแฎแแแแ แกแแ แแแกแ SPA แแแแแแแชแแแแแกแแแแก, แ แแแแแ แ แแแแแแแ แแแกแแฎแแ แฎแแแแแแ แแแแฎแแแ แแแแแกแแแแก แจแแแแแ แกแแก แแแฌแแแแแ แกแแ แแแ แแก แแแแชแแแขแแแแ (แแแกแแฏแแก แแแแแชแแแ แกแฎแแ แแแแฎแแแ แแแแแกแแแ แแ แฉแแแแขแแแ แแแ แกแฃแ แแแแก, แแแแฃแแแแขแแก, แแ แแแแแขแแชแแแก แแฎแแแ แแแ แกแแ. แ แแแแแกแแช แกแฎแแ แแแแแแแ แแ แแแแฅแขแแ แแแก) .
แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแแแแแขแแก แกแแ แแแคแแแแขแ แกแแแแแแ แแแแ แฎแแแแ แแ แกแแแแแก, แแก แแแแแช แชแฃแแแ แแ แแก แแฎแแ แแแญแแ แแแ, แ แแแแแ แฃแแแ แแ แแ แแแแแแแก แฅแแแแก แแแก แแแแ แแแก แแแแแ. แแ (แจแแกแแซแแแ :slightly_smiling_face: ) แแแแขแแ IOS แแ แแฃแแแ แแแก (แงแแแแ Safari-แก แแแ แแ) แแ แกแฃแ แ แแแกแ แแแแแงแแแแแ แแ แแแแแฎแแแแ แแแแแแแแ แแแ แกแแ แขแแคแแแแขแแแแก แแแฆแแแแแแแ. แกแแ แแแคแแแแขแแแก แแแแ แ แฃแแแ แแขแแกแแแ แแฅแแ แจแแกแแแแก/แแแแแแก แแ ssh แแแแแแจแแแแแ แแ แกแแญแแ แ แแแ แขแแแแก แแแฎแฃแ แแแกแแแ แจแแแแ แแแแ Firewall-แแก แกแแจแฃแแแแแแ. แแแแ แแ แแก แแ แแ แแก แแก, แ แแช แแฎแแแ.
iOS-แแ แกแแ แแแคแแแแขแแก แแแงแแแแแแก แแ แแชแแแฃแ แ แกแแแแแแ แแแ แขแแแแ (แแแแแ แแขแแแแก แแแ แแจแ แแ แแ แแก), แแแแ แแ แแแแแแแ แแก แแแแแแแ แแแกแขแ แฃแฅแชแแแแแก แแแฎแแแแแ, แ แแแแแแแแแ แแแแ แแ แแแขแแ แแแขแจแ แแ แ แแแแแแช แฎแแแแแกแแฌแแแแแแ แแฎแแแแ Safari แแ แแฃแแแ แแกแแแแก. แกแแแฌแฃแฎแแ แแ, Safari-แ แแ แแชแแก แ แแแแ แแแแแแงแแแแก Client ะกert แแแ-แกแแแแขแแแแกแแแแก, แแแแ แแ แแแขแแ แแแขแจแ แแ แแก แแ แแแแแ แแแกแขแ แฃแฅแชแแ, แแฃ แ แแแแ แฃแแแ แจแแฅแแแแ แแกแแแ แกแแ แขแแคแแแแขแ, แแแแ แแ แแ แแฅแขแแแแจแ แแก แแแฃแฆแฌแแแแแแ.
แแแแกแแแแขแแแแก แแแกแแแแแแ, แฉแแแ แแแแแแแงแแแแ แจแแแแแแ แแแแแ: แแ แแแแแแ/แฐแแแแแแแ/แแแแแฌแงแแแขแ.
แแ แแแแแแ: แแ แแ แกแแแแแก แแแ-แกแแแแขแแแแก แแฎแแ แแแญแแ แ แ แแกแฃแ แกแแแแ แแแแฎแแแแแแแก แแ แแฅแกแแ แแแแกแแก, แ แแแแแแแช แแแชแฃแแแ แแแแแแขแแก แกแแ แแแคแแแแขแแ Safari แแแแแแฃแ แ แแ แแฃแแแ แจแ IOS-แแกแแแแก แแ แกแฎแแ แแแแแแแชแแแแแกแแแแก, แ แแแแแแกแแช แแฅแแ แกแแ แแแคแแแแขแแก แแฎแแ แแแญแแ แ.
แฐแแแแแแแแแ:
- แจแแกแแซแแแแแแแ แแกแแแ แแแแแแแแแแกแแก แแแแคแแแฃแ แแชแแ, แ แแแ แแแแแแงแแแแก แกแแ แแแคแแแแขแแแ (แแแชแแแแ, แ แแ แแ แแฅแแแแ) แจแแแ/แแแ แ แแ แแฅแกแแฃแแ แ แแกแฃแ แกแแแแก แแแแกแแแแขแแแจแ.
- แแแแกแแแแขแแแแกแแแแก แจแแแแซแแแแ แจแแฅแแแแ แฃแแแแแแฃแ แ, แฃแกแแคแ แแฎแ แแ แแแชแฃแแ แแแแจแแ แ แแ แแแแแแ แกแแกแแแแแก แแแแแงแแแแแแ, แ แแแแแแแช แฌแแ แแแแฅแแแแแ แแ แแฃแแแ แแก แฉแแแฃแแแแ แแแ (แแ แแแแแกแแแแขแแก) แแแแฎแแแแแก แแ แแก.
- แแ แแแแแแ แกแแกแแแแแก แแแแฎแแ แชแแแแแแ แจแแกแแซแแแแแแแ แแ แแ แแ แแฅแกแ แแแ แกแแ แแแ แแก แแแแแงแแแแแแ (แแฎแแแแ แฉแแจแแแแแฃแแ แแแแฃแแแแ แแ แคแฃแแฅแชแแแแ).
- แแ แแแแแแ แกแแกแแแก แขแแแแแแแ แฃแแแ แแแแแ แแแแแ แ แแแแ แช แแแ Apache แแแแฃแแแแ.
- แแ แแแแแแ แกแแกแแแก แแแจแแแแ แจแแแซแแแแ แแแแฎแแ แชแแแแแแก แฃแ แแแแ แแฅแแแแแแแก แกแขแ แฃแฅแขแฃแ แแก แแแแแแฃแ แ แแแแแแแแ.
แฎแแแฃแแ แแแแแแแ แแแแ แแแแฎแแ แชแแแแแแแก แจแแแแแ.
แกแแแฃแจแแแก แแแแแแ: แกแแ แแแกแแแแกแ แแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแ แแแ แฎแแแแแกแแฌแแแแแ แฃแแแ แแงแแก แแแแแแฃแ แ แขแแแแคแแแแแแ IOS-แแ แแแแแขแแแแแ แแ แแแ แแแแแแก (แ แแแแ แแชแแ VPN) แแแ แแจแ, แแ แแแแแ แแ แฃแกแแคแ แแฎแ.
แแแแแขแแแแแ แแแแแแ: แแ แแแกแ แแ แ แแกแฃแ แกแแแแก/แขแแแแคแแแแก แขแ แแคแแแแก แแแแแแแ (แแแแแแ แแ แกแแ แแแกแ แแแ-แกแแแแขแแแแก แแแ แแจแ แฌแแ แแแฅแแแแก แแ แแกแแญแแ แ แแแแฎแแแแแแก) แแแแขแแแขแแก แฃแคแ แ แกแฌแ แแคแ แแแฌแแแแแแ แแแแแแฃแ แ แแแขแแ แแแขแแ.
แ แแแแ แจแแแแแฌแแ?
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 แแ แแขแแแแแจแ. แแก แฏแแ แแแแแ แแแฎแแขแจแแ แแ แแ แแฃแแแ แแก แแฌแแ แแแแแแแแแ แแ แแชแแแ แ แแแแ แแแแแฎแแ แชแแแแแ แแก #info 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-แแก แจแแกแแฎแแ:
แแ แแแ แแแ แแแแขแ แจแแแแฌแแแ, แแแ แแแแขแ "b" แแ แฉแแฃแแ แแงแ แแแกแ แแ แแแแแคแแ แแแแแแแกแ แแ http2 แแ แแขแแแแแแแ แแแแกแแแแแแแแก แแแแ.
แแ แฐแแแแแแแแก แแแแแแแฌแแแแแก แแแกแแกแ แฃแแแแแแ, แแแกแญแแ แแ แแ แแแแแ แแฅแกแแแ แแแแแขแ แแแแคแแแฃแ แแชแแแกแแแ แแแแแแจแแ แแแแ; แขแแกแขแแ แแแ แแแฎแแ แจแแแแแแ แแแแแแแแ:
แแฃ = แแแแแฎแแแก = แแแแแฌแแ แ
Apache-แแก แซแแ แแแแแ แแแฎแแกแแแแแแแแแ แแแแแแแแฅแแแแแแ Apache HTTP แกแแ แแแ แแ
แจแแแแแ แแ แแก แจแแแแแแ แซแแ แแแแแ แแแแแแแ:
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>
แกแแ แขแแคแแแแขแแก แแคแแแแแแแก แแ แกแแแฃแแ แแแขแแ แแแแชแแแก แแแแแแแแกแฌแแแแแแ, แแแแ แแ แกแแ แขแแคแแแแขแแก แแแแแขแแแแแแ, แแแแแฌแแ แแ แแ แกแแแฃแแ แกแแ แขแแคแแแแขแแก แแคแแแแแแแก แแแแแขแแแ แแ แ-แแ แแ แฎแแแแแกแแฌแแแแแ แชแแแแแแก แกแแฎแแ SSl_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 Web Token-แแ แแแคแฃแซแแแแฃแแ แขแแแแแแแแก แแแแแงแแแแแแ Apache Two-Factor (2FA) แแแแแแขแแคแแแแชแแ แ แแแแ แแแแแแแขแแ แแ แคแแฅแขแแ แแแแ แแแแแแขแแคแแแแชแแ Apache-แก แแแแขแแแแ แแ แคแแฅแขแแ แแแแ แแแแแแขแแคแแแแชแแ แแฅแแแแก Apache แแแแแแแแแ แแแ แขแแแ แแแแฃแแแก แแแกแขแแแแชแแแก แกแแจแฃแแแแแแ
แแแแฎ, แแ แแก แแแ แแแแฃแแแแ, แแแแ แแ แแกแแแ แงแแแแ แแแแแแจแแ แแแฃแแแ แแแแแ แแขแฃแ แฅแแแแแแแแแแ แแ แแฅแแ แแ แขแแคแแฅแขแแแ แกแแกแแแก แแแฌแงแแแแก แแ แแแแแขแแแแแ แฅแฃแฅแแแแแก แกแแฎแแ. แแแฃ แชแแขแ แฎแแแ แแ แ.
แซแแแแแก แฎแฃแแ แกแแแแ แแแแแญแแ แแ, แ แแแแช แแแแแ แแขแฃแแ แจแแแแแ แแ แแแแแแฆแ.
5. แแ แแแแแแ แกแแกแแแก แแแจแแแแ แจแแแซแแแแ แแแแฎแแ แชแแแแแแก แฃแ แแแแ แแฅแแแแแแแก แกแขแ แฃแฅแขแฃแ แแก แแแแแแฃแ แ แแแแแแแแ.
แแแ แแแแฃแแแแ แซแแแแแ แ แแฃแแแ, แ แแแแแ แฉแแแ แแแญแแ แแแแ แแฎแแแแ แ แแแแแแแแ แคแฃแแฅแชแแ.
แ แแแแ แช แแแฅแแ, แแแ แแฆแแแ แแแแแแจแแ แแแฃแแ แแ แแแแแแ แแก แแ แแก, แ แแ Apache-แก แฉแแจแแแแแฃแแ แคแฃแแฅแชแแแแ แแ แแซแแแแ แแแแแแแแก แแแ แแฆแแก แแแแแ แแ แแแแก แกแแจแฃแแแแแแก แแ แแ แแ แแก แแแแแแแขแแแฃแ แ แแแแแขแแแ/แแแแแแแแแ แฉแแจแแแแแฃแ แคแฃแแฅแชแแแแจแ แแแซแแแแแแแก แจแแแแฌแแแแแกแแก.
แแแฃ แแฅแแแ แแ แจแแแแซแแแแ แแแฌแแ แแ:
(%{env:zt-cert-date} + 30) > %{DATE}
แจแแแแซแแแแ แแฎแแแแ แแ แ แ แแชแฎแแแก แจแแแแ แแแ.
Safari แแ แแแแแแแก แแแแแกแแแแแก แซแแแแแกแแก, แแฆแแแแแฉแแแ แกแแแแขแแ แแกแ แกแขแแขแแ:
แแแ แแฆแฌแแ แก แแแแแก แแแแแแแแก Lua-แจแ Nginx-แแกแแแแก, แแ แ แแแแแแช, แ แแแแ แช แแแแ แแแ, แซแแแแแ แแแแแ แแแก แแแแคแแแฃแ แแชแแแก แแ แแแฌแแแแก แแแแแแแก, แ แแแแแแช แฉแแแ แฃแแแ แแแแแแฎแแ แชแแแแแ, แแแ แแ แฐแแจแแ แแแแกแแแแก hmac salting แแแแแแแก แแแแแงแแแแแแกแ ( แแก แแ แแฅแแ แแแแแแแ Apache-แจแ).
แแแแ แแแ, แ แแ แแฃแ แแแแคแแ แแแแแแแก แแฅแแแ แแแแ แแ แแแแฉแแกแแแแก แ แแฆแแช แแแ แขแแแแก แแแแแแแแ แจแแกแแซแแแแแแแ:
Nginx-แกแ แแ Apache-แกแแแ แแแแกแฎแแแแแแแก แจแแกแฌแแแแแก แจแแแแแ:
แแ แฎแแแแแกแแฌแแแแแ แคแฃแแฅแชแแแแ Lua แแแแก แแฌแแ แแแแแแแกแแแ:
แฉแแแ แแแแแแแแ แแแ, แ แแ แแแแแงแแแแ env แชแแแแแแแ แแแขแแ แ 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
แแ แแกแ แแฃแจแแแแก แแก แงแแแแแคแแ แ แแแแแแแแแแจแ, แฅแฃแฅแ-แคแแแแแแแก แ แแแแแแแแแก แแแขแแแแแแชแแแ แแ แขแแแแแแก แฉแแแแชแแแแแแ, แ แแแแกแแช แแแฎแแแแ แ แแ แ แแแแแก แซแแแแ แฅแฃแฅแแแก (แแแขแแแแก) แแแแแก แแแแฌแฃแ แแแแแ:
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-แแ แแแแแขแแแแแ แแ แแแ แแแแแแก (VPN) แแแ แแจแ, แแ แแแแแ แแ แฃแกแแคแ แแฎแ.
แแแแแแ แแแฆแฌแแฃแแแ, แแแ-แกแแแแขแแแ แแฃแจแแแแแ แแ แแฅแแ แฃแกแแคแ แแฎแแแแแก แแแแ แแ แแแแแแแ แกแแ แขแแคแแแแขแ.
แฌแงแแ แ: www.habr.com