Skip to content

Commit

Permalink
moved PeerCerts to netx/trace
Browse files Browse the repository at this point in the history
  • Loading branch information
kelmenhorst committed Jan 8, 2021
1 parent 5c9f81c commit f7c4dc5
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 50 deletions.
26 changes: 1 addition & 25 deletions netx/dialer/saver.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ package dialer
import (
"context"
"crypto/tls"
"crypto/x509"
"errors"
"net"
"time"

Expand Down Expand Up @@ -63,7 +61,7 @@ func (h SaverTLSHandshaker) Handshake(
TLSCipherSuite: tlsx.CipherSuiteString(state.CipherSuite),
TLSNegotiatedProto: state.NegotiatedProtocol,
TLSNextProtos: config.NextProtos,
TLSPeerCerts: peerCerts(state, err),
TLSPeerCerts: trace.PeerCerts(state, err),
TLSServerName: config.ServerName,
TLSVersion: tlsx.VersionString(state.Version),
Time: stop,
Expand Down Expand Up @@ -122,28 +120,6 @@ func (c saverConn) Write(p []byte) (int, error) {
return count, err
}

// peerCerts returns the certificates presented by the peer regardless
// of whether the TLS handshake was successful
func peerCerts(state tls.ConnectionState, err error) []*x509.Certificate {
var x509HostnameError x509.HostnameError
if errors.As(err, &x509HostnameError) {
// Test case: https://wrong.host.badssl.com/
return []*x509.Certificate{x509HostnameError.Certificate}
}
var x509UnknownAuthorityError x509.UnknownAuthorityError
if errors.As(err, &x509UnknownAuthorityError) {
// Test case: https://self-signed.badssl.com/. This error has
// never been among the ones returned by MK.
return []*x509.Certificate{x509UnknownAuthorityError.Cert}
}
var x509CertificateInvalidError x509.CertificateInvalidError
if errors.As(err, &x509CertificateInvalidError) {
// Test case: https://expired.badssl.com/
return []*x509.Certificate{x509CertificateInvalidError.Cert}
}
return state.PeerCertificates
}

var _ Dialer = SaverDialer{}
var _ TLSHandshaker = SaverTLSHandshaker{}
var _ net.Conn = saverConn{}
26 changes: 1 addition & 25 deletions netx/quicdialer/saver.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ package quicdialer
import (
"context"
"crypto/tls"
"crypto/x509"
"errors"
"time"

"github.com/lucas-clemente/quic-go"
Expand Down Expand Up @@ -75,32 +73,10 @@ func (h QUICHandshakeSaver) DialContext(ctx context.Context, network string, add
TLSCipherSuite: tlsx.CipherSuiteString(state.CipherSuite),
TLSNegotiatedProto: state.NegotiatedProtocol,
TLSNextProtos: tlsCfg.NextProtos,
TLSPeerCerts: peerCerts(state, err),
TLSPeerCerts: trace.PeerCerts(state, err),
TLSServerName: tlsCfg.ServerName,
TLSVersion: tlsx.VersionString(state.Version),
Time: stop,
})
return sess, err
}

// peerCerts returns the certificates presented by the peer regardless
// of whether the TLS handshake was successful
func peerCerts(state tls.ConnectionState, err error) []*x509.Certificate {
var x509HostnameError x509.HostnameError
if errors.As(err, &x509HostnameError) {
// Test case: https://wrong.host.badssl.com/
return []*x509.Certificate{x509HostnameError.Certificate}
}
var x509UnknownAuthorityError x509.UnknownAuthorityError
if errors.As(err, &x509UnknownAuthorityError) {
// Test case: https://self-signed.badssl.com/. This error has
// never been among the ones returned by MK.
return []*x509.Certificate{x509UnknownAuthorityError.Cert}
}
var x509CertificateInvalidError x509.CertificateInvalidError
if errors.As(err, &x509CertificateInvalidError) {
// Test case: https://expired.badssl.com/
return []*x509.Certificate{x509CertificateInvalidError.Cert}
}
return state.PeerCertificates
}
24 changes: 24 additions & 0 deletions netx/trace/event.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package trace

import (
"crypto/tls"
"crypto/x509"
"errors"
"net/http"
"time"
)
Expand Down Expand Up @@ -34,3 +36,25 @@ type Event struct {
Time time.Time `json:",omitempty"`
Transport string `json:",omitempty"`
}

// PeerCerts returns the certificates presented by the peer regardless
// of whether the TLS handshake was successful
func PeerCerts(state tls.ConnectionState, err error) []*x509.Certificate {
var x509HostnameError x509.HostnameError
if errors.As(err, &x509HostnameError) {
// Test case: https://wrong.host.badssl.com/
return []*x509.Certificate{x509HostnameError.Certificate}
}
var x509UnknownAuthorityError x509.UnknownAuthorityError
if errors.As(err, &x509UnknownAuthorityError) {
// Test case: https://self-signed.badssl.com/. This error has
// never been among the ones returned by MK.
return []*x509.Certificate{x509UnknownAuthorityError.Cert}
}
var x509CertificateInvalidError x509.CertificateInvalidError
if errors.As(err, &x509CertificateInvalidError) {
// Test case: https://expired.badssl.com/
return []*x509.Certificate{x509CertificateInvalidError.Cert}
}
return state.PeerCertificates
}

0 comments on commit f7c4dc5

Please sign in to comment.