我有一个服务器,它有一个运行在HTTPS上的睡觉应用编程接口.我想在我的应用程序中调用这个睡觉API,它在不同的端口上运行,但是因为这是通过HTTPS进行的,所以我收到了

Post https://localhost:8080/api/v1/myapi: x509: certificate signed by unknown authority

我有两个文件puic_key.pem和private_key,可以用来验证证书.使用高朗发送睡觉请求时如何验证证书?我正在用&http.Client{}发睡觉请求.以下是我现在正在做的忽略证书的操作.

tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}

client := &http.Client{Transport: tr}

推荐答案

您需要将证书的CA添加到您的传输中,如下所示:

package main

import (
    "crypto/tls"
    "io/ioutil"
    "log"
    "net/http"
    "crypto/x509"
)

func main() {
    caCert, err := ioutil.ReadFile("rootCA.crt")
    if err != nil {
        log.Fatal(err)
    }
    caCertPool := x509.NewCertPool()
    caCertPool.AppendCertsFromPEM(caCert)

    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: &tls.Config{
                RootCAs:      caCertPool,
            },
        },
    }

    _, err := client.Get("https://secure.domain.com")
    if err != nil {
        panic(err)
    }
}

但是我猜您只是还没有创建CA来制作您的证书.以下是不带解释的命令列表,这些命令可以帮助您用您自己的CA签名证书.想了解更多信息,你可以在谷歌上搜索一下.

  1. 正在生成CA

    openssl genrsa -out rootCA.key 4096
    openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt
    
  2. 为使用已创建CA签名的secure.domain.com生成证书

    openssl genrsa -out secure.domain.com.key 2048
    openssl req -new -key secure.domain.com.key -out secure.domain.com.csr
    #In answer to question `Common Name (e.g. server FQDN or YOUR name) []:` you should set `secure.domain.com` (your real domain name)
    openssl x509 -req -in secure.domain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -days 365 -out secure.domain.com.crt
    

Go相关问答推荐

无法在Macos上使用Azure Speech golang SDK

我不能让GIO画一个按钮

GORM Find方法中缺少字段

golang 的持久隐蔽服务

Go源在Goland(IDEA)中以灰色显示.什么意思?我怎么才能让它恢复正常?

如何使redis池的等待超时

不接受来自 stdin 的重复输入

Cypher 查找(多个)最低 node

如何找到一个空闲的TPM句柄来保存新的密钥对对象?

无法读取postman 中的表单数据

在golang中以JSON格式获取xwwwformurlencoded请求的嵌套键值对

在golang二进制中嵌入SvelteKit

Github Actions Go lambda 项目不同的 sha256sums

Golang 到 wasm 编译使用 tinygo.使用 wasmtime 执行

从 Makefile 运行时权限被拒绝

try 运行 docker-compose up -d 时出现错误

Golang grpc go.mod 问题

如何正确判断 io.Reader 是否为零?

我该如何做错误处理惯用的方式

从 map 返回空数组而不是空字符串数组