- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的问题的基本组成部分是(上下文跟随代码片段)
除了在运行时从资源设置默认信任/ key 存储之外,是否有更好的替代方法?
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(testService.class.getClassLoader().getResourceAsStream("resources/.keystore"), "changeit".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, "changeit".toCharArray());
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLContext.setDefault(ctx);
围绕这个问题的上下文如下。我目前正在为具有相互证书身份验证的 Web 服务开发 CXF 客户端。出于各种原因,将客户端证书和 key 添加到默认 keystore 并不是一个理想的选择。理想情况下,我一直在寻找一种方法,将 keystore 作为资源文件包含在 JAR 中,并在需要时将其设置为运行时的默认值。我还想避免在每个对象的基础上配置每个客户端和/或连接,并且还支持诸如 JaxWsDynamicClientFactory 之类的操作(主要是为了“完整性”)。
我在互联网和 SO 上搜索了相关 Material 并找到了这些(one、two)相关问题,但所提供的解决方案都不是我正在寻找的(尽管我确实将它们用作跳板开发上面的代码)。
现在,我意识到其他解决方案也可以发挥作用,但我一直/正在专门寻找能够满足所有这些要求的解决方案。
最佳答案
您的代码将使用相同的 keystore (从类加载器加载)作为默认 keystore 和默认信任库。这实际上等同于将 -Djavax.net.ssl.keystore*
和 -Djavax.net.ssl.truststore*
设置为相同的值。
如果这是你想做的,那很好。 (不过,您可能希望在加载 keystore 后关闭 InputStream
。)
这将影响整个 JVM,以及使用 SSLContext.getDefault()
的一切,特别是依赖于默认 SSLSocketFactory
的一切(URLConnection
等等)。
由于这将是您的默认信任库,来自主要 CA 的默认受信任 CA 证书不会在您的信任库中,除非您还明确地将它们导入到您从类加载器加载的副本中。
据推测,您不会信任大量新的 CA(或自签名)证书。将 keystore 和信任库分开可能更方便,因为您的信任库可能对大多数客户端都是通用的,并且通常只是一开始的一次性配置步骤。
关于java - 在运行时从资源设置默认的 Java SSLContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764845/
NHibernate version: 3.3.2. 我有一个包含多个操作的 NHibernate 事务。作为事务中的中间步骤之一,我尝试通过 Session.Save 插入一个具有自动增量 PK 的
请参阅我有一个具有多个值的 HashSet,该值可以包含例如 4141234567 、 4241234567 _0x10456790719 4141234567 _0x104567907907 和 _
我有一个 javafx 应用程序,我有一个主界面,我可以在其中设置我的舞台并启动该应用程序。我还有一个 Controller 类: public class Controller { @
我正在编写一个与 Web 服务集成的 iPhone 应用程序。我将从网络服务获取数据并用它填充表格 View 。我的问题:当用户滚动表格 View 时,我希望从 Web 服务动态加载更多数据并填充表格
我有以下结构: PreProd > Variables.tf 具有: variable "vms" { default = [ { "hostname" : "Monitor0
我下面有一个 Shiny 的应用程序,它显示绘图或表格。我对表格不感兴趣,我的问题只涉及 plotly 部分。当我使用此 javascript solution 在浏览器中打开应用程序时,我尝试下载该
我目前正在学习如何在 Java 中使用 Swing。将 JTextFields、JLabels 或 JButtons 添加到 JPanel 时,我通常用 4 行来完成,如下所示: gbc.gridx
我有一个名为 TabView 的自定义 UIView 类。每个 TabView 中都有 2 个标签以及一些其他元素。我使用界面生成器将这些标签添加到 TabView 中。在将 TabViews 作为
class A{ private List list; // getter setter public class B{ @command public void dele
当计时器达到零时,我试图从 Pane 中删除元素,更具体地说是标签和文本区域。但是,当计时器达到 0 并且我调用此方法时,我收到此异常。 Exception in thread "AWT-EventQ
使用 LINQ 时我应该从 WCF 服务返回什么?例如: var res = from q in context.cust select q; LINQ 遵循延迟执行,因此语句在运
我有一个计时器,可以在 GameScene.swift 文件中启动/重置,但是当应用程序在通话期间最小化或按下主页按钮时,它会继续运行。如何停止计时器并在应用程序再次处于事件状态时继续计时器? if
我有以下 Java 程序,但我不想在最后一个元素之后分配“,”,怎么办? String range = "400-450"; Integer startRange = null;
我正在使用 SAX 来解析一些 XML。在我的处理程序中 startElement()方法我正在尝试读取名为 xsi:type 的属性的值,例如: String type = attributes.g
我正在从事一个项目,该项目必须将数据从 Excel 文件导入和导出到数据库等。我必须从数据库获取数据,然后。但是如何根据 id、电话号码、用户名检查 excel 文件中的数据是否不重复。这是读取exc
我需要 Hook 程序的日志记录功能并获取它的日志记录参数,它使用 sqlite3_prepare_v2 -> sqlite3_bind_xxx -> sqlite3_step 函数。我想知道是否有可
您好,我正在尝试创建一个画笔,但我在使用 SelectObject 这行代码时遇到了问题: Brush_C = SelectObject(hdc_TS, hBrush); 错误是这样的: line 2
我正在尝试制作一个用户可以登录并将其用户数据保存到 mysql-db 的应用程序。我正在使用 PreferenceActivity 和 PreferenceFragment 来处理这个问题。通常这工作
我们使用自定义标签代码在 Google map 中添加带有标签的标记,还使用 MarkerCluster 库对标记进行聚类。 我们的问题是标记隐藏了,但标签仍然显示。我们需要修改http://go
我有一个包含 3 列的 CSV 文件;文本,整数,文本。当我导入这些时,所有数据都包含在双括号中。我不确定为什么。是否可以使用 COPY 在导入时删除这些内容?或者我应该导入为文本,然后使用 sele
我是一名优秀的程序员,十分优秀!