我想与服务器建立 HTTPS 连接,如果我使用
非临时DH密钥交换,我想知道参数是什么
用于该连接。事实上,我并不关心它是否
是否短暂。
我正在寻找的是建立连接然后发出警告的能力
如果连接使用“弱”DH 参数。那是我吗
可以在连接时检查吗?或者是DH参数的集合(或者,更多
具体来说,length这些参数(以位为单位)定义为
密码套件本身?
例如,Qualys 社区线程有一个说明:
SSLLabs 认为“弱”的密码套件(嗯,每个人都认为
他们很弱......他们只是有一个抱怨他们的公共工具):https://community.qualys.com/thread/14821 https://community.qualys.com/thread/14821
他们特别提到,例如TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
这是密码套件 0x9f 并提及 DH 参数。是那些
参数的参数被烘焙到密码套件中(这意味着它们是always1024 位)或者这是服务器的配置
那些密码套件由于特定的 DH 参数选择而较弱?
无论哪种情况,我都希望能够从
如果可能的话连接。有谁知道这是否可以做到
如何?
我已经编写了一些代码来尝试获取有关握手的信息,但我不断收到null
对于我希望包含这些数据的对象。
SSLSocketFactory sf = ...;
Socket sock = new Socket();
sock.connect(address, timeout);
SSLSocket socket = (SSLSocket)sf.createSocket(sock, host, port, true);
socket.startHandshake();
SSLSession sess = socket.getHandshakeSession();
我本来希望sess
此时将包含一些有关握手的有趣信息,但它是null
。 javadoc 为startHandshake
表示握手完成后会通知事件监听器。所以我尝试了这个:
SSLSocketFactory sf = ...;
Socket sock = new Socket();
sock.connect(address, timeout);
SSLSocket socket = (SSLSocket)sf.createSocket(sock, host, port, true);
socket.startHandshake();
// SSLSession sess = socket.getHandshakeSession();
SSLSession sess = socket.getSession(); // This forces the handshake to complete
sess = socket.getHandshakeSession();
... but sess
还是null
在此刻。 “真正的”SSLSession 确实存在,并为我提供了有关连接的信息,但“握手会话”似乎始终是null
.
所以我尝试写一个HandshakeCompletedListener
,事实上我确实得到了SSLSession
,但它似乎与我可以从SSLSocket
已经,所以“握手”会议似乎没有帮助。
我怎样才能从SSLSession
?