replikey/doc/architecture.svg
eternal-flame-AD 5095bcdcdd
init
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-02 20:01:19 -05:00

385 lines
No EOL
21 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.1.2 (0)
-->
<!-- Pages: 1 -->
<svg width="1229pt" height="431pt"
viewBox="0.00 0.00 1229.00 430.50" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 426.5)">
<polygon fill="white" stroke="none" points="-4,4 -4,-426.5 1225,-426.5 1225,4 -4,4" />
<g id="clust1" class="cluster">
<title>cluster_pki</title>
<polygon fill="none" stroke="black" points="8,-196 8,-414.5 336,-414.5 336,-196 8,-196" />
<text text-anchor="middle" x="172" y="-397.2" font-family="Times,serif"
font-size="14.00">PKI</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_pki_crl</title>
<polygon fill="none" stroke="black" points="16,-204 16,-382 260,-382 260,-204 16,-204" />
<text text-anchor="middle" x="138" y="-364.7" font-family="Times,serif"
font-size="14.00">CRL Infrastructure(Optional)</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_0</title>
<polygon fill="none" stroke="black" points="809,-8 809,-382 1213,-382 1213,-8 809,-8" />
<text text-anchor="middle" x="1011" y="-364.7" font-family="Times,serif"
font-size="14.00">Master docker compose</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_1</title>
<polygon fill="none" stroke="black"
points="344,-109.5 344,-382 801,-382 801,-109.5 344,-109.5" />
<text text-anchor="middle" x="572.5" y="-364.7" font-family="Times,serif"
font-size="14.00">Slave docker compose</text>
</g>
<!-- ca -->
<g id="node1" class="node">
<title>ca</title>
<polygon fill="none" stroke="black"
points="322.12,-349.5 267.88,-349.5 267.88,-313.5 328.12,-313.5 328.12,-343.5 322.12,-349.5" />
<polyline fill="none" stroke="black" points="322.12,-349.5 322.12,-343.5" />
<polyline fill="none" stroke="black" points="328.12,-343.5 322.12,-343.5" />
<text text-anchor="middle" x="298" y="-326.45" font-family="Times,serif"
font-size="14.00">CA Key</text>
</g>
<!-- crl_listener -->
<g id="node2" class="node">
<title>crl_listener</title>
<polygon fill="none" stroke="black"
points="138,-261 24.04,-224.25 251.96,-224.25 138,-261" />
<text text-anchor="middle" x="138" y="-231.45" font-family="Times,serif"
font-size="14.00">http://my.crl</text>
</g>
<!-- crl -->
<g id="node3" class="node">
<title>crl</title>
<ellipse fill="none" stroke="black" cx="138" cy="-331.5" rx="27" ry="18" />
<text text-anchor="middle" x="138" y="-326.45" font-family="Times,serif"
font-size="14.00">crl</text>
</g>
<!-- crl&#45;&gt;crl_listener -->
<g id="edge1" class="edge">
<title>crl&#45;&gt;crl_listener</title>
<path fill="none" stroke="black" d="M138,-313.01C138,-301.58 138,-286.26 138,-272.41" />
<polygon fill="black" stroke="black"
points="141.5,-272.75 138,-262.75 134.5,-272.75 141.5,-272.75" />
<text text-anchor="middle" x="164.25" y="-282.2" font-family="Times,serif"
font-size="14.00">Static file</text>
</g>
<!-- web_app -->
<g id="node4" class="node">
<title>web_app</title>
<polygon fill="none" stroke="black"
points="957,-153.5 893,-153.5 893,-117.5 957,-117.5 957,-153.5" />
<text text-anchor="middle" x="925" y="-130.45" font-family="Times,serif"
font-size="14.00">Web app</text>
</g>
<!-- db -->
<g id="node5" class="node">
<title>db</title>
<polygon fill="none" stroke="black"
points="986.88,-58.5 925.12,-58.5 925.12,-22.5 986.88,-22.5 986.88,-58.5" />
<text text-anchor="middle" x="956" y="-35.45" font-family="Times,serif"
font-size="14.00">Postgres</text>
</g>
<!-- web_app&#45;&gt;db -->
<g id="edge5" class="edge">
<title>web_app&#45;&gt;db</title>
<path fill="none" stroke="black"
d="M924.71,-117.39C925,-107.16 926.24,-94.05 930,-83 931.68,-78.07 934.04,-73.12 936.67,-68.44" />
<polygon fill="black" stroke="black"
points="939.58,-70.39 941.88,-60.05 933.63,-66.7 939.58,-70.39" />
</g>
<!-- redis -->
<g id="node6" class="node">
<title>redis</title>
<polygon fill="none" stroke="black"
points="1059,-58.5 1005,-58.5 1005,-22.5 1059,-22.5 1059,-58.5" />
<text text-anchor="middle" x="1032" y="-35.45" font-family="Times,serif"
font-size="14.00">Redis</text>
</g>
<!-- web_app&#45;&gt;redis -->
<g id="edge6" class="edge">
<title>web_app&#45;&gt;redis</title>
<path fill="none" stroke="black"
d="M931.67,-117.34C936.69,-106.32 944.5,-92.37 955,-83 969.85,-69.75 978.5,-74.47 996,-65 996.21,-64.88 996.43,-64.77 996.64,-64.65" />
<polygon fill="black" stroke="black"
points="998.19,-67.8 1005.05,-59.73 994.65,-61.76 998.19,-67.8" />
</g>
<!-- listen_master_web -->
<g id="node11" class="node">
<title>listen_master_web</title>
<polygon fill="none" stroke="black" points="862,-65 816.62,-28.25 907.38,-28.25 862,-65" />
<text text-anchor="middle" x="862" y="-35.45" font-family="Times,serif"
font-size="14.00">:80</text>
</g>
<!-- web_app&#45;&gt;listen_master_web -->
<g id="edge10" class="edge">
<title>web_app&#45;&gt;listen_master_web</title>
<path fill="none" stroke="black"
d="M904.09,-117.23C898.48,-111.93 892.74,-105.82 888.25,-99.5 882.02,-90.73 876.73,-80.24 872.57,-70.61" />
<polygon fill="black" stroke="black"
points="875.93,-69.59 868.93,-61.64 869.45,-72.22 875.93,-69.59" />
<text text-anchor="middle" x="905.12" y="-86.2" font-family="Times,serif"
font-size="14.00">Listen</text>
</g>
<!-- replikey -->
<g id="node7" class="node">
<title>replikey</title>
<polygon fill="none" stroke="black"
points="1080.38,-153.5 1015.62,-153.5 1015.62,-117.5 1080.38,-117.5 1080.38,-153.5" />
<text text-anchor="middle" x="1048" y="-130.45" font-family="Times,serif"
font-size="14.00">Replikey</text>
</g>
<!-- replikey&#45;&gt;db -->
<g id="edge2" class="edge">
<title>replikey&#45;&gt;db</title>
<path fill="none" stroke="orange"
d="M1015.48,-128.13C998.56,-123.14 978.97,-114.45 967,-99.5 960.42,-91.28 957.35,-80.31 956.03,-70.12" />
<polygon fill="orange" stroke="orange"
points="959.53,-69.96 955.3,-60.25 952.55,-70.48 959.53,-69.96" />
<text text-anchor="middle" x="1001.5" y="-86.2" font-family="Times,serif"
font-size="14.00">SNI Routing</text>
</g>
<!-- replikey&#45;&gt;redis -->
<g id="edge3" class="edge">
<title>replikey&#45;&gt;redis</title>
<path fill="none" stroke="orange"
d="M1044.99,-117.01C1042.71,-103.76 1039.53,-85.28 1036.89,-69.92" />
<polygon fill="orange" stroke="orange"
points="1040.4,-69.67 1035.25,-60.41 1033.5,-70.85 1040.4,-69.67" />
<text text-anchor="middle" x="1076.4" y="-86.2" font-family="Times,serif"
font-size="14.00">SNI Routing</text>
</g>
<!-- listen_master_replikey -->
<g id="node12" class="node">
<title>listen_master_replikey</title>
<polygon fill="none" stroke="black"
points="1141,-65 1077.19,-28.25 1204.81,-28.25 1141,-65" />
<text text-anchor="middle" x="1141" y="-35.45" font-family="Times,serif"
font-size="14.00">:6443</text>
</g>
<!-- replikey&#45;&gt;listen_master_replikey -->
<g id="edge9" class="edge">
<title>replikey&#45;&gt;listen_master_replikey</title>
<path fill="none" stroke="black"
d="M1090.83,-117.59C1099.6,-112.71 1108.21,-106.71 1115,-99.5 1124.83,-89.06 1131.39,-74.26 1135.45,-62.23" />
<polygon fill="black" stroke="black"
points="1089.25,-114.47 1081.92,-122.12 1092.42,-120.71 1089.25,-114.47" />
<text text-anchor="middle" x="1142.87" y="-86.2" font-family="Times,serif"
font-size="14.00">Listen</text>
</g>
<!-- server_cert -->
<g id="node8" class="node">
<title>server_cert</title>
<polygon fill="none" stroke="black"
points="1033.62,-254.5 964.38,-254.5 964.38,-218.5 1039.62,-218.5 1039.62,-248.5 1033.62,-254.5" />
<polyline fill="none" stroke="black" points="1033.62,-254.5 1033.62,-248.5" />
<polyline fill="none" stroke="black" points="1039.62,-248.5 1033.62,-248.5" />
<text text-anchor="middle" x="1002" y="-231.45" font-family="Times,serif"
font-size="14.00">Server cert</text>
</g>
<!-- server_cert&#45;&gt;replikey -->
<g id="edge7" class="edge">
<title>server_cert&#45;&gt;replikey</title>
<path fill="none" stroke="black"
d="M998.38,-218.25C996.45,-204.79 995.76,-186.02 1003,-171.5 1004.78,-167.94 1007.11,-164.63 1009.77,-161.59" />
<polygon fill="black" stroke="black"
points="1012.1,-164.21 1016.89,-154.76 1007.25,-159.15 1012.1,-164.21" />
<text text-anchor="middle" x="1037.5" y="-174.7" font-family="Times,serif"
font-size="14.00">Authenticate</text>
</g>
<!-- server_key -->
<g id="node9" class="node">
<title>server_key</title>
<polygon fill="none" stroke="black"
points="1033.25,-349.5 964.75,-349.5 964.75,-313.5 1039.25,-313.5 1039.25,-343.5 1033.25,-349.5" />
<polyline fill="none" stroke="black" points="1033.25,-349.5 1033.25,-343.5" />
<polyline fill="none" stroke="black" points="1039.25,-343.5 1033.25,-343.5" />
<text text-anchor="middle" x="1002" y="-326.45" font-family="Times,serif"
font-size="14.00">Server key</text>
</g>
<!-- server_key&#45;&gt;server_cert -->
<g id="edge4" class="edge">
<title>server_key&#45;&gt;server_cert</title>
<path fill="none" stroke="black"
d="M1002,-313.01C1002,-299.89 1002,-281.64 1002,-266.37" />
<polygon fill="black" stroke="black"
points="1005.5,-266.43 1002,-256.43 998.5,-266.43 1005.5,-266.43" />
<text text-anchor="middle" x="1032.75" y="-282.2" font-family="Times,serif"
font-size="14.00">Private key</text>
</g>
<!-- ca_cert -->
<g id="node10" class="node">
<title>ca_cert</title>
<polygon fill="none" stroke="black"
points="1117,-254.5 1065,-254.5 1065,-218.5 1123,-218.5 1123,-248.5 1117,-254.5" />
<polyline fill="none" stroke="black" points="1117,-254.5 1117,-248.5" />
<polyline fill="none" stroke="black" points="1123,-248.5 1117,-248.5" />
<text text-anchor="middle" x="1094" y="-231.45" font-family="Times,serif"
font-size="14.00">CA cert</text>
</g>
<!-- ca_cert&#45;&gt;replikey -->
<g id="edge8" class="edge">
<title>ca_cert&#45;&gt;replikey</title>
<path fill="none" stroke="black"
d="M1089.42,-218.15C1085.61,-204.97 1079.6,-186.61 1072,-171.5 1070.62,-168.76 1069.05,-165.98 1067.4,-163.25" />
<polygon fill="black" stroke="black"
points="1070.41,-161.46 1062.01,-155 1064.55,-165.29 1070.41,-161.46" />
<text text-anchor="middle" x="1093.04" y="-174.7" font-family="Times,serif"
font-size="14.00">Trust</text>
</g>
<!-- db_slave -->
<g id="node13" class="node">
<title>db_slave</title>
<polygon fill="none" stroke="black"
points="413.88,-254.5 352.12,-254.5 352.12,-218.5 413.88,-218.5 413.88,-254.5" />
<text text-anchor="middle" x="383" y="-231.45" font-family="Times,serif"
font-size="14.00">Postgres</text>
</g>
<!-- replikey_slave_db -->
<g id="node15" class="node">
<title>replikey_slave_db</title>
<polygon fill="none" stroke="black"
points="511,-153.5 387,-153.5 387,-117.5 511,-117.5 511,-153.5" />
<text text-anchor="middle" x="449" y="-130.45" font-family="Times,serif"
font-size="14.00">Replikey DB Client</text>
</g>
<!-- db_slave&#45;&gt;replikey_slave_db -->
<g id="edge11" class="edge">
<title>db_slave&#45;&gt;replikey_slave_db</title>
<path fill="none" stroke="orange"
d="M379.66,-218.12C377.98,-204.42 377.85,-185.38 386.5,-171.5 389.02,-167.46 392.18,-163.85 395.73,-160.63" />
<polygon fill="orange" stroke="orange"
points="397.63,-163.58 403.43,-154.72 393.36,-158.03 397.63,-163.58" />
<text text-anchor="middle" x="414.25" y="-174.7" font-family="Times,serif"
font-size="14.00">Plain TCP</text>
</g>
<!-- redis_slave -->
<g id="node14" class="node">
<title>redis_slave</title>
<polygon fill="none" stroke="black"
points="764,-254.5 710,-254.5 710,-218.5 764,-218.5 764,-254.5" />
<text text-anchor="middle" x="737" y="-231.45" font-family="Times,serif"
font-size="14.00">Redis</text>
</g>
<!-- replikey_slave_redis -->
<g id="node16" class="node">
<title>replikey_slave_redis</title>
<polygon fill="none" stroke="black"
points="753,-153.5 617,-153.5 617,-117.5 753,-117.5 753,-153.5" />
<text text-anchor="middle" x="685" y="-130.45" font-family="Times,serif"
font-size="14.00">Replikey Redis Client</text>
</g>
<!-- redis_slave&#45;&gt;replikey_slave_redis -->
<g id="edge12" class="edge">
<title>redis_slave&#45;&gt;replikey_slave_redis</title>
<path fill="none" stroke="orange"
d="M727.94,-218.26C720.09,-203.3 708.58,-181.39 699.45,-164.01" />
<polygon fill="orange" stroke="orange"
points="702.58,-162.44 694.83,-155.22 696.38,-165.7 702.58,-162.44" />
<text text-anchor="middle" x="738.75" y="-174.7" font-family="Times,serif"
font-size="14.00">Plain TCP</text>
</g>
<!-- replikey_slave_db&#45;&gt;listen_master_replikey -->
<g id="edge18" class="edge">
<title>replikey_slave_db&#45;&gt;listen_master_replikey</title>
<path fill="none" stroke="green"
d="M510.56,-117.01C554.75,-105.24 615.93,-90.54 670.75,-83 845.84,-58.91 894.07,-96.36 1068,-65 1080.51,-62.74 1093.85,-58.9 1105.65,-54.97" />
<polygon fill="green" stroke="green"
points="1106.69,-58.31 1114.99,-51.72 1104.39,-51.7 1106.69,-58.31" />
<text text-anchor="middle" x="709.38" y="-86.2" font-family="Times,serif"
font-size="14.00">TLS with SNI</text>
</g>
<!-- replikey_slave_redis&#45;&gt;listen_master_replikey -->
<g id="edge19" class="edge">
<title>replikey_slave_redis&#45;&gt;listen_master_replikey</title>
<path fill="none" stroke="green"
d="M714.72,-117.15C736.62,-105.29 767.56,-90.42 796.75,-83 913.84,-53.22 949.33,-87.68 1068,-65 1080.39,-62.63 1093.6,-58.8 1105.34,-54.91" />
<polygon fill="green" stroke="green"
points="1106.32,-58.27 1114.63,-51.7 1104.03,-51.66 1106.32,-58.27" />
<text text-anchor="middle" x="835.38" y="-86.2" font-family="Times,serif"
font-size="14.00">TLS with SNI</text>
</g>
<!-- client_cert -->
<g id="node17" class="node">
<title>client_cert</title>
<polygon fill="none" stroke="black"
points="534.5,-254.5 467.5,-254.5 467.5,-218.5 540.5,-218.5 540.5,-248.5 534.5,-254.5" />
<polyline fill="none" stroke="black" points="534.5,-254.5 534.5,-248.5" />
<polyline fill="none" stroke="black" points="540.5,-248.5 534.5,-248.5" />
<text text-anchor="middle" x="504" y="-231.45" font-family="Times,serif"
font-size="14.00">Client cert</text>
</g>
<!-- client_cert&#45;&gt;replikey_slave_db -->
<g id="edge14" class="edge">
<title>client_cert&#45;&gt;replikey_slave_db</title>
<path fill="none" stroke="black"
d="M475.84,-218.05C465.79,-210.21 455.57,-200.01 450,-188 446.79,-181.08 445.61,-173.05 445.46,-165.42" />
<polygon fill="black" stroke="black"
points="448.95,-165.63 445.87,-155.49 441.96,-165.34 448.95,-165.63" />
<text text-anchor="middle" x="484.5" y="-174.7" font-family="Times,serif"
font-size="14.00">Authenticate</text>
</g>
<!-- client_cert&#45;&gt;replikey_slave_redis -->
<g id="edge16" class="edge">
<title>client_cert&#45;&gt;replikey_slave_redis</title>
<path fill="none" stroke="black"
d="M509.9,-218.18C515.78,-203.56 526.22,-183.19 542,-171.5 560.36,-157.9 583.34,-149.53 605.46,-144.4" />
<polygon fill="black" stroke="black"
points="606.03,-147.85 615.1,-142.37 604.59,-141 606.03,-147.85" />
<text text-anchor="middle" x="576.5" y="-174.7" font-family="Times,serif"
font-size="14.00">Authenticate</text>
</g>
<!-- client_key -->
<g id="node18" class="node">
<title>client_key</title>
<polygon fill="none" stroke="black"
points="534.12,-349.5 467.88,-349.5 467.88,-313.5 540.12,-313.5 540.12,-343.5 534.12,-349.5" />
<polyline fill="none" stroke="black" points="534.12,-349.5 534.12,-343.5" />
<polyline fill="none" stroke="black" points="540.12,-343.5 534.12,-343.5" />
<text text-anchor="middle" x="504" y="-326.45" font-family="Times,serif"
font-size="14.00">Client key</text>
</g>
<!-- client_key&#45;&gt;client_cert -->
<g id="edge13" class="edge">
<title>client_key&#45;&gt;client_cert</title>
<path fill="none" stroke="black" d="M504,-313.01C504,-299.89 504,-281.64 504,-266.37" />
<polygon fill="black" stroke="black"
points="507.5,-266.43 504,-256.43 500.5,-266.43 507.5,-266.43" />
<text text-anchor="middle" x="534.75" y="-282.2" font-family="Times,serif"
font-size="14.00">Private key</text>
</g>
<!-- ca_cert_slave -->
<g id="node19" class="node">
<title>ca_cert_slave</title>
<polygon fill="none" stroke="black"
points="671,-254.5 619,-254.5 619,-218.5 677,-218.5 677,-248.5 671,-254.5" />
<polyline fill="none" stroke="black" points="671,-254.5 671,-248.5" />
<polyline fill="none" stroke="black" points="677,-248.5 671,-248.5" />
<text text-anchor="middle" x="648" y="-231.45" font-family="Times,serif"
font-size="14.00">CA cert</text>
</g>
<!-- ca_cert_slave&#45;&gt;replikey_slave_db -->
<g id="edge15" class="edge">
<title>ca_cert_slave&#45;&gt;replikey_slave_db</title>
<path fill="none" stroke="black"
d="M642.45,-218.08C636.85,-203.4 626.77,-182.99 611,-171.5 585.53,-152.94 552.21,-143.86 522.41,-139.54" />
<polygon fill="black" stroke="black"
points="523.05,-136.09 512.69,-138.3 522.17,-143.03 523.05,-136.09" />
<text text-anchor="middle" x="640.5" y="-174.7" font-family="Times,serif"
font-size="14.00">Trust</text>
</g>
<!-- ca_cert_slave&#45;&gt;replikey_slave_redis -->
<g id="edge17" class="edge">
<title>ca_cert_slave&#45;&gt;replikey_slave_redis</title>
<path fill="none" stroke="black"
d="M654.44,-218.26C659.98,-203.44 668.07,-181.8 674.53,-164.5" />
<polygon fill="black" stroke="black"
points="677.75,-165.89 677.97,-155.3 671.2,-163.44 677.75,-165.89" />
<text text-anchor="middle" x="685.15" y="-174.7" font-family="Times,serif"
font-size="14.00">Trust</text>
</g>
</g>
</svg>