[pve-devel] [PATCH manager v2] ACMEv2 order "ready" status update
Dominik Csapak
d.csapak at proxmox.com
Wed Jun 20 11:56:05 CEST 2018
since letsencrypt updates their implementation to the ACMEv2 spec [1],
we should correctly parse the order status
1: https://community.letsencrypt.org/t/acmev2-order-ready-status/62866
note that we (for now) try to be compatbile to both versions,
with and without ready state, this can be changed when all letsencrypt
apis have changed
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v1:
* try finalizing during 'pending' state with max 5 tries
* change sleep to 5 seconds after finalizing
PVE/API2/ACME.pm | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/PVE/API2/ACME.pm b/PVE/API2/ACME.pm
index 3c85458b..b1bb6261 100644
--- a/PVE/API2/ACME.pm
+++ b/PVE/API2/ACME.pm
@@ -90,14 +90,36 @@ my $order_certificate = sub {
print "\nCreating CSR\n";
my ($csr, $key) = PVE::Certificate::generate_csr(identifiers => $order->{identifiers});
- print "Finalizing order\n";
- $acme->finalize_order($order, PVE::Certificate::pem_to_der($csr));
-
+ my $finalize_error_cnt = 0;
print "Checking order status\n";
while (1) {
$order = $acme->get_order($order_url);
if ($order->{status} eq 'pending') {
- print "still pending, trying again in 30 seconds\n";
+ print "still pending, trying to finalize order\n";
+ # FIXME
+ # to be compatible with and without the order ready state
+ # we try to finalize even at the 'pending' state
+ # and give up after 5 unsuccessful tries
+ # this can be removed when the letsencrypt api
+ # definitely has implemented the 'ready' state
+ eval {
+ $acme->finalize_order($order, PVE::Certificate::pem_to_der($csr));
+ };
+ if (my $err = $@) {
+ die $err if $finalize_error_cnt >= 5;
+
+ $finalize_error_cnt++;
+ warn $err;
+ }
+ sleep 5;
+ next;
+ } elsif ($order->{status} eq 'ready') {
+ print "Order is ready, finalizing order\n";
+ $acme->finalize_order($order, PVE::Certificate::pem_to_der($csr));
+ sleep 5;
+ next;
+ } elsif ($order->{status} eq 'processing') {
+ print "still processing, trying again in 30 seconds\n";
sleep 30;
next;
} elsif ($order->{status} eq 'valid') {
--
2.11.0
More information about the pve-devel
mailing list