一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - RestTemplate添加HTTPS證書全過程解析

RestTemplate添加HTTPS證書全過程解析

2022-03-06 13:09maeeki Java教程

這篇文章主要介紹了RestTemplate添加HTTPS證書全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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沒太大關系 , 若是不需要就將它以及相關代碼刪掉即可

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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;
/**
 * Created by ZhaoTengchao on 2019/4/12.
 */
@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

?
1
2
3
4
5
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.3</version>
</dependency>

這里使用httpclient的factory

配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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;
}

驗證

?
1
2
3
4
5
6
@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);
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/fengbird/article/details/89462295

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国内自拍网红在线自拍综合 | 久久机热视频 这里只有精品首页 | 亚洲国产精品综合欧美 | 亚洲高清视频免费 | 无码人妻丰满熟妇啪啪网不卡 | 亚洲欧美日韩国产一区二区精品 | 国产午夜亚洲精品不卡 | 日产免费自线一二区 | 久久这里只有精品视频e | 日韩国产欧美一区二区三区 | 十八女下面流水不遮免费 | 国产高清一区二区 | 欧美视频一区二区三区在线观看 | 黄绝一级 | 国产精品日本一区二区不卡视频 | 99热这里只有精品一区二区三区 | 99热精品在线免费观看 | 99久视频 | 波多野结衣在线中文字幕 | 国产精品国色综合久久 | bedfriend泰剧全集免费观看 | 国产男人搡女人免费视频 | 欧美成人精品福利在线视频 | 四虎www| 2020国产精品视频免费 | 我的美女奴隶 | 超级碰碰青草免费视频92 | 国产中文在线视频 | 丰满大屁股美女一级毛片 | 免费观看大片毛片 | ai换脸明星造梦工厂忘忧草 | 2018天天拍拍拍免费视频 | 天堂bt在线 | 国产裸露片段精华合集链接 | 欧美第一视频 | 欧美高清在线精品一区 | 色哟哟精品 | 我与岳乱短篇小说 | 亚洲欧美日韩国产精品影院 | 91国在线观看 | 色综合亚洲精品激情狠狠 |