Giter VIP home page Giter VIP logo

micronaut-acme's People

Contributors

alvarosanchez avatar cah-nathan-zender avatar dependabot[bot] avatar fitzoh avatar graemerocher avatar ilopmar avatar jameskleeh avatar micronaut-build avatar msgilligan avatar msupic avatar n0tl3ss avatar renovate[bot] avatar sdelamo avatar timyates avatar wetted avatar zendern avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

micronaut-acme's Issues

ACME module throws exception when used with Oracle Cloud ATP Datasource

Expected Behavior

The application should create a certificate.

Actual Behaviour

The application throws an exception.

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

Full Stack Trace here.

Steps To Reproduce

Repo here:

https://github.com/recursivecodes/brain-to-the-cloud

SSH into machine:

$ ssh [email protected] -i ~/.ssh/id_oci_demo

(See Todd in Slack for necessary SSH key).

App located at ~/brain-to-the-cloud. Build app (./gradlew assemble) and run with:

java -DVAULT_OCID=[see slack] -DVAULT_COMPARTMENT_OCID=[see slack]-jar build/libs/bttc-0.1-all.jar

Environment Information

Oracle Linux

java version "11.0.12" 2021-07-20 LTS
Java(TM) SE Runtime Environment GraalVM EE 21.2.0 (build 11.0.12+8-LTS-jvmci-21.2-b06)
Java HotSpot(TM) 64-Bit Server VM GraalVM EE 21.2.0 (build 11.0.12+8-LTS-jvmci-21.2-b06, mixed mode, sharing)

Example Application

https://github.com/recursivecodes/brain-to-the-cloud

Version

3.2.0

[2.0.1.snapshot]download fails

Task List

Steps to Reproduce

in doc configure step

  1. copy frrom doc implementation("io.micronaut.acme:micronaut-acme:2.0.1.BUILD-SNAPSHOT")
  2. past to build gradle
  3. build gradle

Expected Behaviour

Actual Behaviour

fail to download

Could not find io.micronaut.acme:micronaut-acme:2.0.1.BUILD-SNAPSHOT.
     Searched in the following locations:
       - https://repo.maven.apache.org/maven2/io/micronaut/acme/micronaut-acme/2.0.1.BUILD-SNAPSHOT/maven-metadata.xml
       - https://repo.maven.apache.org/maven2/io/micronaut/acme/micronaut-acme/2.0.1.BUILD-SNAPSHOT/micronaut-acme-2.0.1.BUILD-SNAPSHOT.pom
       - https://jcenter.bintray.com/io/micronaut/acme/micronaut-acme/2.0.1.BUILD-SNAPSHOT/maven-metadata.xml
       - https://jcenter.bintray.com/io/micronaut/acme/micronaut-acme/2.0.1.BUILD-SNAPSHOT/micronaut-acme-2.0.1.BUILD-SNAPSHOT.pom
     Required by:
         project : > io.micronaut:micronaut-bom:2.0.1

Environment Information

  • Operating System: macOS mojave
  • Micronaut Version: 2.0.1
  • JDK Version: 1.8

Example Application

any

  • TODO: link to github repository with example that reproduces the issue

Automate DNS creation/verification for Google Cloud DNS

Currently DNS integration is a manual step for you to add the TXT entry to your DNS provider. Given some providers give you access to programmatically do so we should start to use those programmatic hooks.

Acceptance Criteria:

  • We can programmatically add entry to Google Cloud DNS
  • We wait until the DNS propagation has occurred before we trigger the ACME challenge
  • We end up with a certificate that can be fully automated from start to end when using the dns challenge and configuring whatever details needed for Google Cloud DNS integration.

[Bug] Challenge starts to soon using dns challenge

Using a DNS challenge there needs to be time to manually setup the DNS TXT record with the provider.
As the challenge is started immediately, this fails (see the following lines).

AtomicInteger authRetryAttempts = new AtomicInteger(acmeConfiguration.getAuth().getRefreshAttempts());
challenge.trigger();

