我正在看JSSE
参考指南,我需要获得SSLContext
的一个实例来创建一个SSLEngine
,这样我就可以在Netty
中使用它来启用安全性。
为了获得SSLContext
的实例,我使用了SSLContext.getInstance()
。我看到该方法被多次覆盖,因此我可以选择要使用的协议和安全提供者。
Here,我可以看到可以使用的算法列表。我应该使用哪种算法来实现安全通信?
另外,既然可以指定要使用的安全提供程序,那么我应该使用哪个提供程序?
谢谢
发布于 2012-07-16 22:02:38
正如您在standard names documentation中看到的,所有条目(SSLv3、TLSv1.0、TLSv1.1...)说他们可能支持其他版本。
实际上,在Oracle JDK (和OpenJDK)中,它们都是这样的。如果你看一下source code,TLS10Context
类用于TLS,SSL,SSLv3和TLS10,TLS11Context
用于TLSv1.1,TLS12Context
用于TLSv1.2。都支持SSL/TLS的所有版本,这是默认情况下启用的不同。
对于其他提供商或JRE供应商,这可能会有所不同。当然,您应该选择一个至少支持您想要使用的协议版本的协议。
请注意,所使用的协议是稍后使用SSLSocket.setEnabledProtocols(...)
或其SSLEngine
等效项确定的。
作为一般规则,使用您可以使用的最高版本号(SSLv3 < TLSv1.0
默认情况下启用的协议因Oracle JRE的确切版本而异。
在介绍the source code for sun.security.ssl.SunJSSE
in OpenJDK 7u40-b43时,就TLSv1
协议而言,TLS
只是SSLContext
的别名( SSL
和SSLv3
也是如此)。看看各种implementations of SSLContextImpl
(它们是SSLContextImpl
本身的内部类):
所有协议都支持默认在服务器端启用所有protocols.
TLS10Context
(用于SSL
,SSLv3
,TLS
,TLSv1
)默认情况下在客户端启用SSLv3到TLSv1.0 side.TLS11Context
(用于协议TLSv1.1
)还启用default.TLS12Context
的TLSv1.1 (用于协议TLSv1.2
)还启用default.的TLSv1.2
这一点在Java8中随着the new jdk.tls.client.protocols
系统属性的变化而改变。
同样,在研究the source code for sun.security.ssl.SunJSSE
in OpenJDK 8u40-b25时,SSLContext
协议TLSv1
、TLSv1.1
和TLSv1.2
也使用了TLS10Context
、TLS11Context
和TLS12Context
,它们遵循与Java7中相同的逻辑。
但是,协议TLS
不再是它们中任何一个的别名。相反,它使用依赖于jdk.tls.client.protocols
系统属性中的值的TLSContext
。从JSSE Reference guide
要在客户端上启用特定的SunJSSE协议,请在逗号分隔的列表中用引号将其指定;然后在客户端上禁用所有其他支持的协议。例如,如果该属性的值为" TLSv1,TLSv1.1",则在客户端上启用TLSv1和TLSv1.1的客户端上的默认协议设置,而在客户端上禁用SSLv3、TLSv1.2和SSLv2Hello。
如果此属性为空,则默认情况下在客户端和服务器端都启用所有协议。
当然,在recent versions of Oracle JRE 8, SSL is also completely disabled by default中(因此从这些列表中删除)。
请注意,在这两种情况下(JRE7和8),默认情况下通过SSLContext.getDefault()
获得的开箱即用的SSLContext
或多或少等同于使用协议TLS
获得的SSLContext
,并使用默认的信任库参数等进行初始化。
发布于 2012-07-16 20:29:57
该协议没有默认值,所以我将使用您的JDK支持的最新版本,即TLSv1、TLSv1.1或TLSv1.2:看看哪个有效,或者看看getSupportedProtocols()
。默认的安全提供者是通过避免您指定的所有API来使用的,否则就是KeyStore.getDefaultType()
。
在获取SSLEngines时,请确保使用接受主机名和端口的方法。否则,您将无法获得SSL会话共享。
https://stackoverflow.com/questions/11504173
复制相似问题