【问题标题】:Do Java SSLSockets require a supplied SSL Certificate?Java SSLSockets 是否需要提供的 SSL 证书?
【发布时间】:2015-05-01 06:12:59
【问题描述】:

在 HTTPS 技术中,安全连接需要 SSL 证书。此证书必须通过自行生成或通过证书颁发机构 (CA) 获得。

在 Java 中,SSLSocketSSLSocket 连接承诺与 HTTPS 连接相同的安全性(无中间人、加密等)。

当连接在两个独立的独立 Java 程序(一个客户端,一个服务器)中实例化的两个 SSLSockets 时,是否需要为 Java(服务器)提供有效证书?

指定使用哪个证书的方法有哪些?文档似乎对此没有什么要说的。

我在这里谈论的是纯 Java。我不是在谈论使用 Java 通过 HTTPS 连接到 Web 服务。

这些套接字的目的是将用户名和密码从一个 Java 应用程序(客户端)发送到另一个(服务器)以进行身份​​验证,因此它们必须尽可能安全。

【问题讨论】:

    标签: java security networking ssl ssl-certificate


    【解决方案1】:

    当连接在两个独立的 Java 程序(一个客户端,一个服务器)中实例化的两个 SSLSocket 时,是否需要为 Java(服务器)提供有效证书?

    在正常使用中,服务器(以SSLServerSocket 结尾)需要对等方信任的证书。

    如果服务器配置为需要证书,则客户端只需要证书,这不是默认设置。

    指定使用哪个证书的方法有哪些?文档似乎对此没有什么要说的。

    请参阅JSSE Reference Guide。您可以通过系统属性执行此操作。你也可以写一英尺左右的代码,但这不是必须的。

    【讨论】:

      【解决方案2】:

      如果您想要进行安全加密,您需要有一个只有双方都知道的预共享密钥,或者您必须进行某种密钥交换来计算加密密钥。密钥交换需要正确的标识,否则man-in-the-middle attack 是可能的,您将不再拥有安全的端到端加密。

      要使用预共享密钥,请注意 TLS-PSK。当谷歌搜索它时,看起来 Android 实现有一些成功,但主要是人们在问它是否可能。使用替代的 SSL 实现 BouncyCastle 或许可以做到这一点。

      如果不使用 PSK,您可以尝试使用匿名密码 (ADH)。我不知道 Java 是否支持它们,但无论如何您仍需要某种身份证明以确保您正在与预期的服务器通信。

      当然还有证书。如果您不想为您的应用程序使用公共证书,您可以将自签名证书与 public key pinning 一起使用。

      【讨论】:

        【解决方案3】:

        在 HTTPS 技术中,安全需要 SSL 证书 联系。该证书必须通过自生成获得, 或通过证书颁发机构 (CA)。在 Java 中,一个 SSLSocket 到 SSLSocket 连接承诺与 HTTPS 连接相同的安全性 (没有中间人、加密等)。

        否:HTTPS = 通过 SSL 套接字的 HTTP 流量。

        当连接两个分开实例化的 SSLSockets 时, 独立的 Java 程序(一个客户端,一个服务器),是否有必要 为 Java(服务器)提供有效证书? 是 - 证书和私钥。如果您想要双向 SSL,客户端还需要自己的一组密钥/证书

        指定使用哪个证书的方法有哪些?这 文档似乎对此没有什么可说的。

        有很多内容需要覆盖。我不确定你已经知道多少,你需要阅读的内容包括 keytool、KeyStore、SSLContext、SSLServerSocketFactory、KeyManager。

        或者你可以直接去this之类的例子

        【讨论】:

          猜你喜欢
          • 2016-07-10
          • 1970-01-01
          • 2016-04-07
          • 2013-06-08
          • 1970-01-01
          • 2014-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多