【问题标题】:Default java cacerts don't work默认的 java cacerts 不起作用
【发布时间】:2014-12-26 22:16:02
【问题描述】:

我有一个 SSL 安全的 rest ws。

在我的 java 客户端中,我已将证书添加到 cacerts 存储区,但只有当我在 javax.net.ssl.trustStore 参数中明确设置 cacerts 文件路径并在 javax.net.ssl 中设置密码时,它才有效。信任商店密码。

java home 设置为: java.home : C:\ide\jdk1.7.0_45\jre

并将两个参数设置为:

  Properties pp = System.getProperties();

  Set<Object> s = pp.keySet();

  for (Object object : s) {
      System.out.println(object + " : " + pp.get(object));
  }

  System.setProperty("javax.net.ssl.trustStore", "C:\\ide\\jdk1.7.0_45\\jre\\bin\\cacerts");
  System.setProperty("javax.net.ssl.trustStorePassword", "secret");

结果:

  java.runtime.name : Java(TM) SE Runtime Environment 
  sun.boot.library.path : C:\ide\jdk1.7.0_45\jre\bin
  .....
  java.home : C:\ide\jdk1.7.0_45\jre
  .... other java parameters value
  WS called with success

执行异常:

  Properties pp = System.getProperties();

  Set<Object> s = pp.keySet();

  for (Object object : s) {
      System.out.println(object + " : " + pp.get(object));
  }

  //System.setProperty("javax.net.ssl.trustStore", "C:\\ide\\jdk1.7.0_45\\jre\\bin\\cacerts");
  //System.setProperty("javax.net.ssl.trustStorePassword", "secret");

结果:

java.runtime.name : Java(TM) SE Runtime Environment
sun.boot.library.path : C:\ide\jdk1.7.0_45\jre\bin
.....
java.home : C:\ide\jdk1.7.0_45\jre
.... other java parameters value
Exception in thread "main" 
Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor.execute(ApacheHttpClient4Executor.java:182)
at org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:39)
at org.jboss.resteasy.plugins.interceptors.encoding.AcceptEncodingGZIPInterceptor.execute(AcceptEncodingGZIPInterceptor.java:40)
at org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:45)
at org.jboss.resteasy.client.ClientRequest.execute(ClientRequest.java:443)
at org.jboss.resteasy.client.ClientRequest.httpMethod(ClientRequest.java:677)
at org.jboss.resteasy.client.ClientRequest.post(ClientRequest.java:566)
... 2 more

【问题讨论】:

  • 你能解释一下实际的问题是什么吗?异常跟踪等可能会有所帮助。
  • 您必须使用不同的 Java 安装来执行。 JAVA_HOME 仅由 IDE 和 JDKS 使用,java 命令不使用。
  • @Abhinav 我已经添加了整个 maon 方法,并将结果记录在控制台中。
  • @EJP java.home 和使用 cacerts 文件路径对 System.setProperty 的调用都在 eclipse IDE 中执行。

标签: java ssl https certificate keystore


【解决方案1】:

我认为问题在于我使用了错误的 cacerts 文件路径。

java中默认的cacerts文件是:

\jre\lib\security\cacerts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多