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

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

卢健
2023-03-14

关于如何使用Java处理自签名证书的问题已经被问过很多次,并且经常提供实现。但是,我不确定这些实现是否会给我带来我正在寻找的安全性/信任。

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

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

既然我们对两端都有控制权,我们是否应该自己用密钥加密数据,然后在最后用密钥解密?还是有理由使用SSL?

共有3个答案

谭飞掣
2023-03-14

为了实现安全通信,您需要首先确保与正确的计算机通话。当客户端首次尝试建立安全连接时,它会ping服务器,服务器会用其证书进行响应。此时,您必须在继续之前验证服务器证书。证书包括公钥和签名,可用于确保证书有效。例如,在web浏览器中,这意味着检查它是否由浏览器设置中列出的受信任的机构签名,如果检查失败,您将在浏览器中看到红色警告。在您的情况下,这将意味着您已手动(或在代码中)将服务器证书添加到信任存储中,以使其受信任。

阴波峻
2023-03-14

反对自签名证书的论点主要适用于Web应用程序。由于使用当前的基础架构,浏览器将无法验证您的自签名证书。

因为您可以控制客户端,所以您可以简单地将您期望的证书硬编码到客户端中。例如,您可以计算证书的sha1哈希,并检查它是否与预期值匹配。这样,您甚至不需要信任数百个ca。

莫英喆
2023-03-14

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

你至少可以通过3种方式做到这一点(选择最简单的一种,我建议要点2):

  • 将服务器证书导入到客户端的全局信任存储中(JRE目录中的lib/security/cacerts)。这将使所有使用此JRE运行的应用程序都信任此证书
  • 将服务器证书导入另一个信任库(可能是lib/security/cacerts的本地副本),并使此特定应用程序使用此信任库。这可以使用javax.net.ssl完成。信任库html" target="_blank">系统属性
  • 让您的客户端应用程序使用配置为信任该证书的X509TrustManager初始化的SSLContext:手动编写的内容或来自TrustManagerFactory的信任管理器,通过加载包含该特定证书的本地密钥库初始化(如前面的方法)

你可以在《JSSE参考指南》中找到更多细节。

(对类似问题的回答应为您提供正确执行所有这些操作的详细信息,尤其是keytool-import…

 类似资料:
  • 并检查证书,有效期为5天。 我需要写一个脚本,它将只是检查这个证书的过期日期,但不幸的是,它不能验证它。你能不能换个正确的流量? 我的程序:

  • 嘿,所以我为ExecutorService的java文档选择了这个例子。我想确认这个代码的流程,执行者。newFixedThreadPool将创建一个线程池(我猜)。所以serversocket将等待连接,一旦获得连接,就会启动一个线程,所以现在池大小减少1。一旦线程完成执行,池大小将再次增加1,不是吗?线程会放弃它使用的资源吗?

  • 问题内容: 如何在Android上的Java中接受自签名证书? 一个代码示例将是完美的。 我在Internet上到处都是,虽然有人声称找到了该解决方案,但它要么不起作用,要么没有示例代码来对其进行备份。 问题答案: 我在exchangeIt中具有此功能,该功能可通过WebDav连接到Microsoft Exchange。这是一些创建HttpClient的代码,该HttpClient将通过SSL连接

  • 我能够将REST WebService与Spring Boot结合使用SSL,就像它在这里解释的那样: https://medium.com/quick-code/spring-boot-how-to-secure-rest-api-with-https-54ec8f0e4796 但是本文展示了如何生成自签名证书: 现在我有一个CA的证书,我有3个文件: 如何将服务配置为使用此SSL证书,而不是使

  • 我想生成一个自签名SSL证书,并将其与Tomcat一起使用。 我怎么能这样呢?

  • 问题内容: 我正在尝试确保通过Internet进行通信的Java客户端/服务器应用程序的连接安全。我的想法是将SSL套接字与自签名证书和客户端身份验证一起使用。我做了以下事情: 服务器:包含新的自签名证书的密钥库。 客户端:包含新的自签名证书的密钥库。 服务器:包含导出的客户端证书的信任库(来自上面的项目符号)。导出客户端证书并将其导入服务器的信任库 客户端:包含导出的服务器证书的信任库(从第一个