首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java SSLSocket: PKIX路径构建失败

Java SSLSocket: PKIX路径构建失败
EN

Stack Overflow用户
提问于 2012-11-22 02:15:36
回答 1查看 1.1K关注 0票数 0

我想使用SSL连接连接到我们的大学服务器。

在配置文件夹中有以下文件:

  • client.policy
  • uni_keystore.jks
  • uni_server.cer
  • uni_truststore.jks

client.policy文件包含以下内容:

代码语言:javascript
复制
grant { 
  permission java.security.AllPermission ;
};

建立了到服务器的连接,但是当我尝试从服务器读取时,我得到了异常:

代码语言:javascript
复制
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
  PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
  unable to find valid certification path to requested target

这就是我如何连接到服务器的方式(我修剪了try/catch块以缩短代码):

代码语言:javascript
复制
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();

String configPath = "C:/eclipse/workspace/uniproject/";

Properties systemProps = System.getProperties();
systemProps.put( "javax.net.ssl.trustStore", configPath+"uni_truststore.jks");
systemProps.put( "javax.net.ssl.keyStore", configPath+"uni_keystore.jks");
System.setProperties(systemProps);

s = (SSLSocket) factory.createSocket(UNI_ADDRESS, UNI_PORT);

我要通过VPN连接到服务器。

下面是我尝试阅读的方式(我修剪了try/catch块以缩短代码):

代码语言:javascript
复制
InputStream istream = s.getInputStream();
BufferedReader reader = new BufferedReader( new InputStreamReader(istream) );

String data;
do {
    // this lines throws exception
    data = reader.readLine();
    System.out.println(data);
}
while(data != null);

我不会对代码中的client.policy和uni_server.cer文件做任何事情。这可能是问题所在吗?我遗漏了什么?

谢谢。

还有两件事:

  • 我安装了认证(在这个职位之前,我还没有)
  • 我加了一句:

代码语言:javascript
复制
systemProps.put( "javax.net.ssl.keyStorePassword", "pass");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-22 02:22:14

试着像这样重新排序你的电话:

代码语言:javascript
复制
String configPath = "C:/eclipse/workspace/uniproject/";
Properties systemProps = System.getProperties();
systemProps.put( "javax.net.ssl.trustStore", configPath+"uni_truststore.jks");
systemProps.put( "javax.net.ssl.keyStore", configPath+"uni_keystore.jks");
System.setProperties(systemProps);

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
s = (SSLSocket) factory.createSocket(UNI_ADDRESS, UNI_PORT);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13504999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档