Kubernetes 证书支持哪些椭圆曲线?

如何解决Kubernetes 证书支持哪些椭圆曲线?

问题

我使用 secp256k1 生成了密钥和证书,运行 rke 版本 v1.2.8,但出现以下错误:

FATA[0000] Failed to read certificates from dir [/home/max/cluster_certs]: failed to read certificate [kube-apiserver-requestheader-ca.pem]: x509: unsupported elliptic curve

kubectl version

Client Version: version.Info{Major:"1",Minor:"21",GitVersion:"v1.21.1",GitCommit:"5e58841cce77d4bc13713ad2b91fa0d961e69192",GitTreeState:"clean",BuildDate:"2021-05-12T14:18:45Z",GoVersion:"go1.16.4",Compiler:"gc",Platform:"linux/amd64"}

我已通过以下方式生成根 CA 密钥和证书:

openssl ecparam -name secp256k1 -genkey -noout -out ca-pvt.pem -rand random.bin -writerand random.bin
openssl req -config .\openssl.cnf -x509 -sha256 -new -nodes -key ca-pvt.pem -days 10227 -out ca-cert.cer -rand random.bin -writerand random.bin

然后我用它来签署 rke cert generate-csr 从我的 Kubernetes Rancher cluster.yml 生成的 CSR。

批准 CSR 的命令行如下:

openssl ca -config openssl.cnf -batch -in %1 -out %2 -create_serial -notext -rand random.bin -writerand random.bin

问题

如果 secp256k1 产生 x509: unsupported elliptic curve 错误消息,Kubernetes 目前支持哪些曲线用于证书?

附注

我也尝试过 prime256v1,也称为 secp256r1。与 secp256k1 相比,它进一步发展,但仍然出现错误。

对于prime256v1,RKE 没有抱怨x509: unsupported elliptic curve

相反,它给出了错误 panic: interface conversion: interface {} is *ecdsa.PrivateKey,not *rsa.PrivateKey。这是完整的错误消息:

这里是完整的错误信息:

DEBU[0000] Certificate file [./cluster_certs/kube-apiserver-requestheader-ca.pem] content is greater than 0 
panic: interface conversion: interface {} is *ecdsa.PrivateKey,not *rsa.PrivateKey 
goroutine 1 [running]: github.com/rancher/rke/pki.getKeyFromFile(0x7ffe6294c74e,0xf,0xc00105cb10,0x27,0x8,0x27) 
/go/src/github.com/rancher/rke/pki/util.go:656 +0x212

解决方法

如果 secp256k1 产生 x509: unsupported elliptic curve 错误消息,Kubernetes 目前支持哪些曲线用于证书?

为了尝试回答这个问题,我将直接查看 source code。你可以找到那里的行,这给出了一个错误 unsupported elliptic curve:

case *ecdsa.PublicKey:
        publicKeyBytes = elliptic.Marshal(pub.Curve,pub.X,pub.Y)
        oid,ok := oidFromNamedCurve(pub.Curve)
        if !ok {
            return nil,pkix.AlgorithmIdentifier{},errors.New("x509: unsupported elliptic curve")
        }

这里有两个函数负责处理曲线:

  • 元帅:
// Marshal converts a point on the curve into the uncompressed form specified in
// section 4.3.6 of ANSI X9.62.
func Marshal(curve Curve,x,y *big.Int) []byte {
    byteLen := (curve.Params().BitSize + 7) / 8

    ret := make([]byte,1+2*byteLen)
    ret[0] = 4 // uncompressed point

    x.FillBytes(ret[1 : 1+byteLen])
    y.FillBytes(ret[1+byteLen : 1+2*byteLen])

    return ret
}
  • oidFromNamedCurve:
// OIDFromNamedCurve returns the OID used to specify the use of the given
// elliptic curve.
func OIDFromNamedCurve(curve elliptic.Curve) (asn1.ObjectIdentifier,bool) {
    switch curve {
    case elliptic.P224():
        return OIDNamedCurveP224,true
    case elliptic.P256():
        return OIDNamedCurveP256,true
    case elliptic.P384():
        return OIDNamedCurveP384,true
    case elliptic.P521():
        return OIDNamedCurveP521,true
    case secp192r1():
        return OIDNamedCurveP192,true
    }

    return nil,false
}

因此,最终的答案在于开关。支持的椭圆曲线有:

您需要将曲线更改为 secp256r1。主要区别在于 secp256k1 是 Koblitz 曲线,而 secp256r1 不是。众所周知,科布利茨曲线比其他曲线弱一些。

OpenSSL 支持“secp256r1”,它只是被称为“prime256v1”。检查 RFC 5480 中的第 2.1.1.1 节,其中“secp192r1”曲线称为“prime192v1”,“secp256r1”曲线称为“prime256v1”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res