Java Kubernetes 客户端 SSLHandshakeException 扩展 (5) 不应出现在证书请求中

Ale*_*r F 17 java kubernetes

尝试在本地运行通过润滑油代理连接查询 Kubernetes 集群的 Java Kubernetes 客户端应用程序时,我收到“扩展 (5) 不应出现在证书请求中”。有什么想法吗?提前致谢

  ApiClient client = null;
    try {
        client = Config.defaultClient();
        //client.setVerifyingSsl(false);
    } catch (IOException e) {
        e.printStackTrace();
    }
    Configuration.setDefaultApiClient(client);

    CoreV1Api api = new CoreV1Api();
    V1PodList list = null;
    try {
        list = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
    } catch (ApiException e) {
        e.printStackTrace();
    }
    for (V1Pod item : list.getItems()) {
        System.out.println(item.getMetadata().getName());
    }
Run Code Online (Sandbox Code Playgroud)

zco*_*rts 41

您使用的是哪个版本的 Java?

JDK 11 以后支持 TLS 1.3,这可能会导致错误extension (5) should not be presented in certificate_request

添加-Djdk.tls.client.protocols=TLSv1.2到 JVM 参数以使其使用1.2

Go lang 上有一个与此https://github.com/golang/go/issues/35722相关的问题,那里有人还发布了在 Java 端禁用 TLS 1.3 的帖子

  • 对于使用 Intellij IDEA IDE 的用户,您可以将 `-Djdk.tls.client.protocols=TLSv1.2` 添加到“编辑配置”->“配置”选项卡 ->“环境”部分中的“VM 选项”文本字段 (2认同)

seb*_*kem 8

或者,将 JDK 升级到更新的版本以解决问题。

此修复程序的一些最低版本是:openjdk8u272、11.0.7、14.0.2

  • 我在“11.0.6”上遇到了与 OP 完全相同的问题,升级到“11.0.11”立即修复了它。谢谢! (2认同)

Arg*_*dhu 1

通过向 Java 客户端提供 kubeconfig 文件,直接从应用程序连接到 Kubernetes API 服务器,而不是通过 kubectl 代理连接。