mirror of https://github.com/shred/acme4j
Some more documentation changes
parent
bc0338bcab
commit
434b349d20
|
@ -8,6 +8,12 @@ This Java client helps connecting to an ACME server, and performing all necessar
|
|||
|
||||
It is an independent open source implementation that is not affiliated with or endorsed by _Let's Encrypt_.
|
||||
|
||||
## Migration Guide
|
||||
|
||||
Major parts of the _acme4j_ API have changed in this version.
|
||||
|
||||
Please see the [migration guide](https://shredzone.org/maven/acme4j/migration.html) for how to update your code to the new API. It should just be a matter of a few minutes.
|
||||
|
||||
## Features
|
||||
|
||||
* Supports ACME protocol up to [draft 02](https://tools.ietf.org/html/draft-ietf-acme-acme-02)
|
||||
|
@ -19,7 +25,7 @@ It is an independent open source implementation that is not affiliated with or e
|
|||
|
||||
## Usage
|
||||
|
||||
* See the [online documentation](http://www.shredzone.org/maven/acme4j/) about how to use _acme4j_.
|
||||
* See the [online documentation](https://shredzone.org/maven/acme4j/) about how to use _acme4j_.
|
||||
* For a quick start, have a look at [the source code of an example](https://github.com/shred/acme4j/blob/master/acme4j-example/src/main/java/org/shredzone/acme4j/ClientTest.java).
|
||||
|
||||
## Beta Release
|
||||
|
|
|
@ -18,8 +18,6 @@ import java.net.URI;
|
|||
|
||||
/**
|
||||
* A generic ACME resource.
|
||||
*
|
||||
* @author Richard "Shred" Körber *
|
||||
*/
|
||||
public abstract class AcmeResource implements Serializable {
|
||||
private static final long serialVersionUID = -7930580802257379731L;
|
||||
|
|
|
@ -36,8 +36,6 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
/**
|
||||
* Represents an authorization request at the ACME server.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class Authorization extends AcmeResource {
|
||||
private static final long serialVersionUID = -3116928998379417741L;
|
||||
|
|
|
@ -34,8 +34,6 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
/**
|
||||
* Represents a certificate and its certificate chain.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class Certificate extends AcmeResource {
|
||||
private static final long serialVersionUID = 7381527770159084201L;
|
||||
|
|
|
@ -23,8 +23,6 @@ import org.shredzone.acme4j.exception.AcmeProtocolException;
|
|||
|
||||
/**
|
||||
* Contains metadata related to the provider.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class Metadata {
|
||||
|
||||
|
|
|
@ -45,8 +45,6 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
/**
|
||||
* Represents a registration at the ACME server.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class Registration extends AcmeResource {
|
||||
private static final long serialVersionUID = -8177333806740391140L;
|
||||
|
|
|
@ -30,8 +30,6 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
/**
|
||||
* A builder for a new account registration.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class RegistrationBuilder {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(RegistrationBuilder.class);
|
||||
|
|
|
@ -18,7 +18,6 @@ package org.shredzone.acme4j;
|
|||
*
|
||||
* @see <a href="https://tools.ietf.org/html/rfc5280#section-5.3.1">RFC 5280 Section
|
||||
* 5.3.1</a>
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public enum RevocationReason {
|
||||
|
||||
|
|
|
@ -36,8 +36,6 @@ import org.shredzone.acme4j.provider.AcmeProvider;
|
|||
* <p>
|
||||
* Note that {@link Session} objects are not serializable, as they contain a keypair and
|
||||
* volatile data.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class Session {
|
||||
private final Map<Resource, URI> resourceMap = new EnumMap<>(Resource.class);
|
||||
|
|
|
@ -15,8 +15,6 @@ package org.shredzone.acme4j;
|
|||
|
||||
/**
|
||||
* Status codes of challenges and authorizations.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public enum Status {
|
||||
|
||||
|
|
|
@ -45,8 +45,6 @@ import org.slf4j.LoggerFactory;
|
|||
* Subclasses must override {@link Challenge#acceptable(String)} so it only accepts the
|
||||
* own type. {@link Challenge#respond(ClaimBuilder)} should be overridden to put all
|
||||
* required data to the response.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class Challenge extends AcmeResource {
|
||||
private static final long serialVersionUID = 2338794776848388099L;
|
||||
|
|
|
@ -23,8 +23,6 @@ import org.shredzone.acme4j.exception.AcmeProtocolException;
|
|||
|
||||
/**
|
||||
* Implements the {@value TYPE} challenge.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class Dns01Challenge extends TokenChallenge {
|
||||
private static final long serialVersionUID = 6964687027713533075L;
|
||||
|
|
|
@ -20,8 +20,6 @@ import org.shredzone.acme4j.util.ClaimBuilder;
|
|||
|
||||
/**
|
||||
* Implements the {@value TYPE} challenge.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class Http01Challenge extends TokenChallenge {
|
||||
private static final long serialVersionUID = 3322211185872544605L;
|
||||
|
|
|
@ -21,8 +21,6 @@ import org.shredzone.acme4j.exception.AcmeProtocolException;
|
|||
|
||||
/**
|
||||
* Implements the {@value TYPE} challenge.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class OutOfBand01Challenge extends Challenge {
|
||||
private static final long serialVersionUID = -7459595198486630582L;
|
||||
|
|
|
@ -26,7 +26,6 @@ import org.shredzone.acme4j.exception.AcmeProtocolException;
|
|||
* @deprecated Use {@link TlsSni02Challenge} if supported by the CA. This challenge will
|
||||
* be removed when Let's Encrypt removes support for
|
||||
* {@link TlsSni01Challenge}.
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
@Deprecated
|
||||
public class TlsSni01Challenge extends TokenChallenge {
|
||||
|
|
|
@ -22,8 +22,6 @@ import org.shredzone.acme4j.exception.AcmeProtocolException;
|
|||
|
||||
/**
|
||||
* Implements the {@value TYPE} challenge.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class TlsSni02Challenge extends TokenChallenge {
|
||||
private static final long serialVersionUID = 8921833167878544518L;
|
||||
|
|
|
@ -24,8 +24,6 @@ import org.shredzone.acme4j.util.SignatureUtils;
|
|||
/**
|
||||
* An extension of {@link Challenge} that handles challenges with a {@code token} and
|
||||
* {@code keyAuthorization}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class TokenChallenge extends Challenge {
|
||||
private static final long serialVersionUID = 1634133407432681800L;
|
||||
|
|
|
@ -26,8 +26,6 @@ import org.shredzone.acme4j.util.ClaimBuilder;
|
|||
|
||||
/**
|
||||
* Connects to the ACME server and offers different methods for invoking the API.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public interface Connection extends AutoCloseable {
|
||||
|
||||
|
|
|
@ -52,8 +52,6 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
/**
|
||||
* Default implementation of {@link Connection}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class DefaultConnection implements Connection {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(DefaultConnection.class);
|
||||
|
|
|
@ -23,8 +23,6 @@ import java.net.URI;
|
|||
* <p>
|
||||
* Subclasses may reconfigure the {@link HttpURLConnection} and pin it to a concrete SSL
|
||||
* certificate.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class HttpConnector {
|
||||
|
||||
|
|
|
@ -15,8 +15,6 @@ package org.shredzone.acme4j.connector;
|
|||
|
||||
/**
|
||||
* Enumeration of resources.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public enum Resource {
|
||||
|
||||
|
|
|
@ -33,8 +33,6 @@ import org.shredzone.acme4j.exception.AcmeProtocolException;
|
|||
/**
|
||||
* An {@link Iterator} that fetches a batch of URIs from the ACME server, and
|
||||
* generates {@link AcmeResource} instances.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public abstract class ResourceIterator<T extends AcmeResource> implements Iterator<T> {
|
||||
|
||||
|
|
|
@ -18,8 +18,6 @@ import java.net.URI;
|
|||
/**
|
||||
* An exception that is thrown when there is a conflict with the request. For example,
|
||||
* this exception is thrown when a registration already exists.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeConflictException extends AcmeException {
|
||||
private static final long serialVersionUID = 7454201988845449591L;
|
||||
|
|
|
@ -15,8 +15,6 @@ package org.shredzone.acme4j.exception;
|
|||
|
||||
/**
|
||||
* A generic ACME exception.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeException extends Exception {
|
||||
private static final long serialVersionUID = -2935088954705632025L;
|
||||
|
|
|
@ -18,8 +18,6 @@ import java.io.IOException;
|
|||
/**
|
||||
* This exception is thrown when a network error occured while communicating with the
|
||||
* server.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeNetworkException extends AcmeException {
|
||||
private static final long serialVersionUID = 2054398693543329179L;
|
||||
|
|
|
@ -16,8 +16,6 @@ package org.shredzone.acme4j.exception;
|
|||
/**
|
||||
* This runtime exception is thrown on ACME protocol errors that should not occur. For
|
||||
* example, this exception is thrown when a server response could not be parsed.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeProtocolException extends RuntimeException {
|
||||
private static final long serialVersionUID = 2031203835755725193L;
|
||||
|
|
|
@ -17,8 +17,6 @@ import java.util.Date;
|
|||
|
||||
/**
|
||||
* An exception that is thrown when a rate limit was exceeded.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeRateLimitExceededException extends AcmeServerException {
|
||||
private static final long serialVersionUID = 4150484059796413069L;
|
||||
|
|
|
@ -18,8 +18,6 @@ import java.util.Date;
|
|||
/**
|
||||
* This exception is thrown when a server side process has not been completed yet, and the
|
||||
* server returned an estimated retry date.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeRetryAfterException extends AcmeException {
|
||||
private static final long serialVersionUID = 4461979121063649905L;
|
||||
|
|
|
@ -16,8 +16,6 @@ package org.shredzone.acme4j.exception;
|
|||
/**
|
||||
* An exception that is thrown when the ACME server returned an error. It contains
|
||||
* further details of the cause.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeServerException extends AcmeException {
|
||||
private static final long serialVersionUID = 5971622508467042792L;
|
||||
|
|
|
@ -16,8 +16,6 @@ package org.shredzone.acme4j.exception;
|
|||
/**
|
||||
* An exception that is thrown when the client is not authorized. The details will give
|
||||
* an explanation for the reasons (e.g. "client not on a whitelist").
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeUnauthorizedException extends AcmeServerException {
|
||||
private static final long serialVersionUID = 9064697508262919366L;
|
||||
|
|
|
@ -36,8 +36,6 @@ import org.shredzone.acme4j.exception.AcmeNetworkException;
|
|||
* <p>
|
||||
* Implementing classes must implement at least {@link AcmeProvider#accepts(URI)}
|
||||
* and {@link AbstractAcmeProvider#resolve(URI)}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public abstract class AbstractAcmeProvider implements AcmeProvider {
|
||||
|
||||
|
|
|
@ -27,8 +27,6 @@ import org.shredzone.acme4j.exception.AcmeException;
|
|||
* server. Implementations handle individual features of each ACME server.
|
||||
* <p>
|
||||
* Provider implementations must be registered with Java's {@link ServiceLoader}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public interface AcmeProvider {
|
||||
|
||||
|
|
|
@ -20,8 +20,6 @@ import java.net.URI;
|
|||
* the ACME specifications.
|
||||
* <p>
|
||||
* The {@code serverUri} is either a http or https URI to the server's directory service.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class GenericAcmeProvider extends AbstractAcmeProvider {
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ import org.shredzone.acme4j.provider.AcmeProvider;
|
|||
* If you want to use <em>Let's Encrypt</em>, always prefer to use this provider, as it
|
||||
* takes care for the correct connection and SSL certificates.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
* @see <a href="https://letsencrypt.org/">Let's Encrypt</a>
|
||||
*/
|
||||
public class LetsEncryptAcmeProvider extends AbstractAcmeProvider {
|
||||
|
|
|
@ -32,8 +32,6 @@ import org.shredzone.acme4j.connector.HttpConnector;
|
|||
/**
|
||||
* {@link HttpConnector} to be used for Let's Encrypt. It is pinned to the Let's Encrypt
|
||||
* server certificate.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class LetsEncryptHttpConnector extends HttpConnector {
|
||||
|
||||
|
|
|
@ -40,8 +40,6 @@ import org.shredzone.acme4j.exception.AcmeProtocolException;
|
|||
* cb.object("sub").put("data", "subdata");
|
||||
* cb.array("array", 123, 456, 789);
|
||||
* </pre>
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class ClaimBuilder {
|
||||
|
||||
|
|
|
@ -29,8 +29,6 @@ import org.shredzone.acme4j.exception.AcmeProtocolException;
|
|||
|
||||
/**
|
||||
* Utility class for signatures.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public final class SignatureUtils {
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ import java.util.regex.Pattern;
|
|||
* Parses a timestamp as defined in RFC 3339.
|
||||
*
|
||||
* @see <a href="https://www.ietf.org/rfc/rfc3339.txt">RFC 3339</a>
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class TimestampParser {
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<item name="GitHub" href="https://github.com/shred/acme4j"/>
|
||||
</links>
|
||||
<breadcrumbs>
|
||||
<item name="shredzone.org" href="http://www.shredzone.org"/>
|
||||
<item name="shredzone.org" href="https://shredzone.org"/>
|
||||
<item name="acme4j" href="../index.html"/>
|
||||
<item name="acme4j-client" href="index.html"/>
|
||||
</breadcrumbs>
|
||||
|
|
|
@ -27,8 +27,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link AcmeResource}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AcmeResourceTest {
|
||||
|
||||
|
|
|
@ -37,8 +37,6 @@ import org.shredzone.acme4j.util.TimestampParser;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link Authorization}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AuthorizationTest {
|
||||
|
||||
|
|
|
@ -34,8 +34,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link Certificate}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class CertificateTest {
|
||||
|
||||
|
|
|
@ -28,8 +28,6 @@ import org.shredzone.acme4j.util.ClaimBuilder;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link RegistrationBuilder}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class RegistrationBuilderTest {
|
||||
|
||||
|
|
|
@ -47,8 +47,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link Registration}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class RegistrationTest {
|
||||
|
||||
|
|
|
@ -35,8 +35,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit test for {@link Session}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class SessionTest {
|
||||
|
||||
|
|
|
@ -20,8 +20,6 @@ import org.junit.Test;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link Status} enumeration.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class StatusTest {
|
||||
|
||||
|
|
|
@ -49,8 +49,6 @@ import org.shredzone.acme4j.util.TimestampParser;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link Challenge}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class ChallengeTest {
|
||||
private Session session;
|
||||
|
|
|
@ -28,8 +28,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link Dns01Challenge}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class DnsChallengeTest {
|
||||
private static final String KEY_AUTHORIZATION =
|
||||
|
|
|
@ -29,8 +29,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link Http01Challenge}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class HttpChallengeTest {
|
||||
private static final String TOKEN =
|
||||
|
|
|
@ -29,8 +29,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link OutOfBand01Challenge}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class OutOfBandChallengeTest {
|
||||
private static Session session;
|
||||
|
|
|
@ -28,8 +28,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link TlsSni01Challenge}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
@SuppressWarnings("deprecation") // must test a deprecated challenge
|
||||
public class TlsSni01ChallengeTest {
|
||||
|
|
|
@ -28,8 +28,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link TlsSni02Challenge}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class TlsSni02ChallengeTest {
|
||||
private static final String KEY_AUTHORIZATION =
|
||||
|
|
|
@ -45,8 +45,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link DefaultConnection}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class DefaultConnectionTest {
|
||||
|
||||
|
|
|
@ -25,8 +25,6 @@ import org.shredzone.acme4j.util.ClaimBuilder;
|
|||
/**
|
||||
* Dummy implementation of {@link Connection} that always fails. Single methods are
|
||||
* supposed to be overridden for testing.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class DummyConnection implements Connection {
|
||||
|
||||
|
|
|
@ -26,8 +26,6 @@ import org.junit.experimental.categories.Category;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link HttpConnector}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class HttpConnectorTest {
|
||||
|
||||
|
|
|
@ -37,8 +37,6 @@ import org.shredzone.acme4j.util.ClaimBuilder;
|
|||
|
||||
/**
|
||||
* Unit test for {@link ResourceIterator}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class ResourceIteratorTest {
|
||||
|
||||
|
|
|
@ -20,8 +20,6 @@ import org.junit.Test;
|
|||
|
||||
/**
|
||||
* Unit test for {@link Resource}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class ResourceTest {
|
||||
|
||||
|
|
|
@ -34,8 +34,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
* Unit tests for {@link Session#provider()}. Requires that both enclosed
|
||||
* {@link AcmeProvider} implementations are registered via Java's {@link ServiceLoader}
|
||||
* API when the test is run.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class SessionProviderTest {
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ package org.shredzone.acme4j.provider;
|
|||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static uk.co.datumedge.hamcrest.json.SameJSONAs.sameJSONAs;
|
||||
|
||||
|
@ -39,8 +39,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link AbstractAcmeProvider}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class AbstractAcmeProviderTest {
|
||||
|
||||
|
|
|
@ -23,8 +23,6 @@ import org.junit.Test;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link GenericAcmeProvider}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class GenericAcmeProviderTest {
|
||||
|
||||
|
|
|
@ -30,8 +30,6 @@ import org.shredzone.acme4j.util.TestUtils;
|
|||
/**
|
||||
* Test implementation of {@link AcmeProvider}. It also implements a dummy implementation
|
||||
* of {@link Connection} that is always returned on {@link #connect()}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class TestableConnectionProvider extends DummyConnection implements AcmeProvider {
|
||||
private final Map<String, Challenge> challengeMap = new HashMap<>();
|
||||
|
|
|
@ -23,8 +23,6 @@ import org.junit.Test;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link LetsEncryptAcmeProvider}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class LetsEncryptAcmeProviderTest {
|
||||
|
||||
|
|
|
@ -30,8 +30,6 @@ import org.junit.experimental.categories.Category;
|
|||
|
||||
/**
|
||||
* Unit test for {@link LetsEncryptHttpConnector}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class LetsEncryptHttpConnectorTest {
|
||||
|
||||
|
|
|
@ -31,8 +31,6 @@ import org.shredzone.acme4j.connector.Resource;
|
|||
|
||||
/**
|
||||
* Unit test for {@link ClaimBuilder}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class ClaimBuilderTest {
|
||||
|
||||
|
|
|
@ -27,8 +27,6 @@ import org.junit.Test;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link SignatureUtils}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class SignatureUtilsTest {
|
||||
|
||||
|
|
|
@ -48,8 +48,6 @@ import org.shredzone.acme4j.provider.AcmeProvider;
|
|||
|
||||
/**
|
||||
* Some utility methods for unit tests.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public final class TestUtils {
|
||||
public static final String N = "pZsTKY41y_CwgJ0VX7BmmGs_7UprmXQMGPcnSbBeJAjZHA9SyyJKaWv4fNUdBIAX3Y2QoZixj50nQLyLv2ng3pvEoRL0sx9ZHgp5ndAjpIiVQ_8V01TTYCEDUc9ii7bjVkgFAb4ValZGFJZ54PcCnAHvXi5g0ELORzGcTuRqHVAUckMV2otr0g0u_5bWMm6EMAbBrGQCgUGjbZQHjava1Y-5tHXZkPBahJ2LvKRqMmJUlr0anKuJJtJUG03DJYAxABv8YAaXFBnGw6kKJRpUFAC55ry4sp4kGy0NrK2TVWmZW9kStniRv4RaJGI9aZGYwQy2kUykibBNmWEQUlIwIw";
|
||||
|
|
|
@ -28,8 +28,6 @@ import org.junit.Test;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link TimestampParser}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class TimestampParserTest {
|
||||
|
||||
|
|
|
@ -44,8 +44,6 @@ import org.slf4j.LoggerFactory;
|
|||
* A simple client test tool.
|
||||
* <p>
|
||||
* Pass the names of the domains as parameters.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class ClientTest {
|
||||
private static final File USER_KEY_FILE = new File("user.key");
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
<item name="GitHub" href="https://github.com/shred/acme4j"/>
|
||||
</links>
|
||||
<breadcrumbs>
|
||||
<item name="shredzone.org" href="http://www.shredzone.org"/>
|
||||
<item name="shredzone.org" href="https://shredzone.org"/>
|
||||
<item name="acme4j" href="../index.html"/>
|
||||
<item name="acme4j-example" href="index.html"/>
|
||||
</breadcrumbs>
|
||||
|
|
|
@ -45,8 +45,6 @@ import org.bouncycastle.util.io.pem.PemWriter;
|
|||
* Generator for a CSR (Certificate Signing Request) suitable for ACME servers.
|
||||
* <p>
|
||||
* Requires {@code Bouncy Castle}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class CSRBuilder {
|
||||
private static final String SIGNATURE_ALG = "SHA256withRSA";
|
||||
|
|
|
@ -43,8 +43,6 @@ import org.shredzone.acme4j.challenge.TlsSni02Challenge;
|
|||
* Utility class offering convenience methods for certificates.
|
||||
* <p>
|
||||
* Requires {@code Bouncy Castle}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public final class CertificateUtils {
|
||||
|
||||
|
|
|
@ -35,8 +35,6 @@ import org.bouncycastle.openssl.jcajce.JcaPEMWriter;
|
|||
* Utility class offering convenience methods for {@link KeyPair}.
|
||||
* <p>
|
||||
* Requires {@code Bouncy Castle}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class KeyPairUtils {
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<item name="GitHub" href="https://github.com/shred/acme4j"/>
|
||||
</links>
|
||||
<breadcrumbs>
|
||||
<item name="shredzone.org" href="http://www.shredzone.org"/>
|
||||
<item name="shredzone.org" href="https://shredzone.org"/>
|
||||
<item name="acme4j" href="../index.html"/>
|
||||
<item name="acme4j-utils" href="index.html"/>
|
||||
</breadcrumbs>
|
||||
|
|
|
@ -48,8 +48,6 @@ import com.jcabi.matchers.RegexMatchers;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link CSRBuilder}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class CSRBuilderTest {
|
||||
|
||||
|
|
|
@ -39,8 +39,6 @@ import com.jcabi.matchers.RegexMatchers;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link CertificateUtils}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class CertificateUtilsTest {
|
||||
|
||||
|
|
|
@ -32,8 +32,6 @@ import com.jcabi.matchers.RegexMatchers;
|
|||
|
||||
/**
|
||||
* Unit tests for {@link KeyPairUtils}.
|
||||
*
|
||||
* @author Richard "Shred" Körber
|
||||
*/
|
||||
public class KeyPairUtilsTest {
|
||||
private static final int KEY_SIZE = 2048;
|
||||
|
|
|
@ -10,7 +10,7 @@ Web site: [Let's Encrypt](https://letsencrypt.org)
|
|||
|
||||
## Features
|
||||
|
||||
* Connection to the ACME server is pinned to the Let's Encrypt certificate
|
||||
* Accepts the ACME server certificate of Let's Encrypt even on older Java versions
|
||||
|
||||
## Limits
|
||||
|
||||
|
|
|
@ -36,7 +36,9 @@ try {
|
|||
}
|
||||
```
|
||||
|
||||
Let me give an example of how to use the resource objects. To start an authorization process for a domain, we previously needed a `Registration` object, an `Authorization` object, and an `AcmeClient` instance. This is the old way:
|
||||
Let me give an example of how to use the resource objects. To start an authorization process for a domain, we previously needed a `Registration` object, an `Authorization` object, and an `AcmeClient` instance.
|
||||
|
||||
This is the *old* way:
|
||||
|
||||
```java
|
||||
AcmeClient client = ... // your ACME client
|
||||
|
@ -58,7 +60,9 @@ Authorization auth = registration.authorizeDomain("example.org");
|
|||
|
||||
As you can see, the authorization method that actually invokes the ACME server has moved from `AcmeClient` to `Registration`.
|
||||
|
||||
Let's continue the example. We find and trigger a HTTP challenge. Previously, it worked like this:
|
||||
Let's continue the example. We find and trigger a HTTP challenge.
|
||||
|
||||
Previously, it worked like this:
|
||||
|
||||
```java
|
||||
Http01Challenge challenge = auth.findChallenge(Http01Challenge.TYPE);
|
||||
|
@ -73,7 +77,7 @@ Http01Challenge challenge = auth.findChallenge(Http01Challenge.TYPE);
|
|||
challenge.trigger();
|
||||
```
|
||||
|
||||
Note that the `authorize()` method is not needed any more, and has been removed.
|
||||
Note that the `authorize()` method is not needed any more, and has been removed without replacement.
|
||||
|
||||
As a rule of thumb, you will find the action methods in one of the objects you previously passed as parameter to the `AcmeClient` method. For example, when you wrote `client.triggerChallenge(registration, challenge)`, you will find the new `trigger` method in either `registration` or `challenge` (here it's `challenge`).
|
||||
|
||||
|
|
|
@ -35,8 +35,6 @@ Client providers may verify the HTTPS certificate provided by the ACME server.
|
|||
|
||||
To do so, override the `createHttpConnector()` method of `AbstractAcmeProvider` and return a subclassed `HttpConnector` class that modifies the `HttpURLConnection` as required.
|
||||
|
||||
The source code of the [_Let's Encrypt_ provider](./apidocs/org/shredzone/acme4j/provider/letsencrypt/package-summary.html) gives an example of how to do that.
|
||||
|
||||
## Individual Challenges
|
||||
|
||||
If your ACME server provides challenges that are not specified in the ACME protocol, there should be an own `Challenge` implementation for each of your challenge, by extending the [`Challenge`](./apidocs/org/shredzone/acme4j/challenge/Challenge.html) class.
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<item name="GitHub" href="https://github.com/shred/acme4j"/>
|
||||
</links>
|
||||
<breadcrumbs>
|
||||
<item name="shredzone.org" href="http://www.shredzone.org"/>
|
||||
<item name="shredzone.org" href="https://shredzone.org"/>
|
||||
<item name="acme4j" href="index.html"/>
|
||||
</breadcrumbs>
|
||||
<menu name="Documentation">
|
||||
|
|
Loading…
Reference in New Issue