publisher: disable HTTP/2 support. (#4239)
In Boulder Issue 3821[0] we found that HTTP/2 support was causing hard to diagnose intermittent freezes in CT submission. Disabling HTTP/2 with an environment variable resolved the freezes but is not a stable fix. Per the Go `http` package docs we can make this change persistent by changing the `http.Transport` config: Programs that must disable HTTP/2 can do so by setting Transport.TLSNextProto (for clients) or Server.TLSNextProto (for servers) to a non-nil, empty map" [0]: https://github.com/letsencrypt/boulder/issues/3821
This commit is contained in:
parent
dc11681faa
commit
3c66732bd8
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
|
"crypto/tls"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
|
@ -20,7 +21,6 @@ import (
|
||||||
"github.com/google/certificate-transparency-go"
|
"github.com/google/certificate-transparency-go"
|
||||||
ctClient "github.com/google/certificate-transparency-go/client"
|
ctClient "github.com/google/certificate-transparency-go/client"
|
||||||
"github.com/google/certificate-transparency-go/jsonclient"
|
"github.com/google/certificate-transparency-go/jsonclient"
|
||||||
"github.com/google/certificate-transparency-go/tls"
|
|
||||||
cttls "github.com/google/certificate-transparency-go/tls"
|
cttls "github.com/google/certificate-transparency-go/tls"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
|
||||||
|
|
@ -131,6 +131,18 @@ func NewLog(uri, b64PK string, logger blog.Logger) (*Log, error) {
|
||||||
MaxIdleConns: http.DefaultTransport.(*http.Transport).MaxIdleConns,
|
MaxIdleConns: http.DefaultTransport.(*http.Transport).MaxIdleConns,
|
||||||
IdleConnTimeout: http.DefaultTransport.(*http.Transport).IdleConnTimeout,
|
IdleConnTimeout: http.DefaultTransport.(*http.Transport).IdleConnTimeout,
|
||||||
TLSHandshakeTimeout: http.DefaultTransport.(*http.Transport).TLSHandshakeTimeout,
|
TLSHandshakeTimeout: http.DefaultTransport.(*http.Transport).TLSHandshakeTimeout,
|
||||||
|
// In Boulder Issue 3821[0] we found that HTTP/2 support was causing hard
|
||||||
|
// to diagnose intermittent freezes in CT submission. Disabling HTTP/2 with
|
||||||
|
// an environment variable resolved the freezes but is not a stable fix.
|
||||||
|
//
|
||||||
|
// Per the Go `http` package docs we can make this change persistent by
|
||||||
|
// changing the `http.Transport` config:
|
||||||
|
// "Programs that must disable HTTP/2 can do so by setting
|
||||||
|
// Transport.TLSNextProto (for clients) or Server.TLSNextProto (for
|
||||||
|
// servers) to a non-nil, empty map"
|
||||||
|
//
|
||||||
|
// [0]: https://github.com/letsencrypt/boulder/issues/3821
|
||||||
|
TLSNextProto: map[string]func(string, *tls.Conn) http.RoundTripper{},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
client, err := ctClient.New(url.String(), httpClient, opts)
|
client, err := ctClient.New(url.String(), httpClient, opts)
|
||||||
|
|
@ -266,7 +278,7 @@ func (pub *Impl) SubmitToSingleCTWithResult(ctx context.Context, req *pubpb.Requ
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
sctBytes, err := tls.Marshal(*sct)
|
sctBytes, err := cttls.Marshal(*sct)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue