]>
Raphaël G. Git Repositories - acme/blob - acmeconf
3 # This program is free software: you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation, either version 3 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 # Copyright (C) 2016 - 2017 Raphaël Gertz <acme@rapsys.eu>
22 # Load required modules
27 use POSIX
qw(EXIT_SUCCESS EXIT_FAILURE);
37 tie
(%root, 'Tie::IxHash', thumbprint
=> '/etc/acme/thumbprint', term
=> 'https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf', pending
=> '/tmp/acme.pending', certificates
=> []);
42 # Strip and enable prod
43 @ARGV = map { if ($_ eq '-p') { $prod = 1; (); } else { $_; } } @ARGV;
47 # Strip and enable debug
48 for (my $i = 0; $i <= $#ARGV; $i++) {
50 if ($ARGV[$i] =~ /^(?:(\-r|\-\-redhat)(?:=([^-][a-zA-Z0-9_\.,-]+))?)$/) {
52 push(@redhat, [split(',', $2)]);
53 # Extract next parameter
54 } elsif(defined($ARGV[$i+1]) && $ARGV[$i+1] =~ /^([^-][a-zA-Z0-9_\.,-]+)$/) {
55 push(@redhat, [split(',', $1)]);
59 push(@redhat, ['www.example.com','example.com','...']);
62 } elsif ($ARGV[$i] =~ /^(?:(\-d|\-\-debian)(?:=([^-][a-zA-Z0-9_\.,-]+))?)$/) {
64 push(@debian, [split(',', $2)]);
65 # Extract next parameter
66 } elsif(defined($ARGV[$i+1]) && $ARGV[$i+1] =~ /^([^-][a-zA-Z0-9_\.,-]+)$/) {
67 push(@debian, [split(',', $1)]);
71 push(@debian, ['www.example.com','example.com','...']);
74 } elsif ($ARGV[$i] =~ /^(?:(\-t|\-\-term)(?:=(https:\/\
/letsencrypt\.org\/documents\
/[a-zA-Z0-9\._-]+\.pdf))?)$/) {
79 # Extract next parameter
80 } elsif(defined($ARGV[$i+1]) && $ARGV[$i+1] =~ /^(https:\/\
/letsencrypt\.org\/documents\
/[a-zA-Z0-9\._-]+\.pdf)$/) {
86 print 'Term parameter without valid link'."\n";
93 if (scalar(@redhat) < 1 && scalar(@debian) < 1) {
94 print "Usage: $0 [(-d|--debian)[=example.com[,...]] [(-r|--redhat)[=example.com[,...]]] [(-t|--term)[=https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf]] [...] > /etc/acme/config\n";
98 # Append redhat style examples
99 for my $key (@redhat) {
100 my $domain = shift @{$key};
102 tie
(%{$root{certificates
}[$#{$root{certificates
}}+1]}, 'Tie::IxHash', (
105 cert
=> '/etc/pki/tls/certs/'.$domain.'.pem',
108 key
=> '/etc/pki/tls/private/'.$domain.'.pem',
109 # Private account key
111 account
=> '/etc/acme/account.pem',
114 mail
=> 'webmaster@'.$domain,
121 # Production certificate
123 #XXX: set to 1 for production
128 # Append debian style examples
129 for my $key (@debian) {
130 my $domain = shift @{$key};
132 tie
(%{$root{certificates
}[$#{$root{certificates
}}+1]}, 'Tie::IxHash', (
135 cert
=> '/etc/ssl/certs/'.$domain.'.crt',
138 key
=> '/etc/ssl/private/'.$domain.'.key',
139 # Private account key
141 account
=> '/etc/acme/account.pem',
144 mail
=> 'webmaster@'.$domain,
151 # Production certificate
153 #XXX: set to 1 for production
158 # Display configuration template
159 print to_json
(\
%root, {pretty
=> 1});