I develop a NewRequestWithCert function that create new soap.client and use cert from cert file and after soap.client.Do it returned x509: cannot validate certificate for because it doesn't contain any IP SANs. What wrong with my code ?
func (o *Client) NewRequestWithCert(urlLink string, requestData interface{}, responseData interface{}, certName string, host string) error {
// Keep on client
o.requestData = &requestData
o.responseData = &responseData
o.url = urlLink
certByte, errCert := ioutil.ReadFile("/app/certificates/" + certName)
if errCert != nil {
logrus.Errorf("cert err: %v", errCert)
return errCert
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(certByte)
logrus.Debug("certByte : ", certByte)
tlsConfig := &tls.Config{
ServerName: host,
ClientCAs: caCertPool,
ClientAuth: tls.RequireAndVerifyClientCert,
}
// New http client
o.client = &http.Client{
Timeout: 30 * time.Second,
Transport: &http.Transport{
TLSClientConfig: tlsConfig,
},
}
// Make buffer
var requestDataBuffer bytes.Buffer
err := xml.NewEncoder(&requestDataBuffer).Encode(requestData)
logrus.Info("[ProxyRequest] URL: ", urlLink)
logrus.Info("[ProxyRequest] Data: ", requestDataBuffer.String())
// Build a new request, but not doing the POST yet
req, err := http.NewRequest("POST", urlLink, &requestDataBuffer)
if err != nil {
return err
}
// Keep on client
o.req = req
// Fill default header
o.fillHeader()
return nil
}