我使用Apache Commons Net FTPSClient为我的Web应用程序构建FTPS插件。用户可以使用我的应用程序并连接到他/她的FTPS服务器并将文件拉入我的应用程序,该应用程序可以对这些文件执行某些功能。
如果用户正在使用自签名证书,我会发现Java导致的问题可以通过@ dave_thompson_085回答的几种方式解决。我无法更改我的JRE trustStore,因为我的应用程序托管在我无法访问的服务器上。最后一个选项 - "编写您自己的信任库。创建一个java.security.KeyStore并用包含你的cert的数据加载它,然后用你的密钥库创建一个真正的javax.net.ssl.TrustManager和.init它;然后在SSLContext中使用该TrustManager。"
我不确定我明白这意味着什么。这又是否涉及更改密钥库并要求JRE获取这些更改?
另外,库中是否有一个显式方法来添加证书文件?我在哪里添加Java或库的证书文件,以便首先进行验证。
答案 0 :(得分:1)
直接回答你的问题,不,你不是直接通过命令行或keytool或类似的东西编辑cacerts文件。此方法是指创建KeyStore或JKS的对象实例,因此JRE不会在代码中拾取您正在执行此操作的任何更改,然后使用您创建的密钥库初始化的信任管理器通过SSL进行连接。简而言之,您将以编程方式覆盖默认密钥库cacerts文件,以避免直接更改平面文件。
有明确的方法可以将文件添加到Keystores。
将证书添加到KeyStore实例。
您可能想要结帐BouncyCastle的库。它真的非常适合你想要做的事情。也许甚至有点矫枉过正,但真的很棒。
答案 1 :(得分:0)
您可以使用keytool将cert文件添加到cacerts文件中。 cacerts文件与安装的JRE位于同一位置。例如:
C:\Program Files\Java\jdk1.7.0_79\jre\lib\security
Keystore命令可以是:
keytool -import -trustcacerts -alias your_alias -file cert.crt -keystore cacerts
默认密码为" changeit"