diff --git a/cert_error_go119.go b/cert_error_go119.go new file mode 100644 index 0000000..b2b27e8 --- /dev/null +++ b/cert_error_go119.go @@ -0,0 +1,14 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +//go:build !go1.20 +// +build !go1.20 + +package retryablehttp + +import "crypto/x509" + +func isCertError(err error) bool { + _, ok := err.(x509.UnknownAuthorityError) + return ok +} diff --git a/cert_error_go120.go b/cert_error_go120.go new file mode 100644 index 0000000..a3cd315 --- /dev/null +++ b/cert_error_go120.go @@ -0,0 +1,14 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +//go:build go1.20 +// +build go1.20 + +package retryablehttp + +import "crypto/tls" + +func isCertError(err error) bool { + _, ok := err.(*tls.CertificateVerificationError) + return ok +} diff --git a/client.go b/client.go index 0ef1eda..bcfd19e 100644 --- a/client.go +++ b/client.go @@ -27,7 +27,6 @@ package retryablehttp import ( "bytes" "context" - "crypto/x509" "fmt" "io" "io/ioutil" @@ -508,7 +507,7 @@ func baseRetryPolicy(resp *http.Response, err error) (bool, error) { if notTrustedErrorRe.MatchString(v.Error()) { return false, v } - if _, ok := v.Err.(x509.UnknownAuthorityError); ok { + if isCertError(v.Err) { return false, v } }