- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 PC 上运行着一个 Java 主应用程序,它可以将 XML 数据发送到 servelet 并接收返回的 XML 数据。 http://iamt.wisconsin.gov/IAM-WiEntUser/WiEntUserService?xml=
我可以使用 https://iamt.wisconsin.gov/IAM-WiEntUser/WiEntUserService?xml=来自 IE 和 Firefox,因为它们允许我加载私有(private)证书。
我想在 Java 主应用程序中使用 https,因为某些数据是敏感的。我收到带有 MSG=unkown 证书的 IOException。好的,这是有道理的,Java 不知道私有(private)证书。
我希望它会像告诉 Java 信任 FireFox 证书一样简单。System.setProperty("javax.net.ssl.trustStore", "C:/Documents and Settings/kendajm/Application Data/Mozilla/Firefox/Profiles/6f8ggdi7.default/cert8.db");但这会给出一个 IOException 和 MSG=Invalid keystore 格式。
SSL通信,到底有多难?我花了整整八个小时试图找出如何做到这一点。这似乎太简单了,以至于没有记录或非常困难,没有人有很好的例子。
帮助。
最佳答案
默认情况下,Mozilla cert8.db key 存储格式不可读(尽管可以“插入”可以解析它的提供程序。)将证书导入默认支持的 key 存储是最简单的。
首先,您需要一份证书副本。
在 Firefox 中,访问相关页面。单击窗口右下角状态栏上的“锁定”图标。在出现的对话框中,单击“查看证书”按钮。将出现一个新对话框;选择其“详细信息”选项卡。单击窗口底部的“导出”按钮将证书保存到文件中(使用 DER 或 PEM 格式)。
现在,您需要将证书转换为 Java 使用的 key 存储格式。
使用 JDK 的 keytool
工具:
keytool -import -keystore mykeystore.jks -alias iamt -file iamt.wisconsin.gov
当提示输入密码时,请选择一个新密码,稍后可用于验证 keystore 中的证书未被篡改。接下来,keytool
会提示您是否信任新证书——输入 yes!您应该有一个名为“mykeystore.jks”(或您选择的任何名称)的新 Java keystore 文件。
现在,运行您的程序,将新的 keystore 文件指定为“javax.net.ssl.trustStore”属性的值。
顺便说一句,我注意到您正在从您的服务返回 Java Beans XMLEncoder
输出。这种“长期持久性”格式是 JDK 中被忽视的瑰宝,但解析不受信任的内容并不安全。使用此语法,可以在执行解析的 JVM 中调用任何方法。这有点像使用不受信任的 JSON 的“eval”。因此,如果我正在实现客户端服务,我可能不愿意在不进行大量额外工作以将解析作为不受信任的代码“沙箱化”的情况下解析服务的结果。我假设该服务在请求中解析相同的格式,这对服务器同样是危险的。
当您询问有关错误消息的问题时,最好发布整个消息,包括堆栈跟踪(除非它实际上是一个 java.lang.StackOverflowError
!)。它可能对您毫无意义,但通常它包含立即发现问题所需的信息。
关于java - SSL通信,能有多难?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/610896/
我是一名优秀的程序员,十分优秀!