All checks were successful
CI / lint (pull_request) Successful in 30s
CI / validate-json (pull_request) Successful in 24s
CI / markdown-links (pull_request) Successful in 16s
CI / test (pull_request) Successful in 1m47s
CI / lint (push) Successful in 28s
CI / test (push) Successful in 1m56s
CI / validate-json (push) Successful in 24s
CI / markdown-links (push) Successful in 21s
Deploy site / deploy (push) Successful in 5s
Build ISO / build-iso (push) Successful in 20m27s
The logo vote on furtka.org closed with M 29 · R 13 (42 votes). - website/tools/brand-assets.py generates every brand file from the logo-assets.py geometry: favicons (small-size tier, accent with a dark-mode variant) for website / webinstaller / on-box UI, 180 px apple-touch-icon, 1200x630 default share card, 640x480 syslinux splash, and docs/brand/ (mark, small mark, lockups, 20-column console art) - website: header mark, favicon, touch icon, default og:image; /logo/ now shows the final result (static counts, winner highlighted, no voting UI or poll.js); homepage link reads 'meet our new logo' - webinstaller: M in the header + tab icon - on-box UI: .brand mark via CSS mask in brand red (not the UI's green), favicon on every page, brand line on the login page - console: M art above the text of /etc/issue on the installed box (furtka-welcome) and the live ISO (furtka-update-issue) - ISO: build.sh swaps releng's Arch splash for the Furtka one - README shows the lockup Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wq1hzUp4ZmCKHDuLKCnu73
160 lines
6.8 KiB
HTML
160 lines
6.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
<title>Install local HTTPS · Furtka</title>
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<link rel="stylesheet" href="/style.css">
|
|
</head>
|
|
<body>
|
|
<main class="wrap">
|
|
<nav class="nav">
|
|
<a class="brand" href="/">Furtka</a>
|
|
<div class="nav-links">
|
|
<a href="/">Home</a>
|
|
<a href="/apps">Apps</a>
|
|
<a href="/settings/" aria-current="page">Settings</a>
|
|
</div>
|
|
</nav>
|
|
|
|
<h1>Install local HTTPS</h1>
|
|
<p class="lede">
|
|
Trust the Furtka root CA on your device, then reach this box at
|
|
<code>https://<span id="hostname">—</span>/</code> with a green padlock.
|
|
HTTP stays available until you enable the redirect in
|
|
<a class="inline-link" href="/settings/">Settings</a>.
|
|
</p>
|
|
|
|
<section>
|
|
<h2>Download the CA</h2>
|
|
<div class="card">
|
|
<dl class="kv">
|
|
<dt>Fingerprint (SHA-256)</dt><dd id="fingerprint">—</dd>
|
|
</dl>
|
|
<p class="hint">
|
|
Check this fingerprint matches what <code>/settings</code> shows before
|
|
trusting it on another device. The root CA is unique to this box.
|
|
</p>
|
|
<div class="update-actions">
|
|
<button id="download-btn" class="secondary">Download rootCA.crt</button>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Linux (system-wide)</h2>
|
|
<div class="card">
|
|
<p class="hint">Arch / Fedora / RHEL:</p>
|
|
<pre>sudo cp rootCA.crt /etc/ca-certificates/trust-source/anchors/furtka-local.crt
|
|
sudo update-ca-trust</pre>
|
|
<p class="hint">Debian / Ubuntu:</p>
|
|
<pre>sudo cp rootCA.crt /usr/local/share/ca-certificates/furtka-local.crt
|
|
sudo update-ca-certificates</pre>
|
|
<p class="hint">
|
|
Firefox keeps its own certificate store. After the above, open
|
|
<code>about:preferences#privacy</code> → <em>View Certificates</em> →
|
|
<em>Authorities</em> → <em>Import</em>, pick <code>rootCA.crt</code>,
|
|
tick <em>Trust this CA to identify websites</em>.
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>macOS</h2>
|
|
<div class="card">
|
|
<ol>
|
|
<li>Double-click <code>rootCA.crt</code>. Keychain Access opens.</li>
|
|
<li>When prompted, add it to the <strong>System</strong> keychain.</li>
|
|
<li>Find the <em>Furtka</em> entry, double-click, expand <em>Trust</em>,
|
|
set <em>When using this certificate</em> to <strong>Always Trust</strong>.</li>
|
|
<li>Close the window — you will be asked for your password.</li>
|
|
</ol>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Windows</h2>
|
|
<div class="card">
|
|
<ol>
|
|
<li>Double-click <code>rootCA.crt</code>.</li>
|
|
<li>Click <strong>Install Certificate</strong>.</li>
|
|
<li>Choose <strong>Local Machine</strong> (requires admin) and click <em>Next</em>.</li>
|
|
<li>Select <strong>Place all certificates in the following store</strong> →
|
|
<em>Browse</em> → <strong>Trusted Root Certification Authorities</strong>.</li>
|
|
<li>Finish. Chrome and Edge pick this up immediately. Firefox keeps its
|
|
own store — import the same file via Firefox settings.</li>
|
|
</ol>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Android</h2>
|
|
<div class="card">
|
|
<ol>
|
|
<li>Transfer <code>rootCA.crt</code> to the device (AirDrop, email,
|
|
USB — whatever is handy).</li>
|
|
<li>Settings → <em>Security</em> (or <em>Security & privacy</em>)
|
|
→ <em>More security settings</em> → <em>Encryption & credentials</em>
|
|
→ <em>Install a certificate</em> → <strong>CA certificate</strong>.</li>
|
|
<li>Confirm the warning, then pick the file.</li>
|
|
</ol>
|
|
<p class="hint">
|
|
Android 11+ only trusts user-installed CAs for browsers by default.
|
|
Some apps (banking, Play services) ignore them. Not a Furtka bug —
|
|
an Android policy choice.
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>iOS & iPadOS</h2>
|
|
<div class="card">
|
|
<p class="hint">
|
|
Honest warning: iOS needs a signed configuration profile for a
|
|
properly trusted CA. What works today:
|
|
</p>
|
|
<ol>
|
|
<li>Email <code>rootCA.crt</code> to yourself and open the attachment
|
|
in Mail. iOS prompts to install a profile.</li>
|
|
<li>Settings → <em>General</em> → <em>VPN & Device Management</em>
|
|
→ tap the Furtka profile → <strong>Install</strong>.</li>
|
|
<li>Settings → <em>General</em> → <em>About</em> → <em>Certificate
|
|
Trust Settings</em> → toggle <strong>Furtka</strong> on.</li>
|
|
</ol>
|
|
<p class="hint">
|
|
A packaged <code>.mobileconfig</code> makes this smoother; it's on
|
|
the roadmap but not in this release.
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<footer>
|
|
<p>Furtka · <a href="https://furtka.org">furtka.org</a></p>
|
|
</footer>
|
|
</main>
|
|
|
|
<script>
|
|
document.getElementById('hostname').textContent = location.hostname;
|
|
|
|
document.getElementById('download-btn').addEventListener('click', () => {
|
|
const a = document.createElement('a');
|
|
a.href = '/rootCA.crt';
|
|
a.download = 'furtka-local-rootCA.crt';
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
a.remove();
|
|
});
|
|
|
|
(async () => {
|
|
try {
|
|
const r = await fetch('/api/furtka/https/status', { cache: 'no-store' });
|
|
if (!r.ok) return;
|
|
const s = await r.json();
|
|
document.getElementById('fingerprint').textContent =
|
|
s.fingerprint_sha256 || 'waiting for Caddy…';
|
|
} catch (e) { /* keep the placeholder */ }
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|