diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/DnsChallenge.java b/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/DnsChallenge.java index 906e5170..ab772bba 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/DnsChallenge.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/DnsChallenge.java @@ -66,6 +66,8 @@ public class DnsChallenge extends GenericChallenge { if (authorization == null) { throw new IllegalStateException("Challenge has not been authorized yet."); } + cb.put(KEY_TYPE, getType()); + cb.put(KEY_TOKEN, getToken()); cb.put(KEY_KEY_AUTHORIZSATION, authorization); } diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/HttpChallenge.java b/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/HttpChallenge.java index 18bd9662..c6c2e4a0 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/HttpChallenge.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/HttpChallenge.java @@ -70,6 +70,8 @@ public class HttpChallenge extends GenericChallenge { if (authorization == null) { throw new IllegalStateException("Challenge has not been authorized yet."); } + cb.put(KEY_TYPE, getType()); + cb.put(KEY_TOKEN, getToken()); cb.put(KEY_KEY_AUTHORIZSATION, authorization); } diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/AbstractAcmeClient.java b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/AbstractAcmeClient.java index a6285db6..ed9b8bea 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/AbstractAcmeClient.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/AbstractAcmeClient.java @@ -151,6 +151,8 @@ public abstract class AbstractAcmeClient implements AcmeClient { Map result = conn.readJsonResponse(); + auth.setStatus((String) result.get("status")); + @SuppressWarnings("unchecked") Collection> challenges = (Collection>) result.get("challenges"); @@ -194,7 +196,7 @@ public abstract class AbstractAcmeClient implements AcmeClient { challenge.marshall(claims); int rc = conn.sendSignedRequest(challenge.getUri(), claims, session, account); - if (rc != HttpURLConnection.HTTP_ACCEPTED) { + if (rc != HttpURLConnection.HTTP_OK && rc != HttpURLConnection.HTTP_ACCEPTED) { conn.throwAcmeException(); } @@ -224,10 +226,12 @@ public abstract class AbstractAcmeClient implements AcmeClient { claims.putBase64("csr", csr); int rc = conn.sendSignedRequest(resourceUri(Resource.NEW_CERT), claims, session, account); - if (rc != HttpURLConnection.HTTP_CREATED) { + if (rc != HttpURLConnection.HTTP_CREATED && rc != HttpURLConnection.HTTP_ACCEPTED) { conn.throwAcmeException(); } + // HTTP_ACCEPTED requires Retry-After header to be set + // Optionally returns the certificate. Currently it is just ignored. // X509Certificate cert = conn.readCertificate();