@pro100ckat

Как подключиться к серверу с использованием сертификата через Goland?

Мне необходимо написать клиента на 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 в примере скрыты под общими названиями. На их месте разумеется нормальные значения
  • Вопрос задан
  • 415 просмотров
Решения вопроса 1
CityCat4
@CityCat4 Куратор тега Цифровые сертификаты
Внимание! Изменился адрес почты!
x509: certificate signed by unknown authority.

Это и есть проблема. Сертификат издателя неизвестен Вашей системе. Тут есть два выхода:
- либо отключить проверку издателя (принимать все сертификаты, такого может и не быть, но возможно это InsecureSkipVerify)
- либо сертификат издателя (он должен быть в файле .p12, хотя его и отдельно можно запросить) сделать доверенным. В винде это - помещение сертификата в хранилище "Доверенные корневые центры", в линухе - в каталог установки openssl, обычно /etc/ssl/certs
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы