Кто-нибудь использовал этот acme-клиент https://github.com/zero11it/acme-client
Раньше он работал, но теперь не работает и выбрасывает
it.zero11.acme.AcmeException: No challenge completed.
at it.zero11.acme.Acme.getCertificate(Acme.java:253)
Актуальный код от Git здесь https://github.com/zero11it/acme-client/blob/42af8c2c06ea481838a545dc90de8dfef945ca4a/src/main/java/it/zero11/acme/Acme.java#L252
Какое может быть решение, чтобы преодолеть трудности?
Я прошел по коду и обнаружил, что:
for (JsonNode challange:authorizationResponseJson.get(CHALLENGES_KEY)){
String challengeType = challange.get(CHALLENGE_TYPE_KEY).asText();
String token = challange.get(CHALLENGE_TOKEN_KEY).asText();
String uri = challange.get(CHALLENGE_URI_KEY).asText();
if (handleChallenge(userKey, domain, challengeListener, challengeType, token, uri)){
challengeURI = uri; // <-- null at last loop
challengeToken = token;
break;
}
}
В некоторой точке цикла uri
, таким образом, challengeURI
, не равен нулю, но он становится нулевым в одной точке.
Вот мой полный код:
AcmeChallengeListener challengeListener = new HttpChallengeListener(authToken, subdomain, userId, domains[0], "");
Acme acme = new Acme(CA_PRODUCTION_URL, new DefaultCertificateStorage(true), true, true);
X509Certificate cert = acme.getCertificate(domains, AGREEMENT_URL, contacts, challengeListener);
KeyPair domainKey = acme.getCertificateStorage().getDomainKeyPair(domains);
PrivateKey privateKey = domainKey.getPrivate();
String fullchain = CertificateHelper.x509ToBase64PEMString(cert);
String privateKeyString = CertificateHelper.writePrivateKeyToPEMString(privateKey);