java - 使用 Apache-Commons-net 添加自签名 SSL 证书

标签 java ssl apache-commons-net ftps

我正在使用 Apache Commons Net FTPSClient 为我的网络应用程序构建一个 FTPS 插件。用户可以使用我的应用程序并连接到他/她的 FTPS 服务器并将文件拉入我的应用程序,该应用程序对这些文件执行某些功能。 如果用户使用的是自签名证书,我读到 Java 导致的问题可以通过几种方式解决,如回答 here通过@dave_thompson_085。我无法更改我的 JRE trustStore,因为我的应用程序托管在我无权访问的服务器上。最后一个选项 - “编写您自己的信任库代码。创建一个 java.security.KeyStore 并使用包含您的证书的数据加载它,然后创建一个真正的 javax.net.ssl.TrustManager 并使用您的 keystore 初始化它;然后在中使用该 TrustManager你的 SSLContext。” 我不确定我明白这意味着什么。这是否再次涉及更改 keystore 并要求 JRE 获取这些更改? 另外,库中是否有明确的方法来添加证书文件?我在哪里添加 Java 或库的证书文件以首先进行验证。

最佳答案

要直接回答您的问题,不,您不能直接通过命令行或 key 工具或类似工具编辑 cacerts 文件。此方法指的是创建 KeyStore 或 JKS 的对象实例,因此 JRE 不会获取您在代码中执行此操作的任何更改,然后使用信任管理器初始化您创建的 keystore 以通过 SSL 连接.粗略地说,您正在以编程方式覆盖默认 keystore ,即 cacerts 文件,以避免彻底更改平面文件。

有明确的方法可以将文件添加到 keystore 。

将证书添加到 KeyStore 实例。

您可能想查看 BouncyCaSTLe 的图书馆。它真的非常适合您正在尝试做的事情。甚至可能有点矫枉过正,但确实很棒。

关于java - 使用 Apache-Commons-net 添加自签名 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33658303/

相关文章:

java - jdbc 瘦驱动程序中的机器名称而不是 ipaddress

java - 将使用插件的Maven项目转换为Gradle项目

http - 主机名验证和证书验证的 akka http SSLConfig 问题

ruby - 如何在 Ruby 中设置 SSLContext 选项

java - Apache Commons FTPClient.storeFile()错误原因:java.net.SocketException:连接重置

Java FTP xls文件上传

java - 在哪里插入 JScrollPane?

java - 为什么 Kotlin/Java 没有抢占式调度程序的选项?

ssl - 使用 CA 证书的替代方法

java - 如何使用 FTP 在 Java 中的一次调用中创建具有多个级别的目录