Я пытаюсь выполнить TLS-аутентификацию на удаленном сервере.Этот сервер настроен с двумя сертификатами (один корневой и один свой).Локально у меня такой же корневой сертификат.Я делаю рукопожатие TLS (для проверки этого сервера можно доверять) путем создания клиента локально.Однако при этом я получаю ошибку: x509: Certificate is valid for ServerCommonName, not ClientCommonName
.Когда я пытаюсь проверить сертификаты, представленные сервером, в идеале цепочка сертификатов сервера должна иметь корневой сертификат, которому я доверяю, и это нормально.Не в состоянии понять, почему возникает именно эта ошибка.
Может кто-нибудь помочь?Ниже приведен код ...
func CheckTLSendpoint() error {
getDecoded()
var tlsConfig tls.Config
cer, _ := tls.X509KeyPair(ClientCertPem, ClientKeyPem)
// Checking verification of server certificate by the client is required or not
rootCA := x509.NewCertPool()
rootCA.AppendCertsFromPEM(RootCaPEM)
tlsConfig = tls.Config{
RootCAs: rootCA,
Certificates: []tls.Certificate{cer},
ServerName: "ClientCommonName", //this is common name of my client certificate
}
tlsConfig.BuildNameToCertificate()
rAddr := "10.20.30.40:3325"
conn, err := net.DialTimeout("tcp", rAddr, 10*time.Second)
defer conn.Close()
if err != nil {
return fmt.Errorf("TCP connection error : %s", err.Error())
}
c := tls.Client(conn, &tlsConfig)
defer c.Close()
err = c.Handshake()
if err != nil {
return fmt.Errorf("TLS connection error : %s", err.Error())
}
return nil
}