I think this should be something in the line of:

sleep_some_initial_configured_time()
challenge.trigger()

I know there's an option to set the

auth:
   pause: 3m 

But this is only used to check the validity of the response of the challenge. I think this should be the initial delay before calling challenge.trigger

As a workaround I am currently placing a breakpoint on the challenge.trigger which allows me to setup the dns with the provider.

Intermediate cert not being sent

It seems that the R3/Let's encrypt intermediate cert is not being sent from the server.

I have everything working OK via a web browser or command-line tools on macOS, but if I try to access the site with curl from Debian 10 I get the following error:

curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Adding the -k option makes it work, of course.

When I've manually used CertBot in the past, there has been a "full-chain" cert and I suspect that acme4j is not generating it or micronaut-acme is not using it.

I believe this page is relevant: https://community.letsencrypt.org/t/curl-does-not-trust-le-certs-on-plain-debian/54091

I'm not 100% sure I've diagnosed this correctly, but I thought I'd open an issue anyway, because I'm 90% sure.

Del @Deprecated ACME

Issue description

Remove deprecated code for Micronaut Framework 5.

Document the breaking changes.

Build fails with JDK 16

The build fails with JDK 16. Upgrading to Gradle 7.1 (and possibly additional work) is necessary.

Steps to Reproduce

  1. sdk use java 16.0.1.hs-adpt
  2. ./gradlew clean build

Expected Behaviour

Build should complete successfully

Actual Behaviour

$ java -version
openjdk version "16.0.1" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
[sean@MSG-MBPro-Touch-Bar:103]$ ./gradlew clean build

> Task :acme:compileJava FAILED
Note: Creating bean classes for 7 type elements
Note: /Users/sean/git/micronaut-acme/acme/src/main/java/io/micronaut/acme/ssl/DelegatedSslContext.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':acme:compileJava'.
> java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x6040ecec) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x6040ecec

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
5 actionable tasks: 5 executed

Environment Information

  • Operating System: macOS Big Sur 11.3.1
  • Micronaut Version: 2.1.4 (Current master branch of micronaut-acme fc6bbc9)
  • JDK Version: AdoptOpenJDK-16.0.1+9

Example Application

Not applicable.

Delay server startup

Currently the channel is getting initialized before the acme setup is done and is causing this exception:

00:38:15.311 [nioEventLoopGroup-1-2] WARN  io.netty.channel.ChannelInitializer - Failed to initialize a channel. Closing: [id: 0x6816b54e, L:/10.128.0.3:443 - R:/24.154.202.70:55297]
java.lang.NullPointerException: null
	at io.micronaut.configuration.acme.ssl.DelegatedSslContext.newEngine(DelegatedSslContext.java:79)
	at io.netty.handler.ssl.SslContext.newHandler(SslContext.java:953)
	at io.netty.handler.ssl.SslContext.newHandler(SslContext.java:945)
	at io.micronaut.http.server.netty.NettyHttpServer$NettyHttpServerInitializer.initChannel(NettyHttpServer.java:746)
	at io.micronaut.http.server.netty.NettyHttpServer$NettyHttpServerInitializer.initChannel(NettyHttpServer.java:734)

The refresh task should probably listen to io.micronaut.context.event.StartupEvent and block until its finished

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Pending Approval

These branches will be created by Renovate only once you click their checkbox below.

  • chore(deps): update actions/checkout action to v4.1.4
  • chore(deps): update github artifact actions to v4 (major) (actions/download-artifact, actions/upload-artifact)
  • ๐Ÿ” Create all pending approval PRs at once ๐Ÿ”

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

github-actions
.github/workflows/central-sync.yml
  • actions/checkout v4
  • gradle/wrapper-validation-action v2
  • actions/setup-java v4
.github/workflows/graalvm-dev.yml
  • actions/checkout v4
  • actions/checkout v4
.github/workflows/graalvm-latest.yml
  • actions/checkout v4
  • actions/checkout v4
