-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Description
Go version
go version go1.22.0 linux/amd64
Output of go env
in your module/workspace:
GO111MODULE=''
GOARCH='amd64'
GOBIN='/home/sylvain/projects/sandboxes/go/bin'
GOCACHE='/home/sylvain/.cache/go-build'
GOENV='/home/sylvain/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/sylvain/projects/sandboxes/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/sylvain/projects/sandboxes/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/sylvain/projects/sandboxes/go/src/project_desktop/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/home/sylvain/projects/sandboxes/go/src/project_desktop/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.22.0'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/home/sylvain/projects/sandboxes/go/src/project_desktop/test2/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build374461103=/tmp/go-build -gno-record-gcc-switches'
What did you do?
package main
import (
"log"
"encoding/pem"
"crypto/x509"
)
const certPEM = `-----BEGIN CERTIFICATE-----
MIIDVjCCAr+gAwIBAgIQcUDJs+myZJVPkzJuMoievTANBgkqhkiG9w0BAQ0FADBk
MRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQGEwdEZW5tYXJrMRMwEQYDVQQK
EwozU2hhcGUgQS9TMSYwJAYDVQQDEx0zU2hhcGUgRGVudGFsIERlc2t0b3AgUm9v
dCBDQTAeFw0yNDAxMjMwMDAwMDBaFw0zNDAxMjAwMDAwMDBaMBIxEDAOBgNVBAMM
B0x1ZG92aWMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSIKwSGFbX
sCpiA/TigcsPdvarniWkTXUhPGCk6JpdYUuEJWbz9feW/Em1ZU4JxhAzWmItRff6
EG75nXEEpybQS3xHargw/g8lOdwRdORDlvnJSGZ4LUZZd9+z8Iuv/39SvUSOSwCB
elUpdH3Y0BVACjS5aOJIeobfrJ++GdVRZ6rmD/SMhrpxRQwhdLFmH1K67g3fngPr
qDukSR0D5LdYeZ3M/ZQu9F4yPo0jDz0Y/WLK8LtY5+9Z2T4eNwoeCYDhZ27HGlTd
RtK8aZQS+86EmeEql8qPqsaM4fiOr5QK2Cjdrqr3cz8Z4zimrwLw+WLPUt8sdO0V
BtxOv8CBKgipAgMBAAGjgdYwgdMwbAYDVR0RBGUwY4IJbG9jYWxob3N0ggdMdWRv
dmljggdsdWRvdmljggdMdWRvdmljggdsdWRvdmljhwkxMjcuMC4wLjGHJzAwMDA6
MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMTATBgNVHSUEDDAKBggr
BgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAwHwYDVR0jBBgwFoAU6L8v9VX11I3N1Gv3
I9wKjLvGKsYwHQYDVR0OBBYEFKtUT/a5cyo/4Xr4S7mY0UjMPL7vMA0GCSqGSIb3
DQEBDQUAA4GBAAuGT+v9jVpIGImU1KFlAfaoJh/c9E/yIjLyYNU6thlvfMJqiFsX
pmCvuE/7kbadKko3ZfBs50fo+iJrDD6LXIL5oSnQeWLt6L56YHo1PZM/tdLmJ1VH
6wXlmX6DsONrfBcnwGZmZXEPuZyDqgMc9KOzUkToR5hl81GO9o9iHenD
-----END CERTIFICATE-----`
func main() {
log.Println("Decode certificate")
block, _ := pem.Decode([]byte(certPEM))
if block == nil || block.Type != "CERTIFICATE" {
log.Fatal("failed to decode PEM block containing the certificate")
}
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
log.Fatalf("failed to parse certificate: %v", err)
}
caCertPool := x509.NewCertPool()
caCertPool.AddCert(cert)
}
What did you see happen ?
I've a HTTP server with a bad PEM certificate.
If i do an HTTP request on this host, even if i set InsecureSkipVerify: true
it will fail due to this certificate decoding error.
req, err := http.NewRequest("https://localhost", "")
if err != nil {
log.Println("Err request 1", err);
return ""
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
i will get the error:
Error: "failed to parse certificate: x509: cannot parse IP address of length 9"
What did you expect to see?
If I use InsecureSkipVerify i expect http library to skip the verification of the server's SSL certificate.
But it check the SSL certificate by parsing the PEM certificate, so it's failing.
I'm not expecting GOLANG to parse the PEM certificate with the InsecureSkipVerify option.
Note about PEM validity
If i open my certificate with gnome "gcr-viewer" the IP read works:
$ gcr-viewer cert.pem
but not with openSSL, it say IP address is invalid:
$ openssl x509 -text -noout -in cert.pem
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:localhost, DNS:Ludovic, DNS:ludovic, DNS:Ludovic, DNS:ludovic, IP Address:<invalid length=9>, IP Address:<invalid length=39>