JAVA查看SSLContext启用的协议和启用的加密套件,或排查项目http和https协议安全
【摘要】 这到位定速快何如zz-SSLContext HTTP HTTPS TLS SSL 不安全协议 不安全协议套件
一些基于安全的需求,需要排查ssl是否是安全模式,则需要查看支持的协议和加密套件。
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, new TrustManager[] { new Test2.MyX509TrustManager() }, SecureRandom.getInstanceStrong());
// 打印这个SSLContext实例使用的协议
System.out.println("缺省安全套接字使用的协议: " + sslContext.getProtocol());
// 获取SSLContext实例相关的SSLEngine
SSLEngine e = sslContext.createSSLEngine();
System.out
.println("支持的协议: " + Arrays.asList(e.getSupportedProtocols()));
System.out.println("启用的协议: " + Arrays.asList(e.getEnabledProtocols()));
System.out.println("支持的加密套件: "
+ Arrays.asList(e.getSupportedCipherSuites()));
System.out.println("启用的加密套件: "
+ Arrays.asList(e.getEnabledCipherSuites()));
排除不安全的CBC加密套件:
// 时间太久了,已经忘了这段代码是干嘛的了,不建议参考,后面补充一种新的方法
// 排除
SSLSocketFactory ssf = new ExcludeCipherSuitesSocketFactory(
sslContext.getSocketFactory(), new String[] {"CBC"});
// 新建构造器
Builder builder = new Builder().sslSocketFactory(ssf , (X509TrustManager) trustAllCerts[0]);
// 打印
String[] supportedCipherSuites = builder.build().sslSocketFactory().getSupportedCipherSuites();
补充sslcontext只开启指定协议和加密套件的方法:
// 获取SSLContext实例相关的SSLEngine
SSLEngine e = sslContext.createSSLEngine();
// 指定启用的加密条件 CBC不安全
e.setEnabledCipherSuites(new String[]{"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"});
// 指定可允许的协议 TlS1.2以下不安全
e.setEnabledProtocols(new String[]{"TLSv1.2"});
// todo 关于新建sslcontext的时候,需要重写一个isTrusted的函数,这个函数怎样写才是安全的
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)