Add DowngradingListener

"Inspired" by https://github.com/BenLubar/Rnoadm/maybetls
but avoids pulling the whole game as a dependency, and has the API slightly changed,
as it makes no sense to have non-tcp TLS listeners.
This commit is contained in:
Audrius Butkevicius committed 2014-09-13 22:10:47 +01:00
1 parent bf7a128142
commit 583bcfb3c7
3 files changed
+50 -1

No files matched your search

+1 -1
View File
@@ -92,7 +92,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr) bs, _ = ioutil.ReadAll(gr)
assets["img/logo-text-64.png"] = bs assets["img/logo-text-64.png"] = bs
bs, _ = base64.StdEncoding.DecodeString("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 truncated bs, _ = base64.StdEncoding.DecodeString("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 truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr) bs, _ = ioutil.ReadAll(gr)
assets["index.html"] = bs assets["index.html"] = bs
+48
View File
@@ -5,6 +5,7 @@
package main package main
import ( import (
"bytes"
"crypto/rand" "crypto/rand"
"crypto/rsa" "crypto/rsa"
"crypto/sha256" "crypto/sha256"
@@ -13,8 +14,10 @@ import (
"crypto/x509/pkix" "crypto/x509/pkix"
"encoding/binary" "encoding/binary"
"encoding/pem" "encoding/pem"
"io"
"math/big" "math/big"
mr "math/rand" mr "math/rand"
"net"
"os" "os"
"path/filepath" "path/filepath"
"time" "time"
@@ -73,3 +76,48 @@ func newCertificate(dir string, prefix string) {
pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}) pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)})
keyOut.Close() keyOut.Close()
} }
type DowngradingListener struct {
net.Listener
TLSConfig *tls.Config
}
type WrappedConnection struct {
io.Reader
net.Conn
}
func NewDowngradingListener(address string, config *tls.Config) (net.Listener, error) {
listener, err := net.Listen("tcp", address)
if err != nil {
return nil, err
}
return &DowngradingListener{listener, config}, nil
}
func (listener *DowngradingListener) Accept() (net.Conn, error) {
connection, err := listener.Listener.Accept()
if err != nil {
return nil, err
}
var peek [1]byte
_, err = io.ReadFull(connection, peek[:])
if err != nil {
return nil, err
}
jointReader := io.MultiReader(bytes.NewReader(peek[:]), connection)
wrapper := &WrappedConnection{jointReader, connection}
// TLS handshake starts with ASCII SYN
if peek[0] == 22 {
return tls.Server(wrapper, listener.TLSConfig), nil
}
return wrapper, nil
}
func (c *WrappedConnection) Read(b []byte) (n int, err error) {
return c.Reader.Read(b)
}
+1
View File
@@ -716,6 +716,7 @@
<li><a href="https://github.com/golang/groupcache">groupcache/lru</a>, Copyright &copy; 2013 Google Inc.</li> <li><a href="https://github.com/golang/groupcache">groupcache/lru</a>, Copyright &copy; 2013 Google Inc.</li>
<li><a href="https://github.com/juju/ratelimit">juju/ratelimit</a>, Copyright &copy; 2014 Canonical Ltd.</li> <li><a href="https://github.com/juju/ratelimit">juju/ratelimit</a>, Copyright &copy; 2014 Canonical Ltd.</li>
<li><a href="https://github.com/syndtr/goleveldb">syndtr/goleveldb</a>, Copyright &copy; 2012, Suryandaru Triandana</li> <li><a href="https://github.com/syndtr/goleveldb">syndtr/goleveldb</a>, Copyright &copy; 2012, Suryandaru Triandana</li>
<li><a href="https://github.com/BenLubar/Rnoadm/tree/master/maybetls">BenLubar/Rnoadm/maybetls</a>, Copyright &copy; 2013 The Rnoadm Authors.</li>
<li><a href="https://github.com/vitrun/qart">vitrun/qart</a>, Copyright &copy; The Go Authors.</li> <li><a href="https://github.com/vitrun/qart">vitrun/qart</a>, Copyright &copy; The Go Authors.</li>
<li><a href="https://angularjs.org/">AngularJS</a>, Copyright &copy; 2010-2014 Google, Inc.</li> <li><a href="https://angularjs.org/">AngularJS</a>, Copyright &copy; 2010-2014 Google, Inc.</li>
<li><a href="http://getbootstrap.com/">Bootstrap</a>, Copyright &copy; 2011-2014 Twitter, Inc.</li> <li><a href="http://getbootstrap.com/">Bootstrap</a>, Copyright &copy; 2011-2014 Twitter, Inc.</li>