add tls config to server (#1202)

* add tls config

* add TLSConfig to acme provider
This commit is contained in:
Asim Aslam
2020-02-15 15:10:26 +00:00
committed by GitHub
parent 158949d0d0
commit 964b7dee3f
9 changed files with 114 additions and 18 deletions

View File

@@ -2,6 +2,7 @@
package certmagic
import (
"crypto/tls"
"log"
"math/rand"
"net"
@@ -16,7 +17,8 @@ type certmagicProvider struct {
opts acme.Options
}
func (c *certmagicProvider) NewListener(ACMEHosts ...string) (net.Listener, error) {
// TODO: set self-contained options
func (c *certmagicProvider) setup() {
certmagic.Default.CA = c.opts.CA
if c.opts.ChallengeProvider != nil {
// Enabling DNS Challenge disables the other challenges
@@ -34,12 +36,20 @@ func (c *certmagicProvider) NewListener(ACMEHosts ...string) (net.Listener, erro
rand.Seed(time.Now().UnixNano())
randomDuration := (7 * 24 * time.Hour) + (time.Duration(rand.Intn(504)) * time.Hour)
certmagic.Default.RenewDurationBefore = randomDuration
}
return certmagic.Listen(ACMEHosts)
func (c *certmagicProvider) Listen(hosts ...string) (net.Listener, error) {
c.setup()
return certmagic.Listen(hosts)
}
func (c *certmagicProvider) TLSConfig(hosts ...string) (*tls.Config, error) {
c.setup()
return certmagic.TLS(hosts)
}
// New returns a certmagic provider
func New(options ...acme.Option) acme.Provider {
func NewProvider(options ...acme.Option) acme.Provider {
opts := acme.DefaultOptions()
for _, o := range options {

View File

@@ -19,7 +19,7 @@ func TestCertMagic(t *testing.T) {
if len(os.Getenv("IN_TRAVIS_CI")) != 0 {
t.Skip("Travis doesn't let us bind :443")
}
l, err := New().NewListener()
l, err := NewProvider().Listen()
if err != nil {
t.Fatal(err.Error())
}
@@ -36,10 +36,10 @@ func TestCertMagic(t *testing.T) {
t.Fatal(err.Error())
}
l, err = New(acme.AcceptToS(true),
l, err = NewProvider(acme.AcceptToS(true),
acme.CA(acme.LetsEncryptStagingCA),
acme.ChallengeProvider(p),
).NewListener()
).Listen()
if err != nil {
t.Fatal(err.Error())
@@ -180,7 +180,7 @@ func TestStorageImplementation(t *testing.T) {
// New interface doesn't return an error, so call it in case any log.Fatal
// happens
New(acme.Cache(s))
NewProvider(acme.Cache(s))
}
// Full test with a real zone, with against LE staging
@@ -207,7 +207,7 @@ func TestE2e(t *testing.T) {
t.Fatal(err.Error())
}
testProvider := New(
testProvider := NewProvider(
acme.AcceptToS(true),
acme.Cache(testStorage),
acme.CA(acme.LetsEncryptStagingCA),
@@ -215,7 +215,7 @@ func TestE2e(t *testing.T) {
acme.OnDemand(false),
)
listener, err := testProvider.NewListener("*.micro.mu", "micro.mu")
listener, err := testProvider.Listen("*.micro.mu", "micro.mu")
if err != nil {
t.Fatal(err.Error())
}