.github/workflows/gradle.yml
  • actions/checkout v4
  • graalvm/setup-graalvm v1.2.1
  • gradle/gradle-build-action v3.2.1
  • mikepenz/action-junit-report v4
  • actions/upload-artifact v3.1.3@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
  • haya14busa/action-cond v1
.github/workflows/publish-snapshot.yml
  • actions/checkout v4
  • actions/cache v4
  • actions/setup-java v4
.github/workflows/release.yml
  • actions/checkout v4
  • gradle/wrapper-validation-action v2
  • actions/setup-java v4
  • actions/upload-artifact v3.1.3@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
  • actions/upload-artifact v3.1.3@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
  • actions/download-artifact v3.0.2@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
  • slsa-framework/slsa-github-generator v1.10.0
  • actions/checkout v4.1.1@b4ffde65f46336ab88eb53be808477a3936bae11
  • actions/download-artifact v3.0.2@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
  • softprops/action-gh-release v0.1.15@de2c0eb89ae2a093876385947365aca7b0e5f844
gradle
gradle.properties
settings.gradle
  • io.micronaut.build.shared.settings 6.7.0
build.gradle
acme/build.gradle
acme-bom/build.gradle
buildSrc/settings.gradle
buildSrc/build.gradle
buildSrc/src/main/groovy/io.micronaut.build.internal.acme-base.gradle
buildSrc/src/main/groovy/io.micronaut.build.internal.acme-module.gradle
buildSrc/src/main/groovy/io.micronaut.build.internal.acme-tests.gradle
gradle/libs.versions.toml
  • io.micronaut:micronaut-core-bom 4.4.1
  • org.shredzone.acme4j:acme4j-client 3.2.1
  • io.micronaut.serde:micronaut-serde-bom 2.9.0
  • io.micronaut.testresources:micronaut-test-resources-bom 2.5.0
  • io.micronaut.validation:micronaut-validation-bom 4.5.0
  • io.micronaut.gradle:micronaut-gradle-plugin 4.3.6
gradle/license.gradle
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7

  • Check this box to trigger a request for Renovate to run again on this repository

Add retries to login/order requests

See PR #14

Both these calls have no retry attempts....probably not a bad idea to add them like we do for authorizations.

private Order createOrder(List<String> domains, Login login) throws AcmeException {
Order order = login.getAccount()
.newOrder()
.domains(domains)
.create();
return order;
}
private Login doLogin(Session session, KeyPair accountKeyPair) throws AcmeException {
Login login = new AccountBuilder()
.onlyExisting()
.useKeyPair(accountKeyPair)
.createLogin(session);
return login;
}

CertificateEvent should contain cert chain

It looks like the cert chain is already saved to disk in "domain.crt", but CertificateEvent only contains the first certificate of this chain. Thus the SslContext is setup with the first cert only.

This will lead to issues with some clients (e.g. curl) which expect the chain to be present.

Horizontal Scaling

We are currently using Certbot to create/update certificates whenever a new server is added to the cluster with the configuration shared between all the servers via an NFS. Because Certbot uses file locks, this architecture mostly works, though we've had some problems making sure edge cases are handled correctly.

How will micronaut-acme behave if it is horizontally scaled?

Graal Native Image build of project created with Micronaut Launch fails

./gradlew nativeImage results in Classes that should be initialized at run time got initialized during image building

Steps to Reproduce

  1. Create a new project using Micronaut Launch - Screenshot
  2. Add minimal YAML configuration for ACME
  3. ./gradlew nativeImage

Expected Behaviour

A Graal Native image (executable should be built)

Actual Behaviour

