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

用java与支持ssl的服务器通信

慕容念
2023-03-14

我有一个关于SSLConnection的问题,在java中,我为客户端编写了下面的代码(这个应用程序必须连接到服务器,我有支持ssl的服务器),但我得到了这样的错误“javax.net.ssl.sslException:Connection Hays Shutdown:javax.net.ssl.sslhandShakeException:sun.security.validator.validatoreXception:PKIX path building failed:sun.security.provider.certPath.SunCertPathBuilderException:

我怎样才能解决我的问题?

  public static void main(String[] args)  {
              BufferedReader in = new BufferedReader(
                 new InputStreamReader(System.in));
              PrintStream out = System.out;
              SSLSocketFactory f = 
                 (SSLSocketFactory) SSLSocketFactory.getDefault();
              try {
                 SSLSocket c =
                   (SSLSocket) f.createSocket("192.168.10.38", 7701);
                   printSocketInfo(c);
                   System.out.println("End printSocketInfo");
                   c.startHandshake();
                   System.out.println("HandShake oK");

                   BufferedWriter w = new BufferedWriter(
                    new OutputStreamWriter(c.getOutputStream()));
                   BufferedReader r = new BufferedReader(
                    new InputStreamReader(c.getInputStream()));
                   String m = null;
                // String m=
                 while ((m=r.readLine())!= null) {
                     System.out.println("11111");
                    out.println(m);
                    m = in.readLine();
                    System.out.println("M is:  "+ m);
                    w.write(m,0,m.length());
                    w.newLine();
                    w.flush();
                 }
                 w.close();
                 r.close();
                 c.close();
              } catch (IOException e) {
                 System.err.println(e.toString());
              }



 }

     private static void printSocketInfo(SSLSocket s) {
          System.out.println("Socket class: "+s.getClass());
          System.out.println("   Remote address = "
             +s.getInetAddress().toString());
          System.out.println("   Remote port = "+s.getPort());
          System.out.println("   Local socket address = "
             +s.getLocalSocketAddress().toString());
          System.out.println("   Local address = "
             +s.getLocalAddress().toString());
          System.out.println("   Local port = "+s.getLocalPort());
          System.out.println("   Need client authentication = "
             +s.getNeedClientAuth());
          SSLSession ss = s.getSession();
          System.out.println("   Cipher suite = "+ss.getCipherSuite());
          System.out.println("   Protocol = "+ss.getProtocol());
       }

我有一个证书文件,如何使用这个证书?

致以最诚挚的问候

共有1个答案

汤枫涟
2023-03-14

您必须将HTTPS证书放入JVM。要从HTTPS获得证书,请通过浏览器,然后单击地址栏上的“锁定”徽标。您应该能够导出证书。

Linux的解决方案:在$java_home/jre/lib/security中,使用以下命令:

sudo keytool -import -alias keyName -file /[pathForYourKey]/keyName.cert -keystore cacerts

“Cacerts”的默认密码是ChangeIt。

 类似资料:
  • 我有一个简单的TCP服务器/客户端设置。这种连接实际上效果很好。 现在,我想为套接字连接实现SSL/TLS加密。我使用密钥链访问创建了PKCS12证书。在我的服务器中,accept回调中包含以下代码: 然后我创建流的实例,并在另一个类中处理它们。 当我运行服务器并连接客户端时,我会在委托中获得常规的nsstreamventopencompleted。如果我只是关闭连接,那么当我尝试写入流或事件时,

  • 问题内容: 我需要检查服务器是否支持SSL和来自Web服务器的密码。 我查看了Java中的SSLSocket,但无法正常工作。 我使用的方法始终为每个网址提供相同的协议。此外,我没有从服务器获得密码。我猜是正确的方法 如何检查服务器使用SSL?服务器返回了什么密码? 问题答案: 分别返回 您一方 可以支持的协议和密码列表。返回您启用的这些列表的子集。 这不会告诉您有关服务器支持什么的太多信息。 根

  • 1. Qt 标准支持 — 12 个月 与很多人预想的有所不同,实际上,获得任何 Qt 产品的商业、LGPL 或 GPL 授权的 客户都可以获得 Qt 标准支持。这是很有吸引力的一项人性化的市场策略,也让广大用户对 Qt 产品增强信心,因为这项举措实际上表明了: Qt 不同版本的产品都具有一致的高品质和 优质服务。 标准支持主要面向的是应用程序开发人员。 Qt 在以下几个方面为客户提供一般性的建 议

  • 本文向大家介绍在Apache服务器上安装SSL支持的教程,包括了在Apache服务器上安装SSL支持的教程的使用技巧和注意事项,需要的朋友参考一下 今天我会讲述如何为你的个人网站或者博客安装SSL 证书,来保护你的访问者和网站之间通信的安全。 安全套接字层或称SSL,是一种加密网站和浏览器之间连接的标准安全技术。这确保服务器和浏览器之间传输的数据保持隐私和安全。它被成千上万的人使用来保护他们与客户

  • 我想写一个非常简单的API。当我使用邮差API时。我想创建android应用程序,但我的应用程序崩溃了。为什么?哪里是错误

  • 问题内容: 我正在尝试通过SSL连接使用socket.io设置服务器到服务器的链接。这是我的例子: 在没有SSL的情况下运行时,代码工作正常。我怀疑这可能是我的自签名证书未被接受,但是我不知道如何使客户接受它。 请告诉我如何:1.接受自签名SSL证书。或2.以其他方式帮助我完成这项工作。 提前致谢。 问题答案: 经过更多搜索后,将其添加到客户端中使其可以工作: require(’https’)。g