update docs
This commit is contained in:
parent
6036292706
commit
77561ed770
577
README.md
577
README.md
|
@ -60,6 +60,296 @@ TODO
|
|||
|
||||
-->
|
||||
|
||||
# JavaScript API
|
||||
|
||||
<!--
|
||||
<details>
|
||||
<summary>Greenlock API (shared among JS implementations)</summary>
|
||||
-->
|
||||
|
||||
<details>
|
||||
<summary>Greenlock.create({ packageAgent, maintainerEmail, staging })</summary>
|
||||
|
||||
## Greenlock.create()
|
||||
|
||||
Creates an instance of greenlock with _environment_-level values.
|
||||
|
||||
```js
|
||||
|
||||
var pkg = require('./package.json');
|
||||
var gl = Greenlock.create({
|
||||
// Staging for testing environments
|
||||
staging: true,
|
||||
|
||||
// This should be the contact who receives critical bug and security notifications
|
||||
// Optionally, you may receive other (very few) updates, such as important new features
|
||||
maintainerEmail: 'jon@example.com',
|
||||
// for an RFC 8555 / RFC 7231 ACME client user agent
|
||||
packageAgent: pkg.name + '/' pkg.version
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| --------------- | ------------------------------------------------------------------------------------ |
|
||||
| maintainerEmail | the developer contact for critical bug and security notifications |
|
||||
| packageAgent | if you publish your package for others to use, `require('./package.json').name` here |
|
||||
| staging | use the Let's Encrypt staging URL instead of the production URL |
|
||||
| directoryUrl | for use with other (not Let's Encrypt) ACME services, and the Pebble test server |
|
||||
|
||||
<!--
|
||||
| maintainerUpdates | (default: false) receive occasional non-critical notifications |
|
||||
maintainerUpdates: true // default: false
|
||||
-->
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Greenlock#manager.defaults()</summary>
|
||||
|
||||
## Greenlock#manager.defaults()
|
||||
|
||||
Acts as a getter when given no arguments.
|
||||
|
||||
Otherwise sets default, site-wide values as described below.
|
||||
|
||||
```js
|
||||
greenlock.manager.defaults({
|
||||
// The "Let's Encrypt Subscriber" (often the same as the maintainer)
|
||||
// NOT the end customer (except where that is also the maintainer)
|
||||
subscriberEmail: 'jon@example.com',
|
||||
agreeToTerms: true
|
||||
challenges: {
|
||||
"http-01": {
|
||||
module: "acme-http-01-webroot",
|
||||
webroot: "/path/to/webroot"
|
||||
}
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| agreeToTerms | (default: false) either 'true' or a function that presents the Terms of Service and returns it once accepted |
|
||||
| challenges['http-01'] | provide an http-01 challenge module |
|
||||
| challenges['dns-01'] | provide a dns-01 challenge module |
|
||||
| challenges['tls-alpn-01'] | provide a tls-alpn-01 challenge module |
|
||||
| challenges[type].module | the name of your challenge module |
|
||||
| challenges[type].xxxx | module-specific options |
|
||||
| servername | the default servername to use for non-sni requests (many IoT clients) |
|
||||
| subscriberEmail | the contact who agrees to the Let's Encrypt Subscriber Agreement and the Greenlock Terms of Service<br>this contact receives renewal failure notifications |
|
||||
| store | override the default storage module |
|
||||
| store.module | the name of your storage module |
|
||||
| store.xxxx | options specific to your storage module |
|
||||
|
||||
<!--
|
||||
|
||||
| serverId | an arbitrary name to distinguish this server within a cluster of servers |
|
||||
|
||||
-->
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Greenlock#add({ subject, altnames })</summary>
|
||||
|
||||
## Greenlock#add()
|
||||
|
||||
Greenlock is a **Management Environment**.
|
||||
|
||||
Once you add a "site", it will begin to automatically renew, immediately.
|
||||
|
||||
The certificates will provided to the `store` callbacks as soon as they are ready, and whenever they renew.
|
||||
Failure to renew will be reported to the `notify` callback.
|
||||
|
||||
You can also retrieve them one-off with `get`.
|
||||
|
||||
```js
|
||||
gl.add({
|
||||
subject: 'example.com',
|
||||
altnames: ['example.com', 'www.example.com', 'exampleapi.com']
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| --------------- | -------------------------------------------------------------------------------------------- |
|
||||
| subject | the first domain on, and identifier of the certificate |
|
||||
| altnames | first domain, plus additional domains<br>note: the order should always be the same |
|
||||
| subscriberEmail | if different from the default (i.e. multi-tenant, whitelabel) |
|
||||
| challenges | (same as main config) use if this site needs to use non-default http-01 or dns-01 validation |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Greenlock#get({ servername })</summary>
|
||||
|
||||
## Greenlock#get()
|
||||
|
||||
**Disclaimer**: This is only intended for testing, demos, and SNICallback
|
||||
(in [Greenlock Express](https://git.rootprojects.org/root/greenlock-express.js)).
|
||||
|
||||
Greenlock is intended to be left running to allow it to fetech and renew certifictates automatically.
|
||||
|
||||
It is intended that you use the `store` callbacks to new certificates instantly as soon as they renew.
|
||||
This also protects you from accidentally stampeding the Let's Encrypt API with hundreds (or thousands)
|
||||
of certificate requests.
|
||||
|
||||
- [Store Callback Documentation](https://git.rootprojects.org/root/greenlock-store-test.js)
|
||||
|
||||
```js
|
||||
return greenlock.get({ servername }).then(function(site) {
|
||||
if (!site) {
|
||||
console.log(servername + ' was not found in any site config');
|
||||
return;
|
||||
}
|
||||
|
||||
var privkey = site.pems.privkey;
|
||||
var fullchain = site.pems.cert + '\n' + site.pems.chain + '\n';
|
||||
console.log(privkey);
|
||||
console.log(fullchain);
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| ---------- | ------------------------------------------------------------- |
|
||||
| servername | any altname listed on the certificate (including the subject) |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Greenlock#renew({ renewBefore })</summary>
|
||||
|
||||
## Greenlock#renew()
|
||||
|
||||
This will renew only domains that have reached their `renewAt` or are within the befault `renewOffset`.
|
||||
|
||||
**Note**: This runs at regular intervals, multiple times a day, in the background.
|
||||
You are not required to call it. If you implement the `store` callbacks, the certificates
|
||||
will automatically be saved (and if you don't implement them, they all get saved to disk).
|
||||
|
||||
```js
|
||||
return greenlock.renew({}).then(function(results) {
|
||||
results.forEach(function(site) {
|
||||
if (site.error) {
|
||||
console.error(site.subject, site.error);
|
||||
return;
|
||||
}
|
||||
console.log('Renewed certificate for', site.subject, site.altnames);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| ----------- | ---- | ------------------------------------------------------------------------------- |
|
||||
| (optional) | | ALL parameters are optional, but some should be paired |
|
||||
| force | bool | force silly options, such as tiny durations |
|
||||
| renewBefore | ms | Check domains that are scheduled to renew before the given date in milliseconds |
|
||||
|
||||
<!--
|
||||
| issuedBefore | ms | Check domains issued before the given date in milliseconds |
|
||||
| expiresBefore | ms | Check domains that expire before the given date in milliseconds |
|
||||
-->
|
||||
|
||||
</details>
|
||||
|
||||
<!--
|
||||
|
||||
<details>
|
||||
<summary>Node.js</summary>
|
||||
-->
|
||||
|
||||
# Node
|
||||
|
||||
```bash
|
||||
npm install --save @root/greenlock
|
||||
npm install --save greenlock-manager-fs
|
||||
npm install --save greenlock-store-fs
|
||||
npm install --save acme-http-01-standalone
|
||||
```
|
||||
|
||||
<!--
|
||||
|
||||
TODO
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Express.js</summary>
|
||||
|
||||
```js
|
||||
'use strict';
|
||||
|
||||
var Greenlock = require(@root/greenlock-express);
|
||||
|
||||
var greenlock = Greenlock.create({
|
||||
// for security and critical bug notices
|
||||
maintainerEmail: 'jon@example.com'
|
||||
|
||||
// for
|
||||
maintainerNewsletter: true
|
||||
});
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>WebPack</summary>
|
||||
TODO
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>VanillaJS for Browsers</summary>
|
||||
TODO
|
||||
</details>
|
||||
|
||||
-->
|
||||
|
||||
# HTTP-01 & DNS-01 Integrations
|
||||
|
||||
For Public Web Servers running on a VPS, the **default HTTP-01 challenge plugin**
|
||||
will work just fine for most people.
|
||||
|
||||
However, for
|
||||
|
||||
- **Wildcard Certificates**
|
||||
- **IoT Environments**
|
||||
- **Enterprise On-Prem**
|
||||
- **Private Networks**
|
||||
|
||||
Greenlock provides an easy way to integrate Let's Encrypt with your existing services
|
||||
through a variety of **DNS-01** infrastructure
|
||||
|
||||
Why
|
||||
Typically file propagation is faster and more reliably than DNS propagation.
|
||||
Therefore, http-01 will be preferred to dns-01 except when wildcards or **private domains** are in use.
|
||||
|
||||
http-01 will only be supplied as a defaut if no other challenge is provided.
|
||||
|
||||
You can use ACME (Let's Encrypt) with several ready-made integrations
|
||||
|
||||
# Ready-made Integrations
|
||||
|
||||
Greenlock Express integrates between Let's Encrypt's ACME Challenges and many popular services.
|
||||
|
||||
| Type | Service | Plugin |
|
||||
| ----------- | ----------------------------------------------------------------------------------- | ------------------------ |
|
||||
| dns-01 | CloudFlare | acme-dns-01-cloudflare |
|
||||
| dns-01 | [Digital Ocean](https://git.rootprojects.org/root/acme-dns-01-digitalocean.js) | acme-dns-01-digitalocean |
|
||||
| dns-01 | [DNSimple](https://git.rootprojects.org/root/acme-dns-01-dnsimple.js) | acme-dns-01-dnsimple |
|
||||
| dns-01 | [DuckDNS](https://git.rootprojects.org/root/acme-dns-01-duckdns.js) | acme-dns-01-duckdns |
|
||||
| http-01 | File System / [Web Root](https://git.rootprojects.org/root/acme-http-01-webroot.js) | acme-http-01-webroot |
|
||||
| dns-01 | [GoDaddy](https://git.rootprojects.org/root/acme-dns-01-godaddy.js) | acme-dns-01-godaddy |
|
||||
| dns-01 | [Gandi](https://git.rootprojects.org/root/acme-dns-01-gandi.js) | acme-dns-01-gandi |
|
||||
| dns-01 | [NameCheap](https://git.rootprojects.org/root/acme-dns-01-namecheap.js) | acme-dns-01-namecheap |
|
||||
| dns-01 | [Name.com](https://git.rootprojects.org/root/acme-dns-01-namedotcom.js) | acme-dns-01-namedotcom |
|
||||
| dns-01 | Route53 (AWS) | acme-dns-01-route53 |
|
||||
| http-01 | S3 (AWS, Digital Ocean, Scaleway) | acme-http-01-s3 |
|
||||
| dns-01 | [Vultr](https://git.rootprojects.org/root/acme-dns-01-vultr.js) | acme-dns-01-vultr |
|
||||
| dns-01 | [Build your own](https://git.rootprojects.org/root/acme-dns-01-test.js) | acme-dns-01-test |
|
||||
| http-01 | [Build your own](https://git.rootprojects.org/root/acme-http-01-test.js) | acme-http-01-test |
|
||||
| tls-alpn-01 | [Contact us](mailto:support@therootcompany.com) | - |
|
||||
|
||||
Search `acme-http-01-` or `acme-dns-01-` on npm to find more.
|
||||
|
||||
# Easy to Customize
|
||||
|
||||
<!-- greenlock-manager-test => greenlock-manager-custom -->
|
||||
|
@ -195,294 +485,7 @@ each domain before authorizing a certificate.
|
|||
|
||||
</details>
|
||||
|
||||
# JavaScript API
|
||||
|
||||
<!--
|
||||
<details>
|
||||
<summary>Greenlock API (shared among JS implementations)</summary>
|
||||
-->
|
||||
|
||||
<details>
|
||||
<summary>Greenlock.create({ packageAgent, maintainerEmail, staging })</summary>
|
||||
|
||||
### Greenlock.create()
|
||||
|
||||
Creates an instance of greenlock with _environment_-level values.
|
||||
|
||||
```js
|
||||
|
||||
var pkg = require('./package.json');
|
||||
var gl = Greenlock.create({
|
||||
// Staging for testing environments
|
||||
staging: true,
|
||||
|
||||
// This should be the contact who receives critical bug and security notifications
|
||||
// Optionally, you may receive other (very few) updates, such as important new features
|
||||
maintainerEmail: 'jon@example.com',
|
||||
// for an RFC 8555 / RFC 7231 ACME client user agent
|
||||
packageAgent: pkg.name + '/' pkg.version
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| --------------- | ------------------------------------------------------------------------------------ |
|
||||
| maintainerEmail | the developer contact for critical bug and security notifications |
|
||||
| packageAgent | if you publish your package for others to use, `require('./package.json').name` here |
|
||||
| staging | use the Let's Encrypt staging URL instead of the production URL |
|
||||
| directoryUrl | for use with other (not Let's Encrypt) ACME services, and the Pebble test server |
|
||||
|
||||
<!--
|
||||
| maintainerUpdates | (default: false) receive occasional non-critical notifications |
|
||||
maintainerUpdates: true // default: false
|
||||
-->
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Greenlock#manager.defaults()</summary>
|
||||
|
||||
# Greenlock#manager.defaults()
|
||||
|
||||
Acts as a getter when given no arguments.
|
||||
|
||||
Otherwise sets default, site-wide values as described below.
|
||||
|
||||
```js
|
||||
greenlock.manager.defaults({
|
||||
// The "Let's Encrypt Subscriber" (often the same as the maintainer)
|
||||
// NOT the end customer (except where that is also the maintainer)
|
||||
subscriberEmail: 'jon@example.com',
|
||||
agreeToTerms: true
|
||||
challenges: {
|
||||
"http-01": {
|
||||
module: "acme-http-01-webroot",
|
||||
webroot: "/path/to/webroot"
|
||||
}
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| agreeToTerms | (default: false) either 'true' or a function that presents the Terms of Service and returns it once accepted |
|
||||
| challenges['http-01'] | provide an http-01 challenge module |
|
||||
| challenges['dns-01'] | provide a dns-01 challenge module |
|
||||
| challenges['tls-alpn-01'] | provide a tls-alpn-01 challenge module |
|
||||
| challenges[type].module | the name of your challenge module |
|
||||
| challenges[type].xxxx | module-specific options |
|
||||
| servername | the default servername to use for non-sni requests (many IoT clients) |
|
||||
| subscriberEmail | the contact who agrees to the Let's Encrypt Subscriber Agreement and the Greenlock Terms of Service<br>this contact receives renewal failure notifications |
|
||||
| store | override the default storage module |
|
||||
| store.module | the name of your storage module |
|
||||
| store.xxxx | options specific to your storage module |
|
||||
|
||||
<!--
|
||||
|
||||
| serverId | an arbitrary name to distinguish this server within a cluster of servers |
|
||||
|
||||
-->
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Greenlock#add({ subject, altnames })</summary>
|
||||
|
||||
# Greenlock#add()
|
||||
|
||||
Greenlock is a **Management Environment**.
|
||||
|
||||
Once you add a "site", it will begin to automatically renew, immediately.
|
||||
|
||||
The certificates will provided to the `store` callbacks as soon as they are ready, and whenever they renew.
|
||||
Failure to renew will be reported to the `notify` callback.
|
||||
|
||||
You can also retrieve them one-off with `get`.
|
||||
|
||||
```js
|
||||
gl.add({
|
||||
subject: 'example.com',
|
||||
altnames: ['example.com', 'www.example.com', 'exampleapi.com']
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| --------------- | -------------------------------------------------------------------------------------------- |
|
||||
| subject | the first domain on, and identifier of the certificate |
|
||||
| altnames | first domain, plus additional domains<br>note: the order should always be the same |
|
||||
| subscriberEmail | if different from the default (i.e. multi-tenant, whitelabel) |
|
||||
| challenges | (same as main config) use if this site needs to use non-default http-01 or dns-01 validation |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Greenlock#get({ servername })</summary>
|
||||
|
||||
# Greenlock#get()
|
||||
|
||||
**Disclaimer**: This is only intended for testing, demos, and SNICallback
|
||||
(in [Greenlock Express](https://git.rootprojects.org/root/greenlock-express.js)).
|
||||
|
||||
Greenlock is intended to be left running to allow it to fetech and renew certifictates automatically.
|
||||
|
||||
It is intended that you use the `store` callbacks to new certificates instantly as soon as they renew.
|
||||
This also protects you from accidentally stampeding the Let's Encrypt API with hundreds (or thousands)
|
||||
of certificate requests.
|
||||
|
||||
- [Store Callback Documentation](https://git.rootprojects.org/root/greenlock-store-test.js)
|
||||
|
||||
```js
|
||||
return greenlock.get({ servername }).then(function(site) {
|
||||
if (!site) {
|
||||
console.log(servername + ' was not found in any site config');
|
||||
return;
|
||||
}
|
||||
|
||||
var privkey = site.pems.privkey;
|
||||
var fullchain = site.pems.cert + '\n' + site.pems.chain + '\n';
|
||||
console.log(privkey);
|
||||
console.log(fullchain);
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| ---------- | ------------------------------------------------------------- |
|
||||
| servername | any altname listed on the certificate (including the subject) |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Greenlock#renew()</summary>
|
||||
|
||||
# Greenlock#renew()
|
||||
|
||||
This will renew only domains that have reached their `renewAt` or are within the befault `renewOffset`.
|
||||
|
||||
**Note**: This runs at regular intervals, multiple times a day, in the background.
|
||||
You are not required to call it. If you implement the `store` callbacks, the certificates
|
||||
will automatically be saved (and if you don't implement them, they all get saved to disk).
|
||||
|
||||
```js
|
||||
return greenlock.renew({}).then(function(results) {
|
||||
results.forEach(function(site) {
|
||||
if (site.error) {
|
||||
console.error(site.subject, site.error);
|
||||
return;
|
||||
}
|
||||
console.log('Renewed certificate for', site.subject, site.altnames);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| ----------- | ---- | ------------------------------------------------------------------------------- |
|
||||
| (optional) | | ALL parameters are optional, but some should be paired |
|
||||
| force | bool | force silly options, such as tiny durations |
|
||||
| renewBefore | ms | Check domains that are scheduled to renew before the given date in milliseconds |
|
||||
|
||||
<!--
|
||||
| issuedBefore | ms | Check domains issued before the given date in milliseconds |
|
||||
| expiresBefore | ms | Check domains that expire before the given date in milliseconds |
|
||||
-->
|
||||
|
||||
<!--
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Node.js</summary>
|
||||
-->
|
||||
|
||||
# Node
|
||||
|
||||
```bash
|
||||
npm install --save @root/greenlock
|
||||
npm install --save greenlock-manager-fs
|
||||
npm install --save greenlock-store-fs
|
||||
npm install --save acme-http-01-standalone
|
||||
```
|
||||
|
||||
<!--
|
||||
|
||||
TODO
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Express.js</summary>
|
||||
|
||||
```js
|
||||
'use strict';
|
||||
|
||||
var Greenlock = require(@root/greenlock-express);
|
||||
|
||||
var greenlock = Greenlock.create({
|
||||
// for security and critical bug notices
|
||||
maintainerEmail: 'jon@example.com'
|
||||
|
||||
// for
|
||||
maintainerNewsletter: true
|
||||
});
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>WebPack</summary>
|
||||
TODO
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>VanillaJS for Browsers</summary>
|
||||
TODO
|
||||
</details>
|
||||
|
||||
-->
|
||||
|
||||
# HTTP-01 & DNS-01 Integrations
|
||||
|
||||
For Public Web Servers running on a VPS, the **default HTTP-01 challenge plugin**
|
||||
will work just fine for most people.
|
||||
|
||||
However, for
|
||||
|
||||
- **Wildcard Certificates**
|
||||
- **IoT Environments**
|
||||
- **Enterprise On-Prem**
|
||||
- **Private Networks**
|
||||
|
||||
Greenlock provides an easy way to integrate Let's Encrypt with your existing services
|
||||
through a variety of **DNS-01** infrastructure
|
||||
|
||||
Why
|
||||
Typically file propagation is faster and more reliably than DNS propagation.
|
||||
Therefore, http-01 will be preferred to dns-01 except when wildcards or **private domains** are in use.
|
||||
|
||||
http-01 will only be supplied as a defaut if no other challenge is provided.
|
||||
|
||||
You can use ACME (Let's Encrypt) with several ready-made integrations
|
||||
|
||||
# Ready-made Integrations
|
||||
|
||||
Greenlock Express integrates between Let's Encrypt's ACME Challenges and many popular services.
|
||||
|
||||
| Type | Service | Plugin |
|
||||
| ----------- | ----------------------------------------------------------------------------------- | ------------------------ |
|
||||
| dns-01 | CloudFlare | acme-dns-01-cloudflare |
|
||||
| dns-01 | [Digital Ocean](https://git.rootprojects.org/root/acme-dns-01-digitalocean.js) | acme-dns-01-digitalocean |
|
||||
| dns-01 | [DNSimple](https://git.rootprojects.org/root/acme-dns-01-dnsimple.js) | acme-dns-01-dnsimple |
|
||||
| dns-01 | [DuckDNS](https://git.rootprojects.org/root/acme-dns-01-duckdns.js) | acme-dns-01-duckdns |
|
||||
| http-01 | File System / [Web Root](https://git.rootprojects.org/root/acme-http-01-webroot.js) | acme-http-01-webroot |
|
||||
| dns-01 | [GoDaddy](https://git.rootprojects.org/root/acme-dns-01-godaddy.js) | acme-dns-01-godaddy |
|
||||
| dns-01 | [Gandi](https://git.rootprojects.org/root/acme-dns-01-gandi.js) | acme-dns-01-gandi |
|
||||
| dns-01 | [NameCheap](https://git.rootprojects.org/root/acme-dns-01-namecheap.js) | acme-dns-01-namecheap |
|
||||
| dns-01 | [Name.com](https://git.rootprojects.org/root/acme-dns-01-namedotcom.js) | acme-dns-01-namedotcom |
|
||||
| dns-01 | Route53 (AWS) | acme-dns-01-route53 |
|
||||
| http-01 | S3 (AWS, Digital Ocean, Scaleway) | acme-http-01-s3 |
|
||||
| dns-01 | [Vultr](https://git.rootprojects.org/root/acme-dns-01-vultr.js) | acme-dns-01-vultr |
|
||||
| dns-01 | [Build your own](https://git.rootprojects.org/root/acme-dns-01-test.js) | acme-dns-01-test |
|
||||
| http-01 | [Build your own](https://git.rootprojects.org/root/acme-http-01-test.js) | acme-http-01-test |
|
||||
| tls-alpn-01 | [Contact us](mailto:support@therootcompany.com) | - |
|
||||
|
||||
Search `acme-http-01-` or `acme-dns-01-` on npm to find more.
|
||||
|
||||
# Commercial Support
|
||||
|
||||
|
|
Loading…
Reference in New Issue