Skip to content

Instantly share code, notes, and snippets.

@bombsimon
Created November 9, 2020 21:04
Show Gist options
  • Save bombsimon/82d9b8a35d752bd51ffdaa71aac67c8d to your computer and use it in GitHub Desktop.
Save bombsimon/82d9b8a35d752bd51ffdaa71aac67c8d to your computer and use it in GitHub Desktop.
Reverse proxy ignoring TLS
module github.com/bombsimon/reverse-proxy
go 1.15
package main
import (
"crypto/tls"
"log"
"net/http"
"net/http/httputil"
"net/url"
)
// MyRoundTripper represents a custom round tripper.
type MyRoundTripper struct {
RoundTripper http.RoundTripper
}
// RoundTrip implements the RoundTripper interface.
func (mrt MyRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
newReq := *req
newReq.Header = req.Header.Clone()
return mrt.RoundTripper.RoundTrip(&newReq)
}
func main() {
proxy := &httputil.ReverseProxy{
Director: func(r *http.Request) {
target := "https://self-signed.badssl.com/"
remoteURL, err := url.Parse(target)
if err != nil {
panic(err)
}
r.Host = remoteURL.Host
r.URL.Scheme = "https"
r.URL.Host = remoteURL.Host
},
Transport: MyRoundTripper{
RoundTripper: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, //nolint:gosec // POC
},
},
},
}
server := &http.Server{
Addr: ":8080",
Handler: proxy,
}
log.Printf("Starting server on port: %d", 8080)
log.Fatal(server.ListenAndServe())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment