Ssl 获取错误“;证书对ServerCommonName有效,而不是ClientCommonName“;

Ssl 获取错误“;证书对ServerCommonName有效,而不是ClientCommonName“;,ssl,go,Ssl,Go,我正在尝试对远程服务器进行TLS身份验证。此服务器配置了两个证书(一个根证书和一个它自己的证书)。在本地,我有相同的根证书。我通过在本地创建一个客户机来进行TLS握手(以验证服务器是否可信)。但是,在执行此操作时,我遇到了错误:x509:证书对ServerCommonName有效,而不是ClientCommonName。当我试图验证服务器提供的证书时,理想情况下,服务器的证书链应该有一个我信任的根证书,这很好。无法理解为什么会出现此特定错误 有人能帮忙吗?下面是代码 func CheckTLSe

我正在尝试对远程服务器进行TLS身份验证。此服务器配置了两个证书(一个根证书和一个它自己的证书)。在本地,我有相同的根证书。我通过在本地创建一个客户机来进行TLS握手(以验证服务器是否可信)。但是,在执行此操作时,我遇到了错误:
x509:证书对ServerCommonName有效,而不是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
}

如果服务器出现意外的证书,则这是服务器配置的问题,而不是客户端的问题(当然,假设预期是正确的)。等等,是否将客户端的名称放入ServerName字段?为什么?之所以称为ServerName,是因为它应该设置为服务器的名称。服务器需要证明它是你想要的。验证服务器身份时,客户端的名称是不相关的。哦。。。好啊实际上,我认为对于双向SSL,服务器将检查此字段以验证我的证书。这就是为什么我在这里用这个。谢谢@Peter澄清这一点。现在错误已经消失了。现在我得到了
EOF
:(让我试着检查一下。如果服务器出现了意外的证书,那么这是服务器配置的问题,而不是客户端的问题(当然,假设预期是正确的)。等等,你把客户端的名称放在ServerName字段中?为什么?之所以叫ServerName是因为它应该被设置为服务器的名称。服务器需要证明它是你想要的。在验证服务器的身份时,客户端的名称是不相关的。哦…好的。实际上,我认为对于双向SSL,服务器会检查这个field来验证我的证书。这就是我在这里使用它的原因。感谢@Peter澄清这一点。现在错误消失了。现在我得到了
EOF
:(让我尝试检查一下)。