Files
progcode/web/public/assets/editorial/2018/tls-ca-chain-sni-2018.svg
T
huncode 7c53ffe6bc
Build and deploy / deploy (push) Successful in 14s
revise July and August 2018 articles
2026-07-31 09:41:53 +03:00

54 lines
3.7 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 680" role="img" aria-labelledby="title desc">
<title id="title">Цепочка TLS-доверия и SNI</title>
<desc id="desc">PHP cURL отправляет URL hostname в SNI серверу. Сервер выдаёт конечный и промежуточный сертификаты. Клиент соединяет цепочку с корнем в CA bundle и отдельно проверяет имя хоста.</desc>
<defs>
<linearGradient id="background" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#1a203d"/>
<stop offset="1" stop-color="#1c4560"/>
</linearGradient>
<marker id="arr" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
<path d="M1 1 L11 6 L1 11 Z" fill="#8ae6d8"/>
</marker>
</defs>
<rect width="1200" height="680" rx="28" fill="url(#background)"/>
<text x="65" y="78" fill="#f7fbff" font-family="Arial, sans-serif" font-size="34" font-weight="700">TLS: кто выбирает сертификат и кто ему доверяет</text>
<text x="65" y="116" fill="#bed8e6" font-family="Arial, sans-serif" font-size="21">SNI выбирает виртуальный хост. CA bundle и hostname check принимают решение у клиента.</text>
<g font-family="Arial, sans-serif">
<rect x="65" y="202" width="270" height="180" rx="20" fill="#ecf4ff"/>
<text x="100" y="251" fill="#183145" font-size="28" font-weight="700">PHP cURL</text>
<text x="100" y="292" fill="#355468" font-size="20">URL:</text>
<text x="100" y="322" fill="#355468" font-size="20">api.partner.example</text>
<text x="100" y="349" fill="#355468" font-size="18">CA bundle +</text>
<text x="100" y="374" fill="#355468" font-size="18">hostname check</text>
<rect x="465" y="190" width="270" height="205" rx="20" fill="#e6fff9"/>
<text x="500" y="243" fill="#183145" font-size="28" font-weight="700">TLS-сервер</text>
<text x="500" y="286" fill="#355468" font-size="20">virtual host по SNI</text>
<text x="500" y="323" fill="#355468" font-size="20">leaf certificate</text>
<text x="500" y="353" fill="#355468" font-size="20">intermediate certificate</text>
<rect x="865" y="202" width="270" height="180" rx="20" fill="#fff7de"/>
<text x="900" y="251" fill="#183145" font-size="28" font-weight="700">CA bundle</text>
<text x="900" y="292" fill="#355468" font-size="20">доверенные root CA</text>
<text x="900" y="325" fill="#355468" font-size="20">не leaf сайта</text>
<text x="900" y="355" fill="#355468" font-size="18">локальный trust store</text>
<rect x="280" y="492" width="640" height="115" rx="18" fill="#182a43" stroke="#8ae6d8" stroke-width="3"/>
<text x="325" y="538" fill="#f8fcff" font-size="25" font-weight="700">Решение клиента</text>
<text x="325" y="575" fill="#cfe5ee" font-size="21">1. Цепочка leaf → intermediate → trusted root строится</text>
<text x="325" y="603" fill="#cfe5ee" font-size="21">2. Имя в сертификате подходит hostname из URL</text>
</g>
<g fill="none" stroke="#8ae6d8" stroke-width="5" marker-end="url(#arr)">
<path d="M345 252 C382 252 414 252 448 252"/>
<path d="M745 286 C785 286 815 286 848 286"/>
<path d="M997 395 C997 450 860 465 770 487"/>
<path d="M600 405 V478"/>
<path d="M200 393 C220 440 350 455 430 485"/>
</g>
<g font-family="Arial, sans-serif" font-size="18" fill="#8ae6d8">
<text x="365" y="226">ClientHello: SNI</text>
<text x="790" y="260">root CA</text>
<text x="640" y="447">серверная цепочка</text>
</g>
</svg>