J'ai un serveur qui a une API de repos fonctionnant sur https. Je veux appeler cet api de repos dans mon application qui s'exécute sur un port différent, mais comme c'est fini https, je reçois
Post https://localhost:8080/api/v1/myapi: x509: certificate signed by unknown authority
J'ai 2 fichiers pulic_key.pem et private_key qui peuvent être utilisés pour vérifier le certificat. Comment vérifier le certificat lors de l'envoi d'une demande de repos à l'aide de golang? J'utilise &http.Client{}
pour envoyer une demande de repos. Voici ce que je fais pour ignorer le certificat en ce moment.
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
Vous devez ajouter l'AC de votre certificat à votre transport comme:
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)
}
}
Mais je suppose que vous n'avez tout simplement pas créé CA pour créer vos certificats. Voici la liste des commandes sans explication qui peuvent vous aider à faire signer des certificats avec votre propre autorité de certification. Pour plus d'informations, vous pouvez le rechercher sur Google.
Génération de l'AC
openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt
Générer un certificat pour secure.domain.com
signé avec l'autorité de certification créée
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
Si le certificat est auto-signé, vous devez ajouter cette option:
TLSClientConfig: &tls.Config{
RootCAs: caCertPool,
InsecureSkipVerify: true,
},