aboutsummaryrefslogtreecommitdiff
path: root/solve_tls.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-01-26 19:23:47 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-01-26 19:23:47 +0100
commit84461be818f6aae5010bd377f3bbe025bf80fd62 (patch)
tree1960d8194843e6ec3c6b826d7401dc2381bd7350 /solve_tls.go
parent3bf3af81bd5dec7d03ea8a9f9ee110ce04698917 (diff)
TLS Stub
Diffstat (limited to 'solve_tls.go')
-rw-r--r--solve_tls.go40
1 files changed, 39 insertions, 1 deletions
diff --git a/solve_tls.go b/solve_tls.go
index 98be2a0..b9fd20d 100644
--- a/solve_tls.go
+++ b/solve_tls.go
@@ -1,12 +1,50 @@
package acme
-import "net/http"
+import (
+ "crypto/rand"
+ "crypto/rsa"
+ "crypto/x509"
+ "crypto/x509/pkix"
+ "math/big"
+ "net/http"
+ "time"
+)
+
+const tlsKeySize = 2048
type tlsSolver struct {
http.Server
}
+func NewTLSSolver(addr string) Solver {
+ s := new(tlsSolver)
+ s.Server = http.Server{Addr: addr}
+ go s.ListenAndServe()
+ return s
+}
+
func (s *tlsSolver) Solve(token, keyAuth string) error {
+ tlsKey, err := rsa.GenerateKey(rand.Reader, tlsKeySize)
+ if err != nil {
+ return err
+ }
+ serialMax := new(big.Int).Lsh(big.NewInt(1), 128)
+ serial, err := rand.Int(rand.Reader, serialMax)
+ if err != nil {
+ return err
+ }
+ tmpl := x509.Certificate{
+ SerialNumber: serial,
+ Subject: pkix.Name{
+ Organization: []string{"Acme Co"},
+ },
+ NotBefore: time.Now(),
+ NotAfter: time.Now().Add(time.Hour),
+ KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
+ ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
+ BasicConstraintsValid: true,
+ }
+ _, _ = tlsKey, tmpl
return nil
}