แฉแแแ แแฃแแแแแแ แแแแกแแแก แคแ แแแ โแแ แแแแฃแแ แฃแกแแคแ แแฎแแแแโ, แแแแ แแ แ แแแแกแแช แแแแแ แแแ แแฌแงแแแก แฉแแแแ แแแแฃแแแแแชแแแแแก แแแแแขแแ แแแแก, แแแ แฉแแฌแแ แแก แกแแ แฌแแฃแแ แแญแแแก, แกแแแแ แแแแแ แแแ แกแแคแฃแซแแแแกแ แแ แงแแแแแแแแ แ แแจแแแ แ แแแแแแก แแแ แแจแ, แกแแแฃแแแ แแแแก แฃแแแ แแแแฃแกแแแ แแแแฎแแ: แแแ แแแ แแชแแแแ แแกแแแ แแ แแแแฃแ แฃแกแแคแ แแฎแแแแแก แแฃ แแกแแแ แแชแแแแ แกแแแฃแแแ แแแแก?
- แแแแแ แ แกแแแฃแแแแ
แแก แแแแฏแแกแขแ แแแแแแ แแกแแฎแแแก แแแแแ แแแก แกแแแแแแแแแแแก แแแขแแ แแกแ แแแแคแแแแแชแแแแฃแ แแแแก แกแแแแแฎแจแ, แ แแช, แแแแก แแแแแแแแกแฌแแแแแแ, แ แแ
แแฆแแก แฌแแกแ แแแจแ:
แแแชแแแขแ แแแแแแแฃแแ แแแขแแ แแแข แแ แแแแแแแ แแก "Medium" แกแแแแแแแแแแแก แแแแฃแแแแกแขแแแ แฅแแแแแ แกแแแฃแแแ แกแแซแแแแ แกแแกแขแแแแก.
Medium-แแ แแแแคแฃแซแแ แแฎแแแ แกแแ แขแแคแแชแแ แแแแก แแ แแแแ, Medium Global Root CA. แแแก แจแแแฎแแแ แชแแแแแแแแแ?
แฃแกแแคแ แแฎแแแแแก แกแแ แแแคแแแแขแแแ แงแแแแ แกแแฎแแแกแแแแก - แ แแแแ แจแแฅแแแแ แแฅแแแแ แกแแแฃแแแ แ แกแแ แแแกแ Yggdrasil แฅแกแแแจแ แแ แแแกแชแแ แแแกแแแแก แแแฅแแแแ SSL แกแแ แแแคแแแแขแ
แจแแแแฎแกแแแ - แ แ แแ แแก "แกแแจแฃแแแ"?
แกแแจแฃแแแ (แแแแแแกแฃแ แ แกแแจแฃแแแ - "แจแฃแแแแแแแ", แแ แแแแแแแฃแ แ แกแแแแแแ - แแฃ แแแฎแแแ แแฅแแแแก แแแแคแแแแแชแแแแฃแ แแแแก. แฃแแแ แฌแแแฆแ; แแกแแแ แแแแแแกแฃแ แแ แกแแขแงแแ แกแแจแฃแแแ แแแจแแแแก "แจแฃแแแแแก") - แ แฃแกแฃแแ แแแชแแแขแ แแแแแแแฃแแ แแแขแแ แแแข แแ แแแแแแแ แ, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แฅแกแแแแก แฌแแแแแแก แกแแ แแแกแแแก
แกแ แฃแแ แกแแฎแแแ: แกแแจแฃแแแ แแแขแแ แแแข แกแแ แแแกแแก แแ แแแแแแแ แ. แแแแแแแแ แแแแแ แแ แแแฅแขแ แฉแแคแแฅแ แแแฃแแ แแงแ แ แแแแ แช
แฉแแแแงแแแแแแ 2019 แฌแแแก แแแ แแแจแ, แ แแแแ แช แแแแแฃแแแแแแแแ แกแแขแแแแแแแฃแแแแแชแแ แแแ แแแแก แจแแฅแแแแก แแแฌแแแ, แกแแแแแแ แแแแฎแแแ แแแแแแแกแแแแก Yggdrasil แฅแกแแแแก แ แแกแฃแ แกแแแแ แฌแแแแแแก แแแฌแแแแแแ, Wi-Fi แฃแแแแแแ แแแแแชแแแแ แแแแแชแแแแก แขแแฅแแแแแแแแก แแแแแงแแแแแแ.
แแแแแขแแแแแ แแแคแแ แแแชแแ แแแแแแ:
แแแชแแแขแ แแแแแแแฃแแ แแแขแแ แแแข แแ แแแแแแแ แแก "Medium" แกแแแแแแแแแแแก แแแแฃแแแแกแขแแแ แฅแแแแแ แกแแแฃแแแ แกแแซแแแแ แกแแกแขแแแแก.
แแแแแแแแ แแแแแ แแแแแแ
แ แแขแแ แแญแแ แแแแแ PKI, แแฃ Yggdrasil out of box แฃแแ แฃแแแแแงแแคแก แจแแกแแซแแแแแแแแก แแแจแแคแแ แแก แขแ แแคแแแ แแแแแขแแแแแก แจแแ แแก?แแ แแ แแก แกแแญแแ แ HTTPS-แแก แแแแแงแแแแแ Yggdrasil แฅแกแแแแก แแแ แกแแ แแแกแแแแแ แแแกแแแแแจแแ แแแแแ, แแฃ แแแ แฃแแแแจแแ แแแแแ แแแแแแแแ แแแแ แแแจแแแแฃแแ Yggdrasil แฅแกแแแแก แ แแฃแขแแ แแก แกแแจแฃแแแแแแ.
แแแ แแแแช: Yggdrasil แขแ แแแกแแแ แขแ แขแแแแ
แกแแขแฃแแชแแ แ แแแแแแแฃแ แแ แแชแแแแแ, แแฃ แแฅแแแ แฌแแแแแแ Yggdarsil-แแก แแแขแ แแแแขแแก แ แแกแฃแ แกแแแก แแ แ แแแ แแแแแ , แแ แแแแ แจแฃแแแแแฃแ แ แแแแแซแแก แแแจแแแแแแ - แกแแจแฃแแแ แฅแกแแแแก แฌแแแแแแก แฌแแ แขแแแ, แ แแแแแกแแช แแแ แแแแก แแแกแ แแแแ แแขแแ แ.
แแ แจแแแแฎแแแแแจแ, แแแก แจแแฃแซแแแ แแแแแแแแแก แแฅแแแแก แแแแ แแแแแชแแแฃแแ แแแแแชแแแแแ:
- แฌแแแแแแก แฌแแ แขแแแแก แแแแ แแขแแ แ. แแจแแแ แแ, แ แแ แกแแจแฃแแแ แฅแกแแแแก แฌแแแแแแก แฌแแ แขแแแแก แแแแแแแแแแ แแแแ แแขแแ แก แจแแฃแซแแแ แแแแกแแแแแก แแแจแแคแ แฃแแ แขแ แแคแแแ, แ แแแแแแช แแแแแก แแแก แแฆแญแฃแ แแแแแแแจแ.
- แจแแแแญแ แแแ (
แแแชแ แจแฃแแจแ ). แกแแจแฃแแแแก แแฅแแก แแกแแแแกแ แแ แแแแแแTor แฅแกแแแแก แแ แแแแแแ , แแฎแแแแ แจแแงแแแแแก แแ แจแฃแแแแแฃแ แ แแแแแซแแแแก แแแแแ แ.
แแกแ แแแแแแงแฃแ แแแ
แแแแแฌแงแแแขแแแแแ: Yggdrasil แฅแกแแแจแ แแแ แกแแ แแแกแแแแ แฌแแแแแแกแแแแก แแแแแแงแแแแ HTTPS แแ แแขแแแแแ (แแแแ 7
แแแแขแแ, แฉแแแ แแแแแแ แกแแ แฉแแแแ แกแแแฃแแแ แ แกแแ แขแแคแแชแแ แแแแก แชแแแขแ แ -
แ แ แแฅแแ แฃแแแ, แแแแแแแแกแฌแแแแแฃแแ แแงแ แกแแ แขแแคแแชแแ แแแแก แแ แแแแแก แซแแ แแฃแแ แกแแ แขแแคแแแแขแแก แแแแแ แแแแขแแ แแแแก แจแแกแแซแแแแแแแ - แแแแ แแ แแฅ แกแแ แแแคแแแแขแ แฃแคแ แ แกแแญแแ แแ แแแแแชแแแแ แแแแแชแแแแก แแแแแแแแแแก แแแกแแแแกแขแฃแ แแแแแ แแ MITM แจแแขแแแแแแก แจแแกแแซแแแแแแแแก แแฆแแแกแแคแฎแแ แแแแ.
แกแฎแแแแแกแฎแแ แแแแ แแขแแ แแแแก แกแแจแฃแแแ แฅแกแแแแก แกแแ แแแกแแแก แแฅแแ แฃแกแแคแ แแฎแแแแแก แกแฎแแแแแกแฎแแ แกแแ แแแคแแแแขแ, แแแ แแฃ แแ แแแแ, แฎแแแแแฌแแ แแแ root แกแแ แขแแคแแแแชแแแก แแ แแแแแก แแแแ . แแฃแแชแ, Root CA แแแแ แแขแแ แแแก แแ แจแแฃแซแแแแ แแแจแแคแ แฃแแ แขแ แแคแแแแก แแแกแแแแ แกแแ แแแกแแแแแแ, แ แแแแแแแแช แแแ แฎแแแ แแแแฌแแ แแก แฃแกแแคแ แแฎแแแแแก แกแแ แขแแคแแแแขแแแก (แแฎ.
แแแ, แแแแช แแแแกแแแฃแแ แแแแ แแ แฃแแแแก แแแ แฃแกแแคแ แแฎแแแแแแ, แจแแฃแซแแแแ แแแแแแงแแแแ แแกแแแ แกแแจแฃแแแแแแแ, แ แแแแ แแชแแ แแแแแขแแแแแ แแแชแแ, แแแ
แแแแแแแ, แกแแจแฃแแแ แฅแกแแแแก แกแแฏแแ แ แแแกแแฆแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแฅแแก แจแแกแแซแแแแแแแ แจแแแแแฌแแแก แกแแ แแแคแแแแขแแก แกแขแแขแฃแกแ แแ แแขแแแแแแก แแแแแงแแแแแแ.
แแแแแแแ แแแ แแแแ
แแแแฎแแแ แแแแแ
แแแแแแ แ TLD แแ แแก .แแแ. แแแแแแแก แกแแฎแแแแแแก แฃแแแขแแกแแแแก แแฅแแก แแก TLD, แแ แ แแแแแแแแแแกแแก แแแ แแ: .แแกแ ะธ .ge.
แกแแซแแแแ แกแแกแขแแแ แแแแฃแจแแแแแแก แแ แแชแแกแจแแ, แแแแ แแ แแแกแ แแแแแงแแแแแ แแฆแแก แฃแแแ แจแแกแแซแแแแแแแ - แฃแแ แแแแ แแฌแแแแ แแแแแแแ แแก
แแฅแแแ แจแแแแซแแแแ แแแแฎแแแ แแ แแ แแแฅแขแแก แแแแแแแแ แแแแก,
Medium-แแ แแแแคแฃแซแแ แแฎแแแ แกแแ แขแแคแแชแแ แแแแก แแ แแแแ, Medium Global Root CA. แแแก แจแแแฎแแแ แชแแแแแแแแแ?
แแฃแจแแ แแแกแ แฃแแแ Medium Root CA แกแแ แขแแคแแชแแ แแแแก แชแแแขแ แแก แคแฃแแฅแชแแแแแ แแแแก แกแแฏแแ แ แขแแกแขแแ แแแ. แขแแกแขแแ แแแแก แแแกแแกแ แฃแแก แแแแแกแฌแแ แแ แจแแชแแแแแแ แกแแฏแแ แ แแแกแแฆแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แกแแ แแแกแแแแก แแฃแจแแแแแจแ แแ แจแแแฅแแแ แกแแ แขแแคแแแแชแแแก แแ แแแแแก แแฎแแแ แซแแ แแฃแแ แกแแ แขแแคแแแแขแ โMedium Global Root CAโ.
แแแแแแแแกแฌแแแแแฃแแ แแฅแแ PKI-แก แงแแแแ แแแฃแแแกแ แแ แแแฎแแกแแแแแแแแ - แแฎแแ แแฎแแแ CA แกแแ แแแคแแแแขแ "Medium Global Root CA" แแแแชแแแ แแฎแแแแ แแแ แฌแแแก แจแแแแแ (แแแกแ แแแแแก แแแกแแแแก แจแแแแแ). แแฎแแ แฃแกแแคแ แแฎแแแแแก แกแแ แแแคแแแแขแแแ แแแแชแแแ แแฎแแแแ แจแฃแแแแแฃแ แ แกแแ แขแแคแแแแชแแแก แแ แแแแแแแแก แแแแ - แแแแแแแแแ, "แกแแจแฃแแแ แแแแแแแก แแแแแกแขแฃแ แแแแก แฃแกแแคแ แแฎแ แกแแ แแแ แ CA".
แ แแแแ แแแแแแงแฃแ แแแ แแฎแแ แกแแ แขแแคแแแแขแแแแก แแแแแแก แฏแแญแแ?
แ แ แฃแแแ แแแแแแแแก แแแแกแแแแแก, แ แแ แงแแแแแคแแ แ แแแฃแจแแแก, แแฃ แแแแฎแแแ แแแแแ แฎแแ แ:
แแแแแแแแ แแแแแแ แแ แกแแ แแแกแ แแงแแแแแก HSTS-แก, แกแแจแฃแแแ แฅแกแแแแก แ แแกแฃแ แกแแแแก แแแแแงแแแแแแแแ แแฅแแแ แฃแแแ แฌแแจแแแแ แแแแแชแแแแแ แกแแจแฃแแแ แแแขแ แแแแขแแก แ แแกแฃแ แกแแแแแแ. แแแแก แแแแแแแแ แจแแแแซแแแแ แแฅแแแแ แแ แแฃแแแ แแก แแกแขแแ แแแก แฉแแแแ แแจแ.
ะขะฐะบะถะต ะฝะตะพะฑั
ะพะดะธะผะพ
แ แ แฃแแแ แแแแแแแแก แแแแกแแแแแก, แ แแ แงแแแแแคแแ แ แแแฃแจแแแก, แแฃ แกแแกแขแแแแก แแแแ แแขแแ แ แฎแแ แ:
แแฅแแแ แฃแแแ แฎแแแแฎแแ แแแกแชแแ แกแแ แขแแคแแแแขแ แแฅแแแแ แกแแ แแแกแแกแแแแก แแแแ แแแ
แฃแกแแคแ แแฎแแแแแก แกแแ แแแคแแแแขแแแ แงแแแแ แกแแฎแแแกแแแแก - แ แแแแ แจแแฅแแแแ แแฅแแแแ แกแแแฃแแแ แ แกแแ แแแกแ Yggdrasil แฅแกแแแจแ แแ แแแกแชแแ แแแกแแแแก แแแฅแแแแ SSL แกแแ แแแคแแแแขแ
Medium แฅแกแแแจแ แแแขแ แแแแขแแก แกแแ แแแกแแแแก แ แแแแแแแแแก แแ แแแก แแแแ, แแแแแแ แแ แฃแกแแคแ แแฎแแแแแก แแฎแแแ แกแแ แแแคแแแแขแแแแก แแแชแแแแก แแ แแแแ แกแแ แแแกแแแแก แแแแคแแแฃแ แแชแแแก แกแแญแแ แแแแ, แ แแแ แแแ แแฎแแ แ แแแฃแญแแ แแ SSL-แก.
แแแแแแแแ Habr แแ แแก แขแแฅแแแแฃแ แ แ แแกแฃแ แกแ, แงแแแแ แแฎแแ แแแแฏแแกแขแจแ แแฆแแก แฌแแกแ แแแแก แแ แ-แแ แแ แแฃแแฅแขแ แแแแแแแแแแก แกแแจแฃแแแ แฅแกแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แขแแฅแแแแฃแ แแแฎแแกแแแแแแแแแก. แแแแแแแแแ, แฅแแแแแ แแแชแแแฃแแแ แงแแแแแกแแแแชแแแแ แแแกแขแ แฃแฅแชแแแแ แแฅแแแแ แกแแ แแแกแแกแแแแก SSL แกแแ แแแคแแแแขแแก แแแชแแแแก แจแแกแแฎแแ.
แแแแแแแแแแ แแแฃแแแแแแก แแแแแแแก แกแแฎแแแแ domain.ygg, แ แแแแแแช แฃแแแ แจแแแชแแแแแก แแฅแแแแ แกแแ แแแกแแก แแแแแแแก แกแแฎแแแแ.
แแแแแฏแ 1. แจแแฅแแแแแ แแแ แแแ แแแกแแฆแแแ แแ Diffie-Hellman แแแ แแแแขแ แแแ
openssl genrsa -out domain.ygg.key 2048
แแแจแแ:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
แแแแแฏแ 2. แจแแฅแแแแแ แกแแ แขแแคแแแแขแแก แฎแแแแแฌแแ แแก แแแแฎแแแแ
openssl req -new -key domain.ygg.key -out domain.ygg.csr -config domain.ygg.conf
แคแแแแแก แจแแแแแ แกแ domain.ygg.conf:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = v3_req
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Moscow Oblast
localityName = Locality Name (eg, city)
localityName_default = Kolomna
organizationName = Organization Name (eg, company)
organizationName_default = ACME, Inc.
commonName = Common Name (eg, YOUR name)
commonName_max = 64
commonName_default = *.domain.ygg
[ v3_req ]
subjectKeyIdentifier = hash
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
basicConstraints = CA:FALSE
nsCertType = server
authorityKeyIdentifier = keyid,issuer:always
crlDistributionPoints = URI:http://crl.medium.isp/Medium_Global_Root_CA.crl
authorityInfoAccess = OCSP;URI:http://ocsp.medium.isp
แแแแแฏแ 3. แแแแแแแแแ แกแแ แแแคแแแแขแแก แแแแฎแแแแ
แแแแกแแแแแก แแแแแแแแ แแ แคแแแแแก แจแแแแแ แกแ domain.ygg.csr แแ แฉแแกแแแ แแแ แกแแแขแแก แขแแฅแกแขแฃแ แแแแจแ
แแแฐแงแแแแ แแแแกแแแขแแ แแแแแแแแฃแ แแแกแขแ แฃแฅแชแแแก, แจแแแแแ แแแแญแแ แแ แฆแแแแแก "แแแแแแแแ". แฌแแ แแแขแแแแก แจแแแแฎแแแแแจแ, แจแแขแงแแแแแแแ แแแแแแแแแแแ แแฅแแแ แแแแ แแแแแแแแฃแ แแ.แคแแกแขแแก แแแกแแแแ แแแ, แ แแแแแแช แจแแแชแแแก แแแแแ แแก แกแแ แขแแคแแแแขแแก แกแแฎแแ, แ แแแแแกแแช แฎแแแก แแฌแแ แก แจแฃแแแแแฃแ แ แกแแ แขแแคแแชแแ แแแแก แแ แแแแ.
แแแแแฏแ 4. แแแแงแแแแ แแฅแแแแ แแแ แกแแ แแแ แ
แแฃ แแงแแแแแ nginx-แก แแฅแแแแก แแแ แกแแ แแแ แแ, แแแแแแงแแแแ แจแแแแแแ แแแแคแแแฃแ แแชแแ:
แคแแแแ domain.ygg.conf แแแ แแฅแขแแ แแแจแ /etc/nginx/sites-available/
server {
listen [::]:80;
listen [::]:443 ssl;
root /var/www/domain.ygg;
index index.php index.html index.htm index.nginx-debian.html;
server_name domain.ygg;
include snippets/domain.ygg.conf;
include snippets/ssl-params.conf;
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; allow all; }
location ~* .(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
แคแแแแ ssl-params.conf แแแ แแฅแขแแ แแแจแ /etc/nginx/snippets/
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=15552000; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
แคแแแแ domain.ygg.conf แแแ แแฅแขแแ แแแจแ /etc/nginx/snippets/
ssl_certificate /etc/ssl/certs/domain.ygg.crt;
ssl_certificate_key /etc/ssl/private/domain.ygg.key;
แแแคแแกแขแแ แแแฆแแแฃแแ แกแแ แแแคแแแแขแ แฃแแแ แแแแแแแ แแแก: /etc/ssl/certs/domain.ygg.crt. แแแ แแแ แแแกแแฆแแแ (domain.ygg.key) แแแแแแแแกแแ แแแ แแแ แแฅแขแแ แแแจแ /etc/ssl/แแแ แแแ/.
แแแแแฏแ 5. แแแแแขแแแ แแแ แแฅแแแแ แแแ แกแแ แแแ แ
sudo service nginx restart
แฃแคแแกแ แแแขแแ แแแขแ แ แฃแกแแแจแ แแฌแงแแแ แแฅแแแแแแ แแ แแแ
แแฅแแแ แจแแแแซแแแแ แงแแแแ แจแแกแแซแแ แแแฎแแแ แแแ แแแฃแฌแแแ แ แฃแกแแแจแ แฃแคแแกแ แแแขแแ แแแขแแก แฉแแแแงแแแแแแแแก แแฆแแก. แฉแแแ แจแแแแแแแแแ แงแแแแแกแแแแชแแแแ แกแแ, แแฃ แ แแแแ แจแแแแซแแแแ แแแแฎแแแ แแ แฅแกแแแก:
- แฃแแฎแแ แแ แแฅแแแแก แแแแแแ แแแก แแ แแแแแแแแก Medium แฅแกแแแแก แจแแกแแฎแแ. แแแแแแแ แแ
แแแแแแแแ แแ แกแขแแขแแแก แกแแชแแแแฃแ แฅแกแแแแแจแ แแ แแแ แแ แแแแแแ - แแแแฆแแ แแแแแฌแแแแแแ แขแแฅแแแแฃแ แ แกแแแแแฎแแแแก แแแแฎแแแแแจแ Medium แฅแกแแแจแ
GitHub-แแ - แจแแฅแแแแแ แแฅแแแแ แแแ แกแแ แแแกแ Yggdrasil แฅแกแแแจแ แแ แแแแแแขแแ แแแ
แกแแจแฃแแแ แฅแกแแแแก DNS - แแฌแแ แจแแแ
แฌแแแแแแก แฌแแ แขแแแ แกแแจแฃแแแ แฅแกแแแจแ
แฌแแแ แ แแแแแแแ:
แแแ แแแแ แแฎแแแ:
แฉแแแ Telegram- แแ:
แแแแแแแแฎแแแจแ แแแแแฌแแแแแแ แจแแฃแซแแแแ แแฎแแแแ แแแ แแแแกแขแ แแ แแแฃแ แแแแฎแแแ แแแแแแก.
แแแขแแ แแแขแแฃแแ แฎแแแก แแแชแแแ: แฉแแแแแแแก แแแแจแแแแแแแแแแ แแแชแแแแ แแแแ แแแ แ, แแแกแแช แแ แแฅแแก แกแ แฃแแ แแแแแ แแจแ Habrรฉ-แแ
-
โ
-
โ
แแแกแชแ แฎแแ 7 แแแแฎแแแ แแแแแแ. 2 แแแแฎแแแ แแแแแแ แแแแ แจแแแแแแ.
แฌแงแแ แ: www.habr.com