你使用的Go版本是什么( go version
)?
go version go1.13.4 linux/amd64
这个问题在最新版本的发布中是否重现?
是的
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/user/.cache/go-build"
GOENV="/home/user/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/user/Revisions/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go-1.13"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.13/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/user/go/src/helm.sh/helm/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build386574731=/tmp/go-build -gno-record-gcc-switches"
你做了什么?
package main
import (
"crypto/tls"
"fmt"
)
func main() {
cert, err := tls.LoadX509KeyPair("./helm-test-crt", "./helm-test.key")
fmt.Println(cert, err)
}
Test certs:
[https://gist.github.com/antevens/a05409165d33bd771e39bc219fe2c6bb/archive/e56cf114dee64a6b367abf08ab1c34a405a62f88.zip](https://gist.github.com/antevens/a05409165d33bd771e39bc219fe2c6bb/archive/e56cf114dee64a6b367abf08ab1c34a405a62f88.zip)
[helm/helm#7343](https://github.com/helm/helm/issues/7343)
你期望看到什么?
Client side TLS authentication succeed.
你看到了什么?
asn1: structure error: base 128 integer too large
5条答案
按热度按时间pxyaymoc1#
https://golang.org/cl/248259提到了这个问题:
encoding/asn1: add dynamic length integer support for base 128 integer parsing
krugob8w2#
See also #19933
Where did the OIDs in this cert come from? FWIW, derdump fails on it too:
k7fdbhmy3#
嗨,Mike,谢谢你的回复。
证书以及由此衍生出的OID是由Foreman(RedHat Satellite)服务器创建的,它们用于分发诸如RPMs/Debs/Containers之类的东西,并且是rhn.redhat.com等核心事物的基础。
就我所理解的,OID之所以如此之长,是因为它们除了包含认证信息之外,还包含了授权信息(赋予了特定仓库/生命周期的访问权限的能力)。
也许像@ohadlevy或@tbrisker这样的更了解的人,来自@theforeman项目,如果需要的话可以进行详细说明。
fivyi3re4#
在错误报告中提供的文件不是DER编码的。它们是PEM编码的。
如果你运行
openssl asn1parse -inform PEM -in helm-test-cert
,你会得到正常的输出。如果你运行openssl asn1parse -inform DER -in helm-test-cert
,你会得到一个关于编码错误的信息。要将它们转换为DER格式,你需要去除
-----BEGIN...
和-----END...
标记,然后对剩余部分进行base64解码。希望这对你有帮助!pdtvr36n5#
/cc @agl@FiloSottile