gpt4 book ai didi

encryption - 需要有关自签名 SSL 和 Java 的建议

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:07 24 4
gpt4 key购买 nike

有关如何使用 Java 处理自签名证书的问题已被多次询问,并且通常会提供实现。但是,我不确定这些实现是否会给我所寻求的安全/信任。

我的情况如下:我有一个客户端程序连接到我们的服务器应用程序。这两个我们都可以完全控制。我们的客户端使用 https 将流发布到我们服务器上的 URL,然后服务器响应。目前(这就是我要修复的问题)服务器有一个自签名证书。 Java 不喜欢这样,并且仅用于测试,我们几乎完全忽略证书而完全信任任何证书。

我对 SSL 知之甚少。我的老板说我们可以使用我们的自签名证书,只要我们不进行加密,它就会很安全。关键公众。这对我来说听起来是正确的,但是很多帖子都说自签名证书自动容易受到中间人攻击。这是否意味着 SSL 发送 crypt. key 连同证书?

既然我们控制了两端,我们是否应该只用 key 自己加密我们的数据,并在最后使用我们的 key 解密?还是有理由使用 SSL?

最佳答案

不要盲目地信任任何证书(这会使连接容易受到 MITM 攻击),而是将您的 Java 客户端配置为信任该特定证书。自签名证书本身并不会使 SSL/TLS 连接容易受到 MITM 攻击,它们只是使它们的分发和信任评估更加特定于此特定部署(即您必须手动配置)。

您至少可以通过 3 种方式完成此操作(选择对您来说最简单的一种,我建议要点 #2):

  • 将服务器证书导入客户端的全局信任库(JRE 目录中的 lib/security/cacerts)。这将使使用此 JRE 运行的所有应用程序都信任此证书。
  • 将服务器证书导入另一个信任库(可能是 lib/security/cacerts 的本地副本)并让这个特定的应用程序使用这个信任库。这可以使用 javax.net.ssl.trustStore 来完成系统属性。
  • 让您的客户端应用程序使用 SSLContextX509TrustManager 初始化配置为信任该证书:手动编写的证书或来自 TrustManagerFactory 的信任管理器通过加载包含该特定证书的本地 keystore 进行初始化(与之前的方法一样)。

您将在 JSSE Reference Guide 中找到有关所有这些的更多详细信息.

(This answer to a similar question 应该为您提供正确执行所有这些操作的详细信息,特别是 keytool -import ...。)

关于encryption - 需要有关自签名 SSL 和 Java 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com