Мне необходимо написать клиента на Go, который коннектиться к серверу через ssl + basic auth и получает ответ. У меня есть сам сертификат с расширением .crt, а также файлы с расширениями csr, key, p12, keystore. Эти файлы прислала компания, к которой я хочу подключиться. Я делаю следующее:
// the CertPool wants to add a root as a []byte so we read the file ourselves
caCert, err := ioutil.ReadFile("client-file.crt")
pool := x509.NewCertPool()
pool.AppendCertsFromPEM(caCert)
// LoadX509KeyPair reads files, so we give it the paths
clientCert, err := tls.LoadX509KeyPair("client-file.crt", "file.key")
tlsConfig := tls.Config{
InsecureSkipVerify: false,
RootCAs: pool,
Certificates: []tls.Certificate{clientCert},
}
transport := http.Transport{
TLSClientConfig: &tlsConfig,
}
client := http.Client{
Transport: &transport,
}
req, err := http.NewRequest(
"POST", "url", bytes.NewBuffer(xmlbytes),
)
req.SetBasicAuth("login", "pass")
req.Header.Set("Content-Type", "application/xml")
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
}
respbyte, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
}
buyresp := str.BuyResponse{}
xml.Unmarshal(respbyte, &buyresp)
fmt.Println(buyresp.AuthCode, buyresp.ClientTransactionID, buyresp.ErrorCode)
Я получаю ошибку от сервера с кодом 79999, в документации к API эта ошибка неизвестна. Что я делаю не правильно? Также получаю ошибку x509: certificate signed by unknown authority. Не понятно зачем нужны файлы csr, p12, keystore. В интернете на примерах реализации я не нашел их преминения. url, pass, login в примере скрыты под общими названиями. На их месте разумеется нормальные значения