[application:1774]    classlist:   7,232.96 ms,  1.18 GB
47
[application:1774]        (cap):     895.02 ms,  1.18 GB
48
[application:1774]        setup:   3,089.46 ms,  1.18 GB
49
Error: Classes that should be initialized at run time got initialized during image building:
50
To see how the classes got initialized, use --trace-class-initialization=io.netty.buffer.AbstractPooledDerivedByteBuf,io.netty.buffer.UnpooledDirectByteBuf,io.netty.handler.ssl.ReferenceCountedOpenSslContext,io.netty.util.AbstractReferenceCounted,io.netty.buffer.UnpooledHeapByteBuf,io.netty.buffer.ByteBufUtil,io.netty.handler.ssl.PemPrivateKey,io.netty.buffer.UnpooledUnsafeDirectByteBuf,io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeDirectByteBuf,io.netty.buffer.PooledByteBufAllocator,io.netty.buffer.AbstractReferenceCountedByteBuf,io.netty.buffer.ByteBufAllocator,io.netty.buffer.PooledSlicedByteBuf,io.netty.handler.ssl.PemValue
51
 io.netty.buffer.AbstractPooledDerivedByteBuf the class was requested to be initialized at run time (subtype of io.netty.buffer.AbstractReferenceCountedByteBuf). To see why io.netty.buffer.AbstractPooledDerivedByteBuf got initialized use --trace-class-initialization=io.netty.buffer.AbstractPooledDerivedByteBuf
52
io.netty.buffer.UnpooledDirectByteBuf the class was requested to be initialized at run time (subtype of io.netty.buffer.AbstractReferenceCountedByteBuf). To see why io.netty.buffer.UnpooledDirectByteBuf got initialized use --trace-class-initialization=io.netty.buffer.UnpooledDirectByteBuf
53
[application:1774]     analysis:  71,810.24 ms,  2.32 GB
54
io.netty.handler.ssl.ReferenceCountedOpenSslContext the class was requested to be initialized at run time (from jar:file:///home/runner/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-http-netty/2.5.7/f89453037f3ac9c683fa14b350967d637361fa3c/micronaut-http-netty-2.5.7.jar!/META-INF/native-image/io.micronaut/micronaut-http-netty/native-image.properties). To see why io.netty.handler.ssl.ReferenceCountedOpenSslContext got initialized use --trace-class-initialization=io.netty.handler.ssl.ReferenceCountedOpenSslContext
55
io.netty.util.AbstractReferenceCounted the class was requested to be initialized at run time (from jar:file:///home/runner/.gradle/caches/modules-2/files-2.1/io.netty/netty-common/4.1.64.Final/ac71ac92f9181516ce889880501e0ccbde319edc/netty-common-4.1.64.Final.jar!/META-INF/native-image/io.netty/common/native-image.properties). To see why io.netty.util.AbstractReferenceCounted got initialized use --trace-class-initialization=io.netty.util.AbstractReferenceCounted
56
io.netty.buffer.UnpooledHeapByteBuf the class was requested to be initialized at run time (subtype of io.netty.buffer.AbstractReferenceCountedByteBuf). To see why io.netty.buffer.UnpooledHeapByteBuf got initialized use --trace-class-initialization=io.netty.buffer.UnpooledHeapByteBuf
57
io.netty.buffer.ByteBufUtil the class was requested to be initialized at run time (from jar:file:///home/runner/.gradle/caches/modules-2/files-2.1/io.netty/netty-buffer/4.1.64.Final/2376719ecb7fa692e153c7542f3d24b1ef5b116/netty-buffer-4.1.64.Final.jar!/META-INF/native-image/io.netty/buffer/native-image.properties). To see why io.netty.buffer.ByteBufUtil got initialized use --trace-class-initialization=io.netty.buffer.ByteBufUtil
58
io.netty.handler.ssl.PemPrivateKey the class was requested to be initialized at run time (subtype of io.netty.util.AbstractReferenceCounted). To see why io.netty.handler.ssl.PemPrivateKey got initialized use --trace-class-initialization=io.netty.handler.ssl.PemPrivateKey
59
io.netty.buffer.UnpooledUnsafeDirectByteBuf the class was requested to be initialized at run time (subtype of io.netty.buffer.AbstractReferenceCountedByteBuf). To see why io.netty.buffer.UnpooledUnsafeDirectByteBuf got initialized use --trace-class-initialization=io.netty.buffer.UnpooledUnsafeDirectByteBuf
60
io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeDirectByteBuf the class was requested to be initialized at run time (subtype of io.netty.buffer.AbstractReferenceCountedByteBuf). To see why io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeDirectByteBuf got initialized use --trace-class-initialization=io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeDirectByteBuf
61
io.netty.buffer.PooledByteBufAllocator the class was requested to be initialized at run time (from jar:file:///home/runner/.gradle/caches/modules-2/files-2.1/io.netty/netty-buffer/4.1.64.Final/2376719ecb7fa692e153c7542f3d24b1ef5b116/netty-buffer-4.1.64.Final.jar!/META-INF/native-image/io.netty/buffer/native-image.properties). To see why io.netty.buffer.PooledByteBufAllocator got initialized use --trace-class-initialization=io.netty.buffer.PooledByteBufAllocator
62
io.netty.buffer.AbstractReferenceCountedByteBuf the class was requested to be initialized at run time (from jar:file:///home/runner/.gradle/caches/modules-2/files-2.1/io.netty/netty-buffer/4.1.64.Final/2376719ecb7fa692e153c7542f3d24b1ef5b116/netty-buffer-4.1.64.Final.jar!/META-INF/native-image/io.netty/buffer/native-image.properties). To see why io.netty.buffer.AbstractReferenceCountedByteBuf got initialized use --trace-class-initialization=io.netty.buffer.AbstractReferenceCountedByteBuf
63
io.netty.buffer.ByteBufAllocator the class was requested to be initialized at run time (from jar:file:///home/runner/.gradle/caches/modules-2/files-2.1/io.netty/netty-buffer/4.1.64.Final/2376719ecb7fa692e153c7542f3d24b1ef5b116/netty-buffer-4.1.64.Final.jar!/META-INF/native-image/io.netty/buffer/native-image.properties). To see why io.netty.buffer.ByteBufAllocator got initialized use --trace-class-initialization=io.netty.buffer.ByteBufAllocator
64
io.netty.buffer.PooledSlicedByteBuf the class was requested to be initialized at run time (subtype of io.netty.buffer.AbstractReferenceCountedByteBuf). To see why io.netty.buffer.PooledSlicedByteBuf got initialized use --trace-class-initialization=io.netty.buffer.PooledSlicedByteBuf
65
io.netty.handler.ssl.PemValue the class was requested to be initialized at run time (subtype of io.netty.util.AbstractReferenceCounted). To see why io.netty.handler.ssl.PemValue got initialized use --trace-class-initialization=io.netty.handler.ssl.PemValue
66

67
Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
68
Error: Image build request failed with exit status 1
69

70
> Task :nativeImage FAILED
71

72
15 actionable tasks: 15 executed
73
FAILURE: Build failed with an exception.

For complete build results in a Github Actions environment, see:
https://github.com/msgilligan/micronaut-acme-sample/actions/runs/987817985

Environment Information

  • Operating System: Ubuntu 20.04 LTS
  • Micronaut Version: 2.5.7
  • JDK Version: GraalVM 21.1.0-java11

Example Application

https://github.com/msgilligan/micronaut-acme-sample

Automate DNS creation/verification for AWS Route 53

Currently DNS integration is a manual step for you to add the TXT entry to your DNS provider. Given some providers give you access to programmatically do so we should start to use those programmatic hooks.

Acceptance Criteria:

  • We can programmatically add entry to AWS Route53
  • We wait until the DNS propagation has occurred before we trigger the challenge
  • We end up with a certificate that can be fully automated from start to end when using the dns challenge and configuring whatever details needed for AWS Route 53 integration.

`mn create-acme-account` help output misleading about existing keys

The documentation for mn create-acme-account says "This command will either create a new account keypair for you or you can pass the account keypair that you have generated using the mn create-key or via openssl or other means in as a parameter." (And the command does seem to behave according to the documentation.)

However the command help implies a key is always created.

Steps to Reproduce

  1. mn create-acme-account --help

Expected Behaviour

  • Help output should indicate an existing key can be used

Actual Behaviour

Usage: mn create-acme-account [-fhvVx] -e=<email> [-k=<keyDir>] -n=<keyName> [-s=<keySize>]
                              (-u=<serverUrl> | --lets-encrypt-prod | --lets-encrypt-staging)
Creates a new account on the given ACME server
  -e, --email=<email>        Email address to create account with.
  -f, --force                Whether to overwrite existing files
  -h, --help                 Show this help message and exit.
  -k, --key-dir=<keyDir>     Custom location on disk to put the key to be used with this
                               account.
                               Default: src/main/resources
  -n, --key-name=<keyName>   Name of the key to be created
  -s, --key-size=<keySize>   Size of the key to be generated
                               Default: 4096
  -v, --verbose              Create verbose output.
  -V, --version              Print version information and exit.
  -x, --stacktrace           Show full stack trace when exceptions occur.
ACME server URL
      --lets-encrypt-prod    Use the Let's Encrypt prod URL.
      --lets-encrypt-staging Use the Let's Encrypt staging URL
  -u, --url=<serverUrl>      URL of ACME server to use

Environment Information

  • Operating System: macOS Big Sur
  • Micronaut Version: 2.5.6
  • JDK Version: 16

Enable deployment without the `mn create-acme-account` command (documentation or new CLI tool)

A user deploying from a docker image or a released native-image binary may not have access to a Micronaut project source repository to run the mn create-acme-account command.

The documentation describes how openssl genrsa -out /tmp/mydomain.com-key.pem 4096 can be used in place of the mn create-key command. It also says:

Certbot or many of the other tools out there can also accomplish this step if you dont want to use this tool.

My experience is that Certbot is hard to use "a la carte". I would like to see a standalone (native-image) tool that can just do the create-acme-account command. (I suppose you might also need delete-acme-account and perhaps create-key for people that don't want to use openssl)

Alternatively If there is another common/readily-available tool, the documentation could be updated to reference it.

Initial Release

Any blockers for a release? This issue is to request a 1.0.0, or at least a milestone

Micronaut Starter doesn't support create-key command

Thanks for reporting an issue, please review the task list below before submitting the
issue. Your issue report will be closed if the issue is incomplete and the below tasks not completed.

NOTE: If you are unsure about something and the issue is more of a question a better place to ask questions is on Stack Overflow (https://stackoverflow.com/tags/micronaut) or Gitter (https://gitter.im/micronautfw/). DO NOT use the issue tracker to ask questions.

Task List

  • Steps to reproduce provided
  • Stacktrace (if present) provided
  • Example that reproduces the problem uploaded to Github
  • Full description of the issue provided (see below)

Steps to Reproduce

  1. Download and install latest version of Micronaut Starter
  2. Follow instructions in https://micronaut-projects.github.io/micronaut-acme/snapshot/guide/index.html#usage and run mn create-key -n foobar

Expected Behaviour

A keypair should be created

Actual Behaviour

Micronaut Starter complains that the create-key command does not exist

$ mn create-key -n foobar
Unmatched arguments from index 0: 'create-key', '-n', 'foobar'
Did you mean: create-app or create-cli-app or create-grpc-app?

Environment Information

  • Operating System: Windows 10
  • Micronaut Version: 2.5.3 Micronaut Starter
  • JDK Version: 1.8

Automate DNS creation/verification for Azure DNS

Currently DNS integration is a manual step for you to add the TXT entry to your DNS provider. Given some providers give you access to programmatically do so we should start to use those programmatic hooks.

Acceptance Criteria:

  • We can programmatically add entry to Azure DNS
  • We wait until the DNS propagation has occurred before we trigger the challenge
  • We end up with a certificate that can be fully automated from start to end when using the dns challenge and configuring whatever details needed for Azure DNS integration.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.