summaryrefslogtreecommitdiff
path: root/frontends/scripts/acme.sh.tpl
blob: 3b3b35fb4a5805d8ba7b27fbb0e5bf4a3e3eea2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/sh

MY_IP=`ifconfig vio0 | awk '$1 == "inet" { print $2 }'`

# New hosts may not have a cert, just copy foo.zone as a
# placeholder, so that services can at least start proprely.
# cert will be updated with next acme-client runs!
ensure_placeholder_cert () {
    host=$1
    copy_from=foo.zone

    if [ ! -f /etc/ssl/$host.crt ]; then
        cp -v /etc/ssl/$copy_from.crt /etc/ssl/$host.crt
        cp -v /etc/ssl/$copy_from.fullchain.pem /etc/ssl/$host.fullchain.pem
        cp -v /etc/ssl/private/$copy_from.key /etc/ssl/private/$host.key
    fi
}

handle_cert () {
    host=$1
    host_ip=`host $host | awk '/has address/ { print $(NF) }'`

    grep -q "^server \"$host\"" /etc/httpd.conf
    if [ $? -ne 0 ]; then
        echo "Host $host not configured in httpd, skipping..."
        return
    fi
    ensure_placeholder_cert "$host"

    if [ "$MY_IP" != "$host_ip" ]; then
        echo "Not serving $host, skipping..."
        return
    fi

    # Create symlink, so that relayd also can read it.
    crt_path=/etc/ssl/$host
    if [ -e $crt_path.crt ]; then
        rm $crt_path.crt
    fi
    ln -s $crt_path.fullchain.pem $crt_path.crt
    # Requesting and renewing certificate.
    /usr/sbin/acme-client -v $host
}

has_update=no
<% for my $host (@$acme_hosts) { -%>
handle_cert <%= $host %>
if [ $? -eq 0 ]; then
    has_update=yes
fi
<% unless ($host eq 'blowfish.buetow.org' or $host eq 'fishfinger.buetow.org') { -%>
handle_cert standby.<%= $host %>
if [ $? -eq 0 ]; then
    has_update=yes
fi
<% } -%>
<% } -%>

# Current server's FQDN (e.g. for mail server certs)
handle_cert <%= "$hostname.$domain" %>
if [ $? -eq 0 ]; then
    has_update=yes
fi

# Pick up the new certs.
if [ $has_update = yes ]; then
    # TLS offloading fully moved to relayd now
    # /usr/sbin/rcctl reload httpd

    /usr/sbin/rcctl check relayd && /usr/sbin/rcctl reload relayd || /usr/sbin/rcctl restart relayd
    /usr/sbin/rcctl restart smtpd
fi