Java指定密码_为tls握手指定密码套件

在我的要求规范中写道:

支持这些安全框架的TLS实现应至少实现以下密码套件:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256

Java表示它在Java7中的TLSv1.2中提供了这个密码套件的实现 .

我是安全的新手,所以不知道如何使用它 .

在我的客户端,我正在使用:

sslcontext = SSLContexts.custom()

.loadTrustMaterial(..)

.loadKeyMaterial(..)

.useProtocol("TLSv1.2")

.build();

我从谷歌学到的是,客户端提供了一系列服务器和服务器需要选择的选项 . 如果我错了,请纠正我 .

现在我想在服务器端指定它,我不知道该怎么做如果我使用带有安全连接器的jetty:

./etc/keystores/server.jks

password

password

./etc/keystores/trust_store.jks

password

true

true

8443

30000

有用,

如果我添加以下内容,将启用TLSv1.1:

SSLv3

TLSv1.2

TLSv1

SSLv2Hello

它会给出错误:

执行requestGET https:// localhost:8443 / HTTP / 1.1线程“main”中的异常javax.net.ssl.SSLHandshakeException:服务器选择了TLSv1.1,但客户端未启用或不支持该协议版本 .

但如果我只允许TLSv1.2,它运行:

SSLv3

TLSv1.1

TLSv1

SSLv2Hello

但在这里,如果我指定协议以及密码套件规范:

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256

我得到以下异常:

异常在线程“主要” javax.net.ssl.SSLHandshakeException:远程主机关闭在sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:912)在sun.security.ssl.SSLSocketImpl.performInitialHandshake握手期间连接(SSLSocketImpl的.java:1294)在sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1321)在sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1305)在org.apache.http.conn.ssl . 位于org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)的orLC.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect中的SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)(DefaultHttpClientConnectionOperator.java: 134)在org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)在org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)在org.apache.http .impl.execchain.MainClient Exec.execute(MainClientExec.java:236)位于org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java: 88)在org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)在org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)在org.apache.http .impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)在org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)在client.ClientCustomSSL.main(ClientCustomSSL.java:69)引起by:java.io.EOFException:在Sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)的sun.security.ssl.InputRecord.read(InputRecord.java:352)上,SSL对等关闭错误...还有16个

我尝试的下一件事是在客户端使用工厂:

SSLConnectionSocketFactory factory=new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1.2"},sslcontext.getDefaultSSLParameters().getCipherSuites(), SSLConnectionSocketFactory.getDefaultHostnameVerifier());

我在屏幕上打印了这些密码套件 .

sslcontext.getDefaultSSLParameters().getCipherSuites()

然后我排除了除“TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256”之外的所有密码套件,它给了我错误

...

但是,如果我排除除“TLS_RSA_WITH_AES_128_CBC_SHA256”之外的所有内容,它就可以了 .

...

这意味着一些密码集团由码头支持,而有些则不支持 .

是这样吗?我们有这样的清单吗?或者还有其他方法可以做到这一点 . 请指导 . 我想使用这个密码套件进行握手,但我不知道该怎么做 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值