当前位置: 首页 > 知识库问答 >
问题:

在zuul的自定义ClosableHttpClient上发送客户端证书

南门向荣
2023-03-14

我试图发送一个X.509客户端证书与输出请求zuul转发代理。证书包含在密钥存储库中,我正在加载SSLContext上的loadKey材料()

代码如下:

    @Bean
    public CloseableHttpClient httpClient() throws Throwable {
        SSLContext sslcontext = SSLContexts.custom()
                .loadKeyMaterial(new File(keyStorePath), keyStorePass, keyStorePass, new PrivateKeyStrategy() {
                    @Override
                    public String chooseAlias(Map<String, PrivateKeyDetails> aliases, Socket socket) {
                        return alias;
                    }
                })
                .loadTrustMaterial(new File(keyStorePath), keyStorePass, new TrustSelfSignedStrategy())
                .build();

        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslcontext,
                new String[] { "TLSv1.3" },
                new String[] { "TLS_DHE_RSAWITH_AES_256_GCM_SHA384" },
                SSLConnectionSocketFactory.getDefaultHostnameVerifier());

        return HttpClients.custom().setSSLSocketFactory(sslsf)
           .build();
    }

当我做一个测试请求,我得到收到致命警报:handshake_failure和在详细的日志中,我看到消息没有X.509证书进行客户端身份验证,使用空证书消息代替。如何使http客户端将证书作为X.509客户端证书发送?

共有1个答案

吉嘉珍
2023-03-14

在我的案例中,我遇到了类似的问题,这是两部分解决方案。

  1. 进口正确证书

我错误地创建了keystore:

keytool -importcert -keystore keystore.jks -alias client-cert -file client-cert.pem  -storepass password

帮助我的是:

openssl pkcs12 -export -chain -in client-cert.pem  -inkey client-key.pem  -out keystore.p12 -name client-cert -CAfile ca-cert.pem
keytool -importkeystore -destkeystore keystore.jks -srckeystore keystore.p12 -alias client-cert

我在这里找到了这个:https://blogs.oracle.com/jtc/installing-trusted-certificates-into-a-java-keystore

 类似资料:
  • 问题内容: 我正在与socket.io聊天应用程序,我想用我的自定义客户端ID,而不是默认的(,)。连接时是否有任何发送自定义标识符的方式,或仅使用某种方式来跟踪每个ID的自定义名称?谢谢! 问题答案: 您可以在服务器上创建一个数组,并在其上存储自定义对象。例如,您可以存储Socket.io创建的ID和每个客户端发送到服务器的自定义ID: 在此示例中,您需要从每个客户端调用 storeClient

  • 我是Netty的新手,我尝试编写一个使用相互身份验证的echo服务器和客户端。不幸的是,它无法工作,客户端没有发送其客户端证书,服务器按预期断开连接。下面是我到目前为止所做的工作和客户端代码的概述--它可能包含一些bug或者我错过了一些重要的东西。谢谢你经历了这一切! 这就是我所拥有的: Netty版本4.1.0.cr1 可在服务器上下载的有效密钥存储库、信任存储库和CRL 直接使用JSSE的ec

  • 我需要在wildfly 10上运行一个自定义登录(我真的需要一个自定义实现)模块和客户端证书验证,但该模块本身从未执行。同样的方法也适用于jboss 6。 我的自定义模块: 网状物xml jboss网站。xml 在standalone.xml,包括ssl证书配置: 此外,我的自定义安全域是独立的。xml 甚至更改了默认的安全域 最后,https侦听器 一切似乎都可以,如上所示,但当我试图执行简单的

  • 应如何管理它们? 一些更具体的问题: 根据定义,本机应用程序(实际上是公共客户端)不能安全地存储其凭据(client_id+secret)。是未注册的客户吗?如果我不能使用秘密来验证/验证它,我还应该做什么? 客户端注册≠endpoint注册:第一个是关于注册客户端凭据();第二个关于注册客户端重定向endpoint。重定向endpoint注册是否足以授予客户端的真实性? 客户端凭据授予是否使用相

  • 使用worker来做服务器,没有用GatewayWorker,如何实现向指定用户推送消息? <?php use WorkermanWorker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 初始化一个worker容器,监听1234端口 $worker = new Worker('websocket://workerman.net:1

  • 我是Spring启动滤镜的新手 我需要将servlet(impl)产生的响应修改成某种模式。 例如,GetProductImpl将给出 所以在它返回给客户端之前,我需要将其修改为(有点像将响应放在模块下)(对于所有servlet的所有响应) 我寻找任何可以让我做到这一点的方法,因为在impl内部做这件事是没有意义的,因为如果像这样,我需要为所有的impl做(这是很多的,不可行的)。 如果任何人有任