返回顶部
首页 > 资讯 > 后端开发 > Python >RestTemplate添加HTTPS证书全过程解析
  • 312
分享到

RestTemplate添加HTTPS证书全过程解析

2024-04-02 19:04:59 312人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录RestTemplate添加https证书证书的下载证书导入jdk生成keystore文件项目中配置RestTemplate访问HttpSMaven配置验证RestTemplat

RestTemplate添加HTTPS证书

证书的下载

先通过浏览器将未签名验证的证书保存到本地, 点击 不安全–> 证书–> 详细信息 --> 复制到文件 然后默认选择 起一个文件名 , 保存即可, 比如我将证书保存在了桌面 , 命名为 xx.cer

证书导入JDK

若是想要在项目中用到证书 , 需要先将证书导入到JDK的证书管理里面, 导入命令如下:

keytool -import -noprompt -trustcacerts -alias xx -keystore /home/oracle/jdk1.8.0_181/jre/lib/security/cacerts -file xx.cer

对上面的命令做一个解释 此命令是在linux服务器内执行的 , 在执行这个命令的时候就在证书所在的文件夹下打开终端, 然后命名一下别名 , 别名最好和证书名称一致 , 如上, 都叫xx , 另外将上面命令中的JDK路径换成你的实际路径即可

上面命令输入完毕后回车 , 会让你写密码啥的 , 就写 changeit 若是changeit不行就写 changeme 一般的 chageit 就可以了

生成keystore文件

只将证书导入JDK就可以了吗? 我这里验证的是不可以的, 必须还要生成对应的 keystore文件

keystore文件生成命令: keytool -import -file xx.cer -keystore xx.keystore

对上面的命令做一个解释 , 该命令也是在linux下执行的 ,当然windows下也可以的 , 执行的时候也是在证书所在文件夹进行的 , 若是提示权限不够 那就再加sudo , windows就以管理员的身份执行

回车后又会让你输入密码 , 那么就还对应着输入 chageit 即可

执行完毕后会在当前路径下再产生一个xx.keystore文件

项目中配置

将上面上传的xx.keystore 文件文件复制到你的项目的类路径下

将下面的这个restTemplate的配置复制到你的项目中去,其中里面用到了一个httpConverter 这个是做JSON格式转换的, 和HTTPS没太大关系 , 若是不需要就将它以及相关代码删掉即可


package com.abc.air.config;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlGorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.config.ReGIStry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.Socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.WEB.client.RestTemplate;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;

@Configuration
public class RestTemplateConfig {
    @Autowired
    private FastJsonHttpMessageConverter httpMessageConverter;
    @Bean
    RestTemplate restTemplate() throws Exception {
    	HttpComponentsClientHttpRequestFactory factory = new                                                    
    	        HttpComponentsClientHttpRequestFactory();
    	    factory.setConnectionRequestTimeout(5 * 60 * 1000);
    	    factory.setConnectTimeout(5 * 60 * 1000);
    	    factory.setReadTimeout(5 * 60 * 1000);
    	    // https
    	    SSLContextBuilder builder = new SSLContextBuilder();
    	    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    	    ClassPathResource resource = new ClassPathResource("nonghang.keystore");
    	    InputStream inputStream = resource.getInputStream();
    	    keyStore.load(inputStream, null);
    	    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(builder.build(), NoopHostnameVerifier.INSTANCE);
    	    Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
    	            .register("http", new PlainConnectionSocketFactory())
    	            .register("https", socketFactory).build();
    	    PoolingHttpClientConnectionManager phccm = new PoolingHttpClientConnectionManager(registry);
    	    phccm.setMaxTotal(200);
    	    CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).setConnectionManager(phccm).setConnectionManagerShared(true).build();
    	    factory.setHttpClient(httpClient);
    	    RestTemplate restTemplate = new RestTemplate(factory);
    	    List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
            ArrayList<HttpMessageConverter<?>> convertersValid = new ArrayList<>();
            for (HttpMessageConverter<?> converter : converters) {
                if (converter instanceof MappingJackson2HttpMessageConverter ||
                    converter instanceof MappingJackson2XmlHttpMessageConverter) {
                    continue;
                }
                convertersValid.add(converter);
            }
            convertersValid.add(httpMessageConverter);
            restTemplate.setMessageConverters(convertersValid);
    	    inputStream.close();
        return restTemplate;
    }
}

到此配置完毕!

RestTemplate访问HTTPS

本文简述一下怎么使用restTemplate来访问https。

maven


        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>

这里使用httpclient的factory

配置


    @Bean
    public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
        TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
        SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
                .loadTrustMaterial(null, acceptingTrustStrategy)
                .build();
        SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
        CloseableHttpClient httpClient = HttpClients.custom()
                .setSSLSocketFactory(csf)
                .build();
        HttpComponentsClientHttpRequestFactory requestFactory =
                new HttpComponentsClientHttpRequestFactory();
        requestFactory.setHttpClient(httpClient);
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        return restTemplate;
    }

验证


    @Test
    public void testHttps(){
        String url = "https://free-api.heweather.com/v5/forecast?city=CN101080101&key=5c043b56de9f4371b0c7f8bee8f5b75e";
        String resp = restTemplate.getForObject(url, String.class);
        System.out.println(resp);
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: RestTemplate添加HTTPS证书全过程解析

本文链接: https://lsjlt.com/news/155887.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • RestTemplate添加HTTPS证书全过程解析
    目录RestTemplate添加HTTPS证书证书的下载证书导入JDK生成keystore文件项目中配置RestTemplate访问HTTPSmaven配置验证RestTemplat...
    99+
    2024-04-02
  • RestTemplate如何添加HTTPS证书
    小编给大家分享一下RestTemplate如何添加HTTPS证书,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!RestTemplate添加HTTPS证书证书的下载...
    99+
    2023-06-25
  • 使用RestTemplate调用https接口跳过证书验证
    目录RestTemplate调用https接口跳过证书验证RestTemplate访问https遇到SSL证书验证错误添加Https证书下载证书导入证书生成keystore文件项目中...
    99+
    2024-04-02
  • 如何使用RestTemplate调用https接口跳过证书验证
    这篇文章将为大家详细讲解有关如何使用RestTemplate调用https接口跳过证书验证,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。RestTemplate调用https接口跳过证书验证import&...
    99+
    2023-06-25
  • Nginx配置ssl证书(https)的全过程
    如果有防火墙的话,记得开通443端口 安装nginx请看我的另一篇文章 《 Nginx安装配置详解》 准备材料: 1.申请ssl证书,这个如何申请可以到百度搜一下,因为域名...
    99+
    2022-11-13
    nginx配置ssl证书 nginx ssl证书
  • springboot添加SSL证书,支持https与http
    文章目录 一、添加ssl证书二、配置文件三、配置同时支持HTTPS与HTTP四、启动 一、添加ssl证书 将证书文件放在/resource目录下 二、配置文件 修改配置文件 server: ssl: # ...
    99+
    2023-08-30
    http spring boot ssl
  • 网站https安全证书过期怎么解决
    网站https安全证书过期解决的方法:1、如果是电脑系统时间不对导致的,将电脑系统的时间调整到https安全证书有效期之内即可;2、如果是 https安全证书过期,到签发机构CA续签证书即可;3、如果是当前站点外链网站的https...
    99+
    2024-04-02
  • 网站https安全证书过期如何解决
    如果网站的HTTPS安全证书过期,可以按照以下步骤解决: 联系网站的管理员或者运营者,让他们尽快更新证书。 如果无法联系到网...
    99+
    2024-05-08
    服务器
  • 网站https安全证书为什么会过期
    网站的https安全证书会过期是因为证书有一个固定的有效期限,通常为一年或两年。一旦证书到期,网站就会失去https加密保护,用户在...
    99+
    2024-05-08
    服务器
  • 网站https安全证书过期的原因有哪些
    网站https安全证书过期的原因有:1、电脑系统时间错误,导致浏览器提示网站https安全证书已过期或还未生效;2、网站的https安全证书超过39个月;3、站点引用部署了https安全证书的外链,外链证书过期,会提示相应的错误。具体内容如...
    99+
    2024-04-02
  • windows7安全证书过期怎么解决
    要解决Windows 7安全证书过期的问题,可以按照以下步骤进行操作:1. 检查系统时间和日期是否正确:确保电脑的日期和时间设置是准...
    99+
    2023-10-09
    windows7
  • Android 安全加密:Https编程详解
    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message...
    99+
    2022-06-06
    https 加密 Android
  • Win7系统安全证书过期怎么办?Win7系统安全证书过期问题的解决方法
      Win7系统安全证书过期怎么办?相信大家都有遇到过安全证书过期这一问题吧,如果本地的日期和时间都是正确的,那么我们可以尝试重新安装该网站的证书,这样就可以解决安全证书过期的问题了。有用户反应自己用Win7系统,今天打...
    99+
    2023-05-20
    Win7 安全证书 证书过期
  • Win8系统安全证书过期如何解决
    这篇“Win8系统安全证书过期如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Win8系统安全证书过期如何解决”文章吧...
    99+
    2023-07-02
  • Java中类加载过程全面解析
    类文件加载的顺序先加载执行父类的静态变量及静态初始化块(执行先后顺序按排列的先后顺序)再加载执行本类的静态变量及静态初始化块只要类没有被销毁,静态变量及静态初始化块只会执行1次,后续再对该类进行其他操作也不会再执行这两个步骤。类实例创建过程...
    99+
    2023-05-30
    java 类加载过程 中类
  • 如何解决win8安全证书过期的问题
    这篇文章主要介绍了如何解决win8安全证书过期的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在键盘上按下 Windows + R 组合键打开"运行"...
    99+
    2023-06-28
  • 如何通过Java程序来添加及删除Word书签
    这篇文章主要介绍了如何通过Java程序来添加及删除Word书签,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Word中,书签功能常用于查找、定位、标记特定字符或段落,对于篇幅...
    99+
    2023-06-02
  • Android 安全加密:数字签名和数字证书详解
    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message...
    99+
    2022-06-06
    加密 数字证书 数字签名 Android
  • 微信小程序ssl证书过期怎么解决
    微信小程序的SSL证书过期后,需要重新申请、安装证书并更新小程序的域名设置。具体的解决步骤如下:1. 重新申请SSL证书:可以联系S...
    99+
    2023-05-14
    微信小程序ssl证书 ssl证书
  • Unity脚本自动添加头部注释的全过程
    目录Unity脚本自动添加头部注释1. 修改Unity模板2. 通过代码修改为动态的结语Unity脚本自动添加头部注释 就是创建.cs文件时自动添加作者名,创建时间,文件名等 看示例...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作