实际上,您可以使用最新的Java 8版本指定自定义DHE参数。那就是应用程序的独立性(只要它使用JSSE TLS实现即可)。
首先,您需要指定要使用的DHE键的大小(-Djdk.tls.ephemeralDHKeySize=1024
或-Djdk.tls.ephemeralDHKeySize=2048
)。在服务器上,这将为DHE使用预定义的生成器/素数组合。对于Java 8,只能使用1024或2048,JDK 9将支持更大的尺寸。
如果要提供其他组合,则可以在jre / lib / security / Java.security中使用jdk.tls.server.defaultDHEParameters
security属性(从8u51开始)指定它们。它带有一个参数列表(每个使用的密钥大小一个),并且必须包含素数和生成器(通常为2或5)作为十六进制。
如果您用来openssl dhparam -out dhparam2048.pem 2048
生成新的配对,则可以openssl dhparam -noout -text -check -in dhparam2048.pem
在文本模式下读取和打印该文件。您将必须复制文本并将其粘贴到Java安全属性中(tr -d ':'
用于删除:
openssl十六进制表示之间的文本)
这是一个示例(仅1024之二):
>openssl dhparam -in p -check -text -noout | tr -d ':'
PKCS#3 DH Parameters: (1024 bit)
prime:
00f7a63b59edcc43a43df12077f0e9
14129c20a73cef95f919896e608ebc
8722776c948765bbbf61542e118329
6c6ea74ecbded3a93aff77a062aba4
fcf04fc01030e65077f5a802605058
65b836368dd5ea389d77691fac0f2c
f7a161c51c8e97ddecb3cf7f872b0c
cfaf54373d5203edcabc575e871bb1
107ec2f30c78ebf403
generator: 2 (0x2)
DH parameters appear to be ok.
这导致
jdk.tls.server.defaultDHEParameters= \
{ \
00f7a63b59edcc43a43df12077f0e9 \
14129c20a73cef95f919896e608ebc \
8722776c948765bbbf61542e118329 \
6c6ea74ecbded3a93aff77a062aba4 \
fcf04fc01030e65077f5a802605058 \
65b836368dd5ea389d77691fac0f2c \
f7a161c51c8e97ddecb3cf7f872b0c \
cfaf54373d5203edcabc575e871bb1 \
107ec2f30c78ebf403, 2 }
您应该重新启动服务器,并验证它是否实际上使用了该主服务器(而不是默认主服务器),因为该过程不直接进行,因此可能会出错。默认值在source中定义,对于2048位,素数来自TLS FFDHE草案。
例如,当运行openssl s_client 时,连接到Java 8 JSSE Server时可以看到1024位素数(ffffff ffffffffffc90f ... 5381ffffffffffffffff):
>openssl s_client -msg -cipher DHE-RSA-AES128-SHA256 -connect localhost:1234
...
<<< TLS 1.2 Handshake [length 018f], ServerKeyExchange
0c 00 01 8b 00 80 ff ff ff ff ff ff ff ff c9 0f
da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02
4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a
08 79 8e 34 04 dd ef 95 19 b3 cd 3a 43 1b 30 2b
0a 6d f2 5f 14 37 4f e1 35 6d 6d 51 c2 45 e4 85
b5 76 62 5e 7e c6 f4 4c 42 e9 a6 37 ed 6b 0b ff
5c b6 f4 06 b7 ed ee 38 6b fb 5a 89 9f a5 ae 9f
24 11 7c 4b 1f e6 49 28 66 51 ec e6 53 81 ff ff
ff ff ff ff ff ff 00 01 02 ...
取而代之的是,安装后必须看到自定义参数。
Java 7(768位)的默认参数为“ e9e642 ... 7a3daf”,带有ParameterCache中定义的长生成器“ 30470ad..529252” 。