The `crypto/tls` library will not configure the client certificate if the
signing certificate authority is not present in the list provided by the
server in `CertificateRequest`. The current implementation causes the
`remote error: tls: certificate required` error making debugging the
underlying CA issue difficult.
Additional notes:
1. The library code in handshake.go intentionally does not configure the
certificate if there is no match
2. The error is as expected `remote error: tls: unknown certificate
authority` if you downgrade the client to TLS v1.2
3. The behaviour seems intentional and so I didn't want to raise a bug
ticket - but I think this needs an improvement (Config option?) to assist
in debugging - it's confusing without reading the library code to
understand the issue
```
package main
import (
"crypto/tls"
"fmt"
"log"
"net/http"
)
func main() {
clientCert, err := tls.LoadX509KeyPair("certificate", "key")
if err != nil {
log.Fatalf("Failed to load client certificate: %v", err)
}
tlsConfig := &tls.Config{
Certificates: []tls.Certificate{clientCert},
ServerName: "localhost",
}
client := &http.Client{
Transport: &http.Transport{
TLSClientConfig: tlsConfig,
},
}
resp, err := client.Get("https://localhost:8443")
if err != nil {
log.Printf("TLS Error: %v", err)
return
}
fmt.Printf("%v\n", resp.Status)
}
```
Example HAProxy configuration:
```
global
daemon
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend mtls_frontend
# Client certificate CA not present (remote error: tls: certificate
required)
bind *:8443 ssl crt /etc/ssl/certs/haproxy-server.pem verify required
ca-file /etc/ssl/certs/USERTrust_RSA_Certification_Authority.pem
# Client certificate CA present (success)
#bind *:8443 ssl crt /etc/ssl/certs/haproxy-server.pem verify required
ca-file /etc/ssl/certs/chain.pem
default_backend web_servers
backend web_servers
server web1 127.0.0.1:8080 check
```
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/4c54abb8-0598-4c0d-a39c-767c71d0ebffn%40googlegroups.com.