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

SSLContext不使用来自JVM TrustStore的证书

郜杰
2023-03-14

我需要向使用TLS客户端身份验证的服务器发送请求。为此,我用我的证书和私钥创建了一个PKCS12文件,并在SSLContext中将其设置为KeyManager。

KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystoreInputStream = new FileInputStream("C:/Users/PC/Desktop/certprivate.p12");
keystore.load(keystoreInputStream, "password".toCharArray());

KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keystore, "password".toCharArray());

SSLContext sc = SSLContext.getInstance("TLSv1.3");
sc.init(kmf.getKeyManagers(), null, null);

我还使用keytool将证书从服务器添加到cacerts存储区中,虽然这不起作用,但我使用InstallCerts下载了我猜所有的中间证书,并在cacerts中安装了thoses。我现在遇到的问题是400没有发送所需的SSL证书

我不确定为什么会出现这种情况,根据我的理解,如果TrustManager设置为null,它将使用默认的TrustManager,在本例中是:

String certificatesTrustStorePath = "C:/Program Files/Java/jdk-15.0.2/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore", certificatesTrustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

编辑:我不明白为什么请求失败,因为TLS握手已经完成。否则,我会得到一些其他错误/异常。

共有1个答案

宋稳
2023-03-14

在java启动命令行中添加-djavax.net.debug=all,您将获得更多信息。在你可以诊断出你的问题之后。JC

 类似资料:
  • 问题内容: 我需要设置一个在Jersey- Client应用程序中使用。我要做的就是接受自定义根ca证书的上下文。真的没有办法生成密钥库文件和导入CA证书吗? 问题答案: 真的没有办法生成密钥库文件和导入CA证书吗? 有一些方法可以在没有密钥库文件的情况下执行此操作,但是由于必须加载要信任的CA证书,因此必须以某种方式加载文件或资源。 (您当然也可以实现自己的实现,使所有调用都使用Certific

  • Java版本:JDK-8.0.144 参考: nosuchAlgorithmException:SSL_TLSv2 SSLContext不可用#我使用的是tomcat而不是websphere,所以第2点的答案不太相关。 https://community.hitachivantara.com/s/question/0d52s00007thjo2sae/how-to-fix-tls-sslconte

  • 我正在JDeveloper 11.1.1.4中开发一个JAX-WS Web服务,它应该使用以前部署到WebLogic服务器的JAR中的EJB。WebService项目和EJB项目都是我自己的代码,但我想分别部署它们。现在我正在试验这种设置。 在Examplejb项目中,我有一个实现远程接口示例的bean ExampleBean。 在该项目中,我有两个部署描述符(ejb-jar.xml和weblog

  • 在测试我的客户机-服务器分布式系统时,我最初惊讶地得知TLS的默认JSSE实现不进行主机名验证。我在这个问题中尝试了公认的答案,但我的用例有点不同。我使用RabbitMQ的连接工厂,它抽象了SSLSocket的构造。我只是为连接工厂提供了一个SSLContext。我确实找到了很多关于HTTPS的信息,甚至还有一些其他协议,但并不是总能使用的通用协议,即使是自定义协议。 但是,除了使用之外,关于创建

  • 关于Netty、Spring Webflux以及如何向多个下游系统发送http请求的小问题,当每个下游系统都需要MTL并且需要不同的客户端证书来向每个系统发送请求时,请回答? 到目前为止,我在我的Java11 Spring WebFlow 2.4.2应用程序中发送请求是: 对于Netty SslContext(顺便说一句,它不是apache SslContext) 当我们只需要向一个下游发送请求时

  • 我有一个关于在Spring Boot应用程序中启用SSL的快速问题。我有一个从系统团队收到的SSL证书。证书是通过第三方证书颁发机构创建的。我们当前的应用程序只是基于spring-boot,它监听端口80。我正在尝试在Spring Boot应用程序中启用SSL,但是所有的教程/示例都是关于使用具有以下配置的自签名证书的。 是否有一种方法可以在spring boot中使用这种类型的证书启用SSL,或