Skip to content

crypto/x509: Verify should reject certificates with empty issuers #71832

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
dulanshuangqiao opened this issue Feb 19, 2025 · 4 comments
Open
Labels
BugReport Issues describing a possible bug in the Go implementation. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.

Comments

@dulanshuangqiao
Copy link

Go version

go version go1.23.2 linux/amd64

Output of go env in your module/workspace:

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/liu/.cache/go-build'
GOENV='/home/liu/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/liu/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/liu/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/snap/go/10730'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/snap/go/10730/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.23.2'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/liu/.config/go/telemetry'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/dev/null'
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-build578094757=/tmp/go-build -gno-record-gcc-switches'

What did you do?

Perform certificate verification
go run go_verify.go

certs.zip

What did you see happen?

The execution result is passed verification
Certificate is valid!

What did you expect to see?

RFC5280 mentions: The issuer field MUST contain a non-empty distinguished name (DN). This means that the certificate I provided should not pass the validation.
Gnutls threw an error when validating it:
Loaded CAs (1 available)
gnutls_x509_crt_get_issuer_dn: The requested data were not available.

@gabyhelp gabyhelp added the BugReport Issues describing a possible bug in the Go implementation. label Feb 19, 2025
@seankhliao seankhliao added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Feb 19, 2025
@seankhliao seankhliao changed the title crypto/x509:Certificates with empty issuer field incorrectly pass validation crypto/x509: Verify should reject certificates with empty issuers Feb 19, 2025
@rlanhellas
Copy link
Contributor

rlanhellas commented Mar 2, 2025

@dulanshuangqiao , I'm investigating your problem, but would be good to update your code, since this certificate is not valid anymore, you need to set custom CurrentTime in order to execute it again:

// this ensure your code will execute always, regardless of current time, since your certificate has a short valid period
customNow := time.Date(2024, 04, 01, 0, 0, 0, 0, time.Now().UTC().Location()) 
	opts := x509.VerifyOptions{
		Roots:       rootCertPool,
		CurrentTime: customNow,
	}

@dulanshuangqiao
Copy link
Author

@dulanshuangqiao , I'm investigating your problem, but would be good to update your code, since this certificate is not valid anymore, you need to set custom CurrentTime in order to execute it again:

// this ensure your code will execute always, regardless of current time, since your certificate has a short valid period
customNow := time.Date(2024, 04, 01, 0, 0, 0, 0, time.Now().UTC().Location()) 
	opts := x509.VerifyOptions{
		Roots:       rootCertPool,
		CurrentTime: customNow,
	}

OK, I'll wait for your results.

@gopherbot
Copy link
Contributor

Change https://go.dev/cl/655715 mentions this issue: crypto/x509: improve Certificate validation avoiding empty issuers

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BugReport Issues describing a possible bug in the Go implementation. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Projects
None yet
Development

No branches or pull requests

5 participants