]> Sergey Matveev's repositories - tofuproxy.git/blob - doc/index.texi
ed3bd99d67c24f17d48d21bd6be62c7480377d7d
[tofuproxy.git] / doc / index.texi
1 \input texinfo
2 @documentencoding UTF-8
3 @settitle tofuproxy
4
5 @copying
6 Copyright @copyright{} 2021-2022 @email{stargrave@@stargrave.org, Sergey Matveev}
7 @end copying
8
9 @node Top
10 @top tofuproxy
11
12 @command{tofuproxy} is
13 @url{https://www.gnu.org/philosophy/free-sw.html, free software}
14 flexible HTTP/HTTPS proxy server, TLS terminator, X.509 TOFU manager,
15 @url{https://en.wikipedia.org/wiki/Web_ARChive, WARC} and
16 @url{https://en.wikipedia.org/wiki/Gemini_(protocol), geminispace}
17 browser, written on @url{https://go.dev/, Go} with following
18 capabilities:
19
20 @itemize
21
22 @item
23 Full TLS connection termination between Web-servers and
24 @command{tofuproxy} itself. TLS 1.3, session resumption, GOST
25 cryptography (if built with @url{http://www.gostls13.cypherpunks.ru/,
26 gostls13}) support. Connection between @command{tofuproxy} and browser
27 itself uses ephemeral on-the-fly generated certificates with proper
28 domain name.
29
30 @item
31 @url{https://http2.github.io/, HTTP/2} (if negotiated with ALPN) and
32 HTTP keep-alives are supported.
33
34 @item
35 Default Go's @code{crypto/x509} checks are applied to all certificates.
36 If they pass, then certificate chain is saved on the disk (TOFU,
37 trust-on-first-use). Future connections are compared against it, warning
38 you about SPKI change (SPKI pinning) and waiting for your decision
39 either to accept new chain (possibly once per session), or reject it.
40 Even if native Go's checks are failed (for example domain still does not
41 use @code{SubjectAltName} extension), you can still make a decision to
42 forcefully trust the domain.
43
44 @item
45 Optional @url{https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities, DANE-EE} check.
46
47 @item
48 TLS client certificates are supported too.
49
50 @item
51 HTTP-based authorization requests are intercepted and user/password
52 input dialogue is shown. It automatically loads initial form values from
53 @file{.netrc}.
54
55 @item
56 Permanent HTTP redirects are replaces with non-refreshing HTML page with
57 the link, to make you explicitly allow that step. Temporary redirects
58 are followed if it is neither @url{https://newsboat.org/, Newsboat}
59 nor @url{https://www.feeder.stargrave.org/, go.stargrave.org/feeder}
60 user-agent, not image paths.
61
62 @item
63 JPEG XL, AVIF and WebP images are transparently transcoded to PNG,
64 giving it back to the browser, not requiring it to support modern
65 effective image formats.
66
67 @item
68 Ability to load, index and browse WARC web archives, that are possibly
69 multi-segment/frame compressed with @command{gzip}/@command{zstd}.
70
71 @item
72 Ability to browse geminispace, transparently converting gemfiles to
73 HTMLs with URL rewriting.
74
75 @end itemize
76
77 And additional personal preferences:
78
79 @itemize
80
81 @item
82 Various spying domains (advertisement, tracking counters) are denied.
83
84 @item
85 @code{HEAD} method is forbidden. Xombrero likes it too much.
86
87 @item
88 @code{www.reddit.com} is redirected to @code{old.reddit.com} (because it
89 works without JavaScript and looks nicer).
90
91 @item
92 @url{https://habr.com/ru/all/, Хабр}'s resolution reduced images are
93 redirected to their full size variants.
94
95 @item
96 Web fonts downloads are forbidden.
97
98 @end itemize
99
100 @insertcopying
101
102 @include why.texi
103 @include usage.texi
104 @include spies.texi
105 @include certs.texi
106 @include tlsauth.texi
107 @include httpauth.texi
108 @include warcs.texi
109 @include gemini.texi