Java实现7种常见密码算法( 八 )


public String testReqHttpsTrustCert() throws Exception {// 读取jdk预置证书KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());try(InputStream ksIs = new FileInputStream(System.getProperty("java.home") + "/lib/security/cacerts")) {keyStore.load(ksIs, "changeit".toCharArray());}// 读取证书文件CertificateFactory cf = CertificateFactory.getInstance("X.509");try(InputStream certIs = this.getClass().getResourceAsStream("/cert/cert.crt")) {Certificate c = cf.generateCertificate(certIs);keyStore.setCertificateEntry("demo", c);}// 生成信任管理器TrustManagerFactory tmFact = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());tmFact.init(keyStore);// 生成SSLSocketFactorySSLContext sslContext = SSLContext.getInstance("TLSv1.2");sslContext.init(null, tmFact.getTrustManagers(), new SecureRandom());SSLSocketFactory ssf = sslContext.getSocketFactory();// 发送https请求URL url = new URL("https://www.demo.com/user/list");HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();connection.setHostnameVerifier((hostname, session) -> hostname.endsWith("demo.com"));connection.setSSLSocketFactory(ssf);String result;try(InputStream inputStream = connection.getInputStream()){result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);}connection.disconnect();return result;}

注:虽然2种方法都可以解决问题 , 但第1种方法使得java程序对环境形成了依赖 , 一旦部署环境发生变化 , java程序可能就报错了 , 因此更推荐使用第2种方法 。
总结到这里 , JCA相关类的使用就介绍完了 , 如下表格中总结了JCA的常用类:
Java实现7种常见密码算法

文章插图
本篇花了近一周时间整理 , 内容较多 , 对这块不太熟悉的同学 , 可以先关注收藏起来当示例手册 , 待需要时再参阅即可 。
【Java实现7种常见密码算法】

经验总结扩展阅读