JAVA查看SSLContext启用的协议和启用的加密套件,或排查项目http和https协议安全

举报
object 发表于 2023/06/05 15:24:06 2023/06/05
【摘要】 这到位定速快何如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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。