Just use plain old unencrypted TLS keys right now.
diff --git a/pem.go b/pem.go
deleted file mode 100644
index b021eff..0000000
--- a/pem.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package goscaffold
-
-import (
- "crypto/tls"
- "crypto/x509"
- "encoding/pem"
- "errors"
- "fmt"
- "io/ioutil"
-)
-
-func decodePEM(fileName string, pwFunc func() []byte) ([]byte, string, error) {
- pb, err := ioutil.ReadFile(fileName)
- if err != nil {
- return nil, "", err
- }
- block, _ := pem.Decode(pb)
- if x509.IsEncryptedPEMBlock(block) {
- if pwFunc == nil {
- return nil, "", errors.New("Cannot read encrypted file without password")
- }
- dec, err := x509.DecryptPEMBlock(block, pwFunc())
- if err != nil {
- return nil, "", err
- }
- return dec, block.Type, nil
- }
- return block.Bytes, block.Type, nil
-}
-
-func getCertificate(certFile, keyFile string, pwFunc func() []byte) (tls.Certificate, error) {
- ret := tls.Certificate{}
-
- certBytes, _, err := decodePEM(certFile, nil)
- if err != nil {
- return ret, err
- }
- ret.Certificate = [][]byte{certBytes}
-
- keyBytes, keyType, err := decodePEM(keyFile, pwFunc)
- if err != nil {
- return ret, err
- }
- switch keyType {
- case "RSA PRIVATE KEY":
- pk, err := x509.ParsePKCS1PrivateKey(keyBytes)
- if err != nil {
- return ret, err
- }
- ret.PrivateKey = pk
- default:
- return ret, fmt.Errorf("Invalid private key type %s", keyType)
- }
-
- return ret, nil
-}
diff --git a/scaffold.go b/scaffold.go
index de6e7f3..a878a7b 100644
--- a/scaffold.go
+++ b/scaffold.go
@@ -94,7 +94,6 @@
markdownMethod string
markdownHandler MarkdownHandler
keyFile string
- keyPassFunc func() []byte
certFile string
}
@@ -190,9 +189,8 @@
If "getPass" is non-null, then the function will be called at startup time
to retrieve the password for the key file.
*/
-func (s *HTTPScaffold) SetKeyFile(fn string, getPass func() []byte) {
+func (s *HTTPScaffold) SetKeyFile(fn string) {
s.keyFile = fn
- s.keyPassFunc = getPass
}
/*
@@ -278,7 +276,7 @@
if s.keyFile == "" || s.certFile == "" {
return errors.New("key and certificate files must be set")
}
- cert, err := getCertificate(s.certFile, s.keyFile, s.keyPassFunc)
+ cert, err := tls.LoadX509KeyPair(s.certFile, s.keyFile)
if err != nil {
return err
}
diff --git a/scaffold_test.go b/scaffold_test.go
index 361a6f0..e46bcad 100644
--- a/scaffold_test.go
+++ b/scaffold_test.go
@@ -279,7 +279,7 @@
It("Secure And Insecure Ports", func() {
s := CreateHTTPScaffold()
s.SetSecurePort(0)
- s.SetKeyFile("./testkeys/clearkey.pem", nil)
+ s.SetKeyFile("./testkeys/clearkey.pem")
s.SetCertFile("./testkeys/clearcert.pem")
stopChan := make(chan error)
err := s.Open()
@@ -309,7 +309,7 @@
s := CreateHTTPScaffold()
s.SetSecurePort(0)
s.SetInsecurePort(-1)
- s.SetKeyFile("./testkeys/clearkey.pem", nil)
+ s.SetKeyFile("./testkeys/clearkey.pem")
s.SetCertFile("./testkeys/clearcert.pem")
stopChan := make(chan error)
err := s.Open()
@@ -332,63 +332,6 @@
s.Shutdown(shutdownErr)
Eventually(stopChan).Should(Receive(Equal(shutdownErr)))
})
-
- It("Secure Port Encrypted Key", func() {
- s := CreateHTTPScaffold()
- s.SetSecurePort(0)
- s.SetInsecurePort(-1)
- s.SetKeyFile("./testkeys/serverkey.pem", func() []byte {
- return []byte("secure")
- })
- s.SetCertFile("./testkeys/servercert.pem")
- stopChan := make(chan error)
- err := s.Open()
- Expect(err).Should(Succeed())
- Expect(s.InsecureAddress()).Should(BeEmpty())
-
- go func() {
- fmt.Fprintf(GinkgoWriter, "Gonna listen on %s\n",
- s.SecureAddress())
- stopErr := s.Listen(&testHandler{})
- fmt.Fprintf(GinkgoWriter, "Done listening\n")
- stopChan <- stopErr
- }()
-
- Eventually(func() bool {
- return testGetSecure(s, "")
- }, 5*time.Second).Should(BeTrue())
-
- shutdownErr := errors.New("Validate")
- s.Shutdown(shutdownErr)
- Eventually(stopChan).Should(Receive(Equal(shutdownErr)))
- })
-
- It("Read PEM files", func() {
- _, t, err := decodePEM("./testkeys/clearkey.pem", nil)
- Expect(err).Should(Succeed())
- Expect(t).Should(Equal("RSA PRIVATE KEY"))
- _, t, err = decodePEM("./testkeys/clearcert.pem", nil)
- Expect(err).Should(Succeed())
- Expect(t).Should(Equal("CERTIFICATE"))
- _, err = getCertificate("./testkeys/clearcert.pem", "./testkeys/clearkey.pem", nil)
- Expect(err).Should(Succeed())
-
- _, _, err = decodePEM("./testkeys/servercert.pem", nil)
- Expect(err).Should(Succeed())
- _, _, err = decodePEM("./testkeys/serverkey.pem", nil)
- Expect(err).ShouldNot(Succeed())
- _, _, err = decodePEM("./testkeys/serverkey.pem", func() []byte {
- return []byte("notsecure")
- })
- Expect(err).ShouldNot(Succeed())
- _, _, err = decodePEM("./testkeys/serverkey.pem", func() []byte {
- return []byte("secure")
- })
- Expect(err).Should(Succeed())
- _, err = getCertificate("./testkeys/servercert.pem", "./testkeys/serverkey.pem", func() []byte {
- return []byte("notsecure")
- })
- })
})
func getText(url string) (int, string) {