curl умеет получать из https;но из http.get () Голанга, тот же URL-адрес https не работает - PullRequest
0 голосов
/ 21 мая 2019

Когда я делаю curl https://10.184.96.62:3000/status, сервер отправляет обратно данные JSON.Все хорошо.

Используя приведенный ниже код Голанга, приложение печатает:

2019/05/21 18:29:15 Получить https://10.184.96.62:3000/status: x509: невозможно проверить сертификатдля 10.184.96.62, поскольку он не содержит IP-адресов SAN

package main

import (
        "log"
        "net/http"
)

func main() {
        _, err := http.Get("https://10.184.96.62:3000/status")
        if err != nil {
                log.Fatal(err)
        }
}

Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Проблема, указанная в сообщении об ошибке, относится к комбинации HTTPS с IP-адресами: обычно SSL-сертификат использует имя хоста для проверки подлинности сервера. В вашем случае нет имени хоста, но вместо этого IP-адрес. Есть два возможных решения вашей проблемы:

  1. Используйте имя хоста вместо IP-адреса и вставьте это имя в свой сертификат.
  2. Введите IP-адрес, который вы хотите использовать, в поле subjectAltNames («Альтернативные имена субъекта» - SAN) вашего сертификата (см. RFC 5280 ).
0 голосов
/ 24 мая 2019

Проблема была с сертификатом, который я сгенерировал.Я использовал openssl для создания самозаверяющего сертификата.Как я поделился, curl смог использовать его для установления соединения с сервером.Но не приложение go.

На каком-то форуме я видел комментарий, в котором говорилось, что заставить openssl работать в этом сценарии сложно.Поэтому я использовал этот код go для генерации сертификата.Используя этот сертификат, приложение go также смогло сделать запрос, не внося никаких изменений в исходный код, которым я поделился в своем вопросе.

Надеюсь, это поможет кому-то нуждающемуся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...