Commit 2dac52c1 authored by Jan Kasprzak's avatar Jan Kasprzak
Browse files

ACME challenge via HTTP redirect

Removed the le-acme-put-token script and replaced it with HTTP
redirect to fadmin.fi.muni.cz. This makes the configuration
more compact and simple - only one client-side script.
parent 0e37b073
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -59,16 +59,24 @@ Pro Apache 2.4 můžete použít tyto direktivy v souboru `httpd.conf`:

* Ověřte si úroveň bezpečnosti konfigurace SSL, například dle návodu na <https://www.fi.muni.cz/tech/unix/ssl-apache.xhtml> (zakázání slabých šifer, zranitelných protokolů a podobně).

* Nainstalujte skripty `le-acme-put-token` a `le-renewed-cert` do systémových
adresářů a povolte k nim přístup přes SSH z počítače `thetis.fi.muni.cz`:
* Vytvořte přesměrování URL `/.well-known/acme-challenge` na server `fadmin.fi.muni.cz`. Pro Apache 2.4 můžete použít následující direktivu
v souboru `httpd.conf`:

```
    Redirect temp /.well-known/acme-challenge/ http://fadmin.fi.muni.cz/.well-known/acme-challenge/

```

* Nainstalujte skript `le-renewed-cert` do systémových
adresářů a povolte k němu přístup přes SSH z počítače `thetis.fi.muni.cz`:

```shell
    cp le-acme-put-token le-renewed-cert /usr/local/sbin/
    cp le-renewed-cert /usr/local/sbin/
    cat letsencrypt-fi-authorized-keys >> /root/.ssh/authorized_keys
```

* V obou skriptech je na začátku konfigurace, kde můžete upravit například
jiné umístění souboru s certifikáty, stromu webových stránek nebo příkazu
* Ve skriptu je na začátku konfigurace, kde můžete upravit například
jiné umístění souboru s certifikáty nebo příkazu
pro znovunačtení konfigurace HTTPS serveru.

* Nyní už zbývá jen požádat `unix@fi` o vystavení certifikátu. K žádosti přiložte

le-acme-put-token

deleted100755 → 0
+0 −72
Original line number Diff line number Diff line
#!/usr/bin/perl -w
#
# Skript na zverejneni ACME challenge pro vygenerovani
# certifikatu Let's Encrypt.
#
# Zbastlil Jan "Yenya" Kasprzak <kas@fi.muni.cz>, 2016-12-02
#

# Skript zpracovava tri radky standardniho vstupu:
#
# FQDN
# jmeno_souboru
# obsah_souboru
#
# Cilem je umistit obsah_souboru na URL
# http://FQDN/.well-known/acme-challenge/jmeno_souboru
#
# FQDN se ve skriptu nepouziva, je zde jen pro pripad, kdy by si
# adresat chtel umistovat token do ruznych DocumentRootu pro ruzne
# VirtualHosty (ruzna FQDN).
# Jednodussi varianta je namapovat adresar vsech virtualhostu (FQDN)
# do jednoho umisteni - napriklad v httpd.conf Apache pridat mimo sekce
# <VirtualHost> takovouto direktivu:
#
# Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/ 

use strict;

# Kam se ma vyzva davat
my $destdir = '/var/www/html/.well-known/acme-challenge';

# regularni vyraz pro kontrolu retezce na base64url
my $valid_base64_url_re = qr(\A[a-zA-Z0-9_-]+\z);

my ($domain, $filename, $content) = map { chomp $_; $_ } <STDIN>;

die "Na vstupu nejsou tri radky: ocekavam FQDN, jmeno_souboru a obsah_souboru."
	if !defined $content;

die "Nepovolene znaky v domene"
	if $domain !~ /\A[a-zA-Z0-9\.-]+\z/;
# Toto je jen vzorovy skript, domenu ignorujeme

die "Nepovolene znaky v nazvu souboru"
	if $filename !~ $valid_base64_url_re;

die "Nepovolene znaky v obsahu souboru"
	if $filename !~ $valid_base64_url_re;

my $path = "$destdir/$filename";

# Stare vyzvy promazeme
for my $oldfile (<$destdir/*>) {
	my $mtime = (stat $oldfile)[9] // time;
	if (time - $mtime > 86_400) {
		unlink $oldfile; # ignorovat chyby
	}
}

open my $fh, '>', $path
	or die "Nelze otevrit $path pro zapis: $!";

print $fh $content, "\n"
	or die "Nelze zapisovat do $path: $!";

close $fh;

print "$content ulozen do $filename pro $domain\n";

# Vsechno OK.
exit 0;
+0 −2
Original line number Diff line number Diff line
# Let's encrypt publikování ACME tokenu
from="thetis.fi.muni.cz,thetis.ip6.fi.muni.cz",no-pty,no-port-forwarding,no-x11-forwarding,command="/usr/local/sbin/le-acme-put-token" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCljHE3G3tZscWtccK88skdp0OF7X5xa135hApJQ0VvLBLhOWRQOQdFuZQxPSKBmcA7QQeTS8GKpePPps2QV7DL5uqezUNFWzhs5Bubp+RPJPB6W+BVabIYjW+QVYgmvzhTo47H4YRHA4UKym0xmB80PcpKSu0Npsldg9EB5Chq7tQ97VQA+pfUQHA5/neFyvHqAJEysuUR1Rgh5IDgButjASxpORq1Lc3WtBP2K582dfLpiO/X974mVj3FnaBViSRZWQNyUZJXeb/GvE8yR03B/mZdG0DHk6CC73/fxNeRAyeBI2fMxEkQ+KFJOnMpDM3mogde8uL94prR4pgA2zGU9egcYRlnFYlPqJhvqT4z4iDPkhrfHh8XsUMC3SsIUrWsnh4uWFz/DvwHG6aXEObSj1VxKqH/LbDOMzaVrhwhQ3P7aH+zP+2tLD3njA+lnYM2bI5McOAQ4zsdio5oh6Aqj6Db9ajX8mWnqytlpoMo34wZMlOJyu75q+HI+YuflUr8thDqLOJxs0bvRT9GmipfRfsy6D5DqREmNFh28r8YY62nkX5Ww0z60qw8Oqrlik29fJmMJMrlYihYy1hmj/rXEVF5YMHbjsAofFplEodhzMMLrzbu3rvYuwlQsfAi727Zx/BkePYJau0HOb6lx1/3E3ueCZCe3+oRXHq6A0isMQ== le-acme-put-token@fi.muni.cz
# Let's Encrypt instalace nového certifikátu
from="thetis.fi.muni.cz,thetis.ip6.fi.muni.cz",command="/usr/local/sbin/le-renewed-cert" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC/m1DJzTbPkfXzfJ+S0SqBIrNfJG4a80QqQlSBl38XplL5ngtDx6btvwOl8/kC+OrPExAqLTzf5vd1bASMoxxHDR7VmMGgb+M7TZQ56Z+mDzMJdCS5H7IPWcq1jKBmOTXaW+bmtHPIxRXLBvLtZgI9GET308wzru4XSyvHvftGah8rsX+ATXDbxwevsw6T0bpXL/m5N4AsHR4bbKjN7/qjkYBOsWjdhAlBKvO+wl6tosXlWZLEGzn16ls0EQlasiaakVPjC0EiUm6bZlbijV40xYkPLMML8Xd6PYFWCRalK8udZk7ntNhHXNDhoW58AiozGOwPaiD0+rtCSkgf/Jd8I13yzEMp07ub2WsX2tjEXLooMUQ2SRh3a/wdBf6t+Bpmob69g/LMGwChdRSjzz8pM3kXzJ3KZcwfj0kQcbQJkdMnnbk95CI8TeXy3AcPhabIXumYPRz+hfY1Y9grlqAZwsYR9JSzgsWs254x/FfRTmWRHHE2hNTsbNijb3OeG6xuMEyMX2hO1WWSzB0ClHDcqIAe0DnCaRGhk/Rw0+2JpqlLx3AUliwtBDU0dR/TnOEqx0/pNPJHKCL7CHv+dq4cfNflxeXeyP6kQTgBtg7Rb5HVuw18WCgNATu0XozkvkvvCUuS3Uc3PeXDXW6XXKaSmclmsS5FMJIBsu0ZtNNqfw== le-renewed-cert@fi.muni.cz