]>
Raphaël G. Git Repositories - acme/blob - acmeconf
bfab64efe25611d27975ac25ecdffe3d258fc42d
   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; 
  45 # Strip and enable debug 
  46 for (my $i = 0; $i <= $#ARGV; $i++) { 
  48         if ($ARGV[$i] =~ /^(?:(\-r|\-\-redhat)(?:=([^-][a-zA-Z0-9_\.,-]+))?)$/) { 
  50                         push(@redhat, [split(',', $2)]); 
  51                 # Extract next parameter 
  52                 } elsif(defined($ARGV[$i+1]) && $ARGV[$i+1] =~ /^([^-][a-zA-Z0-9_\.,-]+)$/) { 
  53                         push(@redhat, [split(',', $1)]); 
  57                         push(@redhat, ['www.example.com','example.com','...']); 
  60         } elsif ($ARGV[$i] =~ /^(?:(\-d|\-\-debian)(?:=([^-][a-zA-Z0-9_\.,-]+))?)$/) { 
  62                         push(@debian, [split(',', $2)]); 
  63                 # Extract next parameter 
  64                 } elsif(defined($ARGV[$i+1]) && $ARGV[$i+1] =~ /^([^-][a-zA-Z0-9_\.,-]+)$/) { 
  65                         push(@debian, [split(',', $1)]); 
  69                         push(@debian, ['www.example.com','example.com','...']); 
  72         } elsif ($ARGV[$i] =~ /^(?:(\-t|\-\-term)(?:=(https:\/\
/letsencrypt\.org\/documents\
/[a-zA-Z0-9\._-]+\.pdf))?)$/) { 
  77                 # Extract next parameter 
  78                 } elsif(defined($ARGV[$i+1]) && $ARGV[$i+1] =~ /^(https:\/\
/letsencrypt\.org\/documents\
/[a-zA-Z0-9\._-]+\.pdf)$/) { 
  84                         print 'Term parameter without valid link'."\n"; 
  91 if (scalar(@redhat) < 1 && scalar(@debian) < 1) { 
  92         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"; 
  96 # Append redhat style examples 
  97 for my $key (@redhat) { 
  98         my $domain = shift @{$key}; 
 100         tie
(%{$root{certificates
}[$#{$root{certificates
}}+1]}, 'Tie::IxHash', ( 
 103                 cert 
=> '/etc/pki/tls/certs/'.$domain.'.pem', 
 106                 key 
=> '/etc/pki/tls/private/'.$domain.'.pem', 
 107                 # Private account key 
 109                 account 
=> '/etc/acme/account.pem', 
 112                 mail 
=> 'webmaster@'.$domain, 
 119                 # Production certificate 
 121                 #XXX: set to 1 for production 
 126 # Append debian style examples 
 127 for my $key (@debian) { 
 128         my $domain = shift @{$key}; 
 130         tie
(%{$root{certificates
}[$#{$root{certificates
}}+1]}, 'Tie::IxHash', ( 
 133                 cert 
=> '/etc/ssl/certs/'.$domain.'.crt', 
 136                 key 
=> '/etc/ssl/private/'.$domain.'.key', 
 137                 # Private account key 
 139                 account 
=> '/etc/acme/account.pem', 
 142                 mail 
=> 'webmaster@'.$domain, 
 149                 # Production certificate 
 151                 #XXX: set to 1 for production 
 156 # Display configuration template 
 157 print to_json
(\
%root, {pretty 
=> 1});