两个SSLContext在同一个JVM中

时间:2014-03-19 16:14:12

标签: ssl jvm

当代码的另一部分正在调用SSLContext.getInstance()时,我们正在收到SSL握手异常。有人可以确认或拒绝使用相同的提供程序在同一JVM中运行多个并发SSLContex的能力吗?方法名称getInstance意味着单例。

1 个答案:

答案 0 :(得分:4)

是的,您可以拥有多个SSLContext个实例,如果您愿意,可以进行不同的配置。

getInstance(...)通常是 factory 模式的一部分,而不是 singleton 模式,尽管单例模式的许多实现也使用工厂模式访问这个单身人士。

此外,SSLContext.getInstance()不存在,只有getInstance(String)getInstance(String,String)getInstance(String,Provider)(对getInstance方法有争议几乎没有意义单身人士)。

(不要将此与SSLContext.getDefault()混淆,后者将始终返回当前的默认实例,尽管也可以使用setDefault(SSLContext)进行全局更改。)

如果您正在讨论SSLContext.getDefault(),则值得注意的是默认SSLContext只会在第一次加载时读取并使用javax.net.ssl.*系统属性。如果您在代码中的某个位置设置这些属性,但在其他地方(或不同地)设置这些属性并以不同的顺序调用SSLContext.getDefault(),则可能会产生影响:第一次调用SSLContext.getDefault()获胜(假设您不是通过进一步调用SSLContext.setDefault(...))使其复杂化。