Skip to content

Commit 8a2488b

Browse files
authored
Merge pull request #5 from galal-hussein/rotate_expired_wrangler
rotate expired wrangler cert
2 parents e2ac9e2 + 583d996 commit 8a2488b

File tree

4 files changed

+35
-4
lines changed

4 files changed

+35
-4
lines changed

cert/cert.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ import (
3636
"path"
3737
"strings"
3838
"time"
39+
40+
"github.com/sirupsen/logrus"
3941
)
4042

4143
const (
@@ -267,3 +269,14 @@ func ipsToStrings(ips []net.IP) []string {
267269
}
268270
return ss
269271
}
272+
273+
// IsCertExpired checks if the certificate about to expire
274+
func IsCertExpired(cert *x509.Certificate) bool {
275+
expirationDate := cert.NotAfter
276+
diffDays := expirationDate.Sub(time.Now()).Hours() / 24.0
277+
if diffDays <= 90 {
278+
logrus.Infof("certificate will expire in %f days", diffDays)
279+
return true
280+
}
281+
return false
282+
}

go.mod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@ go 1.12
44

55
require (
66
github.com/hashicorp/golang-lru v0.5.1
7+
github.com/kisielk/gotool v1.0.0 // indirect
78
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
89
github.com/sirupsen/logrus v1.4.1
910
github.com/stretchr/testify v1.3.0 // indirect
11+
github.com/stripe/safesql v0.2.0 // indirect
1012
golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284
1113
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c // indirect
1214
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862 // indirect
1315
golang.org/x/text v0.3.2 // indirect
16+
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed // indirect
17+
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect
1418
)

go.sum

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
33
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
44
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
55
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
6+
github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
7+
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
68
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
79
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
810
github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
@@ -17,6 +19,8 @@ github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1
1719
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
1820
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
1921
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
22+
github.com/stripe/safesql v0.2.0 h1:xiefmCDd8c35PVSGrL2FhBiaKxviXnGziBDOpOejeBE=
23+
github.com/stripe/safesql v0.2.0/go.mod h1:q7b2n0JmzM1mVGfcYpanfVb2j23cXZeWFxcILPn3JV4=
2024
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
2125
golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284 h1:rlLehGeYg6jfoyz/eDqDU1iRXLKfR42nnNh57ytKEWo=
2226
golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -35,4 +39,9 @@ golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
3539
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
3640
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
3741
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
42+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e h1:FDhOuMEY4JVRztM/gsbk+IKUQ8kj74bxZrgw87eMMVc=
3843
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
44+
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I=
45+
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
46+
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo=
47+
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=

server.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,20 +211,25 @@ func (s *server) Update(status *ListenerStatus) (_err error) {
211211
if tlsCert != nil {
212212
s.tlsCert = tlsCert
213213
for i, certBytes := range tlsCert.Certificate {
214-
cert, err := x509.ParseCertificate(certBytes)
214+
parsedCert, err := x509.ParseCertificate(certBytes)
215215
if err != nil {
216216
logrus.Errorf("Update cert %d parse error: %s", i, err)
217217
s.tlsCert = nil
218218
break
219219
}
220-
220+
isExpired := cert.IsCertExpired(parsedCert)
221+
if isExpired {
222+
logrus.Infof("certificate is about to expire")
223+
s.tlsCert = nil
224+
break
225+
}
221226
ips := map[string]bool{}
222-
for _, ip := range cert.IPAddresses {
227+
for _, ip := range parsedCert.IPAddresses {
223228
ips[ip.String()] = true
224229
}
225230

226231
domains := map[string]bool{}
227-
for _, domain := range cert.DNSNames {
232+
for _, domain := range parsedCert.DNSNames {
228233
domains[domain] = true
229234
}
230235

0 commit comments

Comments
 